// File: /workspace/github_cpp_makefile_star2_O2/mshabbirhasan[P]ups-indel/src/ups_indel.cpp
// Function: generateEir(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, _IO_FILE*)
void generateEir(string chrom, string pos, string id, string refer, string alt,
    string qual, string filter, string info, string * sequence,
    unsigned long int position, string pattern, string type,
    FILE * fout) {
    if (type == "I") {
        string x;
        string x_prime;
        string str1;
        string str2;
        unsigned long int ir, il;

        int length_difference = alt.length() - refer.length();

        if (refer.length() > 1 && refer == alt.substr(0, refer.length())) {
            position += refer.length() - 1;
        } else if (refer.length() > 2 &&
            refer == alt.substr(length_difference, alt.length())) {
            position -= 1;
        }

        /*********Extend to the right *************/
        x = pattern;
        x_prime = getLeftCircularPermutation( & x);
        ir = position - 1; // because in VCF file position starts from 1 but in

        if ((ir + 1) < sequence -> length()) {
            string r(1, sequence -> at(ir + 1));

            str1 = x + r;
            str2 = r + x_prime;

            while (str1.compare(str2) == 0) {
                x = x_prime;
                ir++;
                if ((ir + 1) >= sequence -> length()) {
                    ir--;
                    break;
                }
                r = sequence -> at(ir + 1);
                x_prime = getLeftCircularPermutation( & x);

                str1 = x + r;
                str2 = r + x_prime;
            }
        } else {
            ir--;
        }

        /*********Extend to the left *************/
        x = pattern;
        x_prime = getRightCircularPermutation( &x);
        il = position - 1; // because in VCF file position starts from 1 but seqan
        // starts string index from 0.
        if (il > 0) {
            string l(1, sequence -> at(il));

            str1 = l + x;
            str2 = x_prime + l;

            while (str1.compare(str2) == 0) {
                x = x_prime;
                il--;
                if (il < 0) {
                    break;
                }
                l = sequence -> at(il);
                x_prime = getRightCircularPermutation( &x);

                str1 = l + x;
                str2 = x_prime + l;
            }
        }

        fprintf(fout, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s%s%s%lu%s%lu%s\t%s\n",
            chrom.c_str(), pos.c_str(), id.c_str(), refer.c_str(), alt.c_str(),
            qual.c_str(), filter.c_str(), "+", x.c_str(), "[", (il + 2), " - ",
            (ir + 2), "]", info.c_str());
    } else if (type == "D") {
        string x;
        string x_prime;
        string str1;
        string str2;
        unsigned long int ir, il;

        int deletionLength = refer.length() - alt.length();

        if ((alt.length() > 1 && alt == refer.substr(0, alt.length()))) {
            if (alt != refer.substr(deletionLength, refer.length())) { // TCA TC
                position += alt.length() - 1;
            } else {
                if (alt.length() <= 2) { // AAAAAAAAA AA
                    position += alt.length() - 1;
                } else { // AAACAAA AAA
                    position += deletionLength - 1;
                }
            }
        } else if (alt.length() == 1 && alt == refer.substr(0, alt.length()) &&
            alt == refer.substr(refer.length() - 1)) { // CAC C
            if (deletionLength == 1) { // CC C
                position -= 1;
            } else { // CAC C
                position -= alt.length() + 1;
            }
        } else if (alt == refer.substr(deletionLength, refer.length()) &&
            refer.length() != 4 && alt.length() != 2 &&
            alt != refer.substr(0, deletionLength - 1)) { // TATAC TAC
            position -= 1;
        }

        /*********Extend to the right *************/

        x = pattern;

        int length = strlen(pattern.c_str());
        x_prime = getLeftCircularPermutation( & x);

        ir = position + 1;
        if (ir < sequence -> length()) {
            string substring = sequence -> substr(ir, length);

            while (substring.compare(x_prime) == 0) {
                ir++;
                x = x_prime;
                x_prime = getLeftCircularPermutation( & x);
                substring = sequence -> substr(ir, length);
            }
        }

        /*********Extend to the left *************/
        x = pattern;
        x_prime = getRightCircularPermutation( & x);
        il = position - 1;
        if (il >= 0) {
            string l(1, sequence -> at(il));

            str1 = l + x;
            str2 = x_prime + l;

            while (str1.compare(str2) == 0) {
                x = x_prime;
                il--;
                if (il < 0) {
                    break;
                }
                l = sequence -> at(il);
                x_prime = getRightCircularPermutation( & x);

                str1 = l + x;
                str2 = x_prime + l;
            }
        }

        fprintf(fout, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s%s%s%lu%s%lu%s\t%s\n",
            chrom.c_str(), pos.c_str(), id.c_str(), refer.c_str(), alt.c_str(),
            qual.c_str(), filter.c_str(), "-", x.c_str(), "[", (il + 2), " - ",
            ir, "]", info.c_str());
    } else if (type == "N/A") {
        fprintf(fout, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", chrom.c_str(),
            pos.c_str(), id.c_str(), refer.c_str(), alt.c_str(), qual.c_str(),
            filter.c_str(), "N/A[]", info.c_str());
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %r9, -0xe8(%rbp)
movq %r8, -0x68(%rbp)
movq %rcx, %r15
movq %rdx, -0xe0(%rbp)
movq %rsi, -0xd8(%rbp)
movq %rdi, -0xd0(%rbp)
movq 0x38(%rbp), %rbx
leaq 0x9210(%rip), %rsi      # 0xd006
movq %rbx, %rdi
callq 0x681b
leaq -0x78(%rbp), %r14
testb %al, %al
movq %r15, -0x38(%rbp)
je 0x3eb7
movq %r14, -0x88(%rbp)
andq $0x0, -0x80(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
leaq -0xf8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
xorl %edx, %edx
movb %dl, (%rax)
movb %dl, (%rcx)
leaq -0x118(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %dl, -0x78(%rbp)
movb %dl, (%rax)
movq 0x8(%r15), %rbx
cmpq $0x2, %rbx
jb 0x3fc0
movq -0x68(%rbp), %rsi
movq 0x8(%rsi), %r12
leaq -0x58(%rbp), %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3340
leaq -0x58(%rbp), %r14
movq -0x38(%rbp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0x67eb
movl %eax, %r15d
movq %r14, %rdi
callq 0x3668
movq 0x8(%r13), %rax
testb %r15b, %r15b
je 0x4057
movq 0x28(%rbp), %r15
addq %rax, %r15
decq %r15
movq %r15, -0x30(%rbp)
jmp 0x40a3
leaq 0x917c(%rip), %rsi      # 0xd03a
movq %rbx, %rdi
callq 0x681b
testb %al, %al
je 0x3fd1
movq %r14, -0x88(%rbp)
andq $0x0, -0x80(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq -0xf8(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
leaq -0x118(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %cl, -0x78(%rbp)
movb %cl, (%rax)
movb %cl, (%rdx)
movq -0x38(%rbp), %rsi
movq 0x8(%rsi), %r15
movq -0x68(%rbp), %r14
movq 0x8(%r14), %rcx
subq %rcx, %r15
movabsq $-0x100000000, %r12     # imm = 0xFFFFFFFF00000000
cmpq $0x2, %rcx
jb 0x44a0
leaq -0x58(%rbp), %rdi
xorl %edx, %edx
callq 0x3340
leaq -0x58(%rbp), %rbx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x67eb
movq %r14, %r13
movl %eax, %r14d
movq %rbx, %rdi
callq 0x3668
testb %r14b, %r14b
je 0x4499
movslq %r15d, %rdx
movq -0x38(%rbp), %rsi
movq 0x8(%rsi), %rcx
leaq -0x58(%rbp), %rdi
callq 0x3340
movq -0x68(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x680e
movl %eax, %r14d
movq %rbx, %rdi
callq 0x3668
movq 0x8(%r13), %rax
movq 0x28(%rbp), %rcx
addq %rax, %rcx
decq %rcx
testb %r14b, %r14b
jne 0x3fb8
cmpq $0x2, %rax
ja 0x4936
movq %rcx, %r15
jmp 0x457e
movq 0x20(%rbp), %r14
movq 0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x40a7
leaq 0x9064(%rip), %rsi      # 0xd03c
movq %rbx, %rdi
callq 0x681b
testb %al, %al
je 0x48db
movq -0xd0(%rbp), %rax
movq (%rax), %rdx
movq -0xd8(%rbp), %rax
movq (%rax), %rcx
movq -0xe0(%rbp), %rax
movq (%rax), %r8
movq -0x38(%rbp), %rax
movq (%rax), %r9
subq $0x8, %rsp
leaq 0x9044(%rip), %r10      # 0xd05c
leaq 0x9021(%rip), %rsi      # 0xd040
movq 0x40(%rbp), %rdi
xorl %eax, %eax
movq 0x18(%rbp), %r11
pushq (%r11)
pushq %r10
movq 0x10(%rbp), %r10
pushq (%r10)
movq -0xe8(%rbp), %r10
pushq (%r10)
movq -0x68(%rbp), %r10
pushq (%r10)
callq 0x3470
addq $0x138, %rsp            # imm = 0x138
jmp 0x48e2
cmpq $0x3, %rax
movq 0x20(%rbp), %r14
movq 0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
jb 0x40a7
subq %rbx, %r12
movslq %r12d, %rdx
movq -0x68(%rbp), %rsi
movq 0x8(%rsi), %rcx
leaq -0x58(%rbp), %rdi
callq 0x3340
leaq -0x58(%rbp), %rbx
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
callq 0x67eb
movl %eax, %r14d
movq %rbx, %rdi
callq 0x3668
movzbl %r14b, %eax
subq %rax, -0x30(%rbp)
movq 0x20(%rbp), %r14
leaq -0x88(%rbp), %rdi
movq 0x30(%rbp), %rsi
callq 0x31d0
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3ca6
leaq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
movq -0x30(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpq 0x8(%r14), %rax
jae 0x4269
movq %r14, %rdi
movq -0x30(%rbp), %rsi
callq 0x3620
movsbl (%rax), %edx
leaq -0x48(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x58(%rbp), %rdi
pushq $0x1
popq %rsi
callq 0x3380
leaq -0xc8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
leaq -0x58(%rbp), %rdx
callq 0x682b
leaq -0x108(%rbp), %rdi
leaq -0xc8(%rbp), %rbx
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
leaq -0xc8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0xa8(%rbp), %rdx
callq 0x682b
leaq -0x128(%rbp), %r15
leaq -0xc8(%rbp), %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x33e0
movq %r12, %rdi
callq 0x3668
movq -0x30(%rbp), %rax
incq %rax
movq %rax, -0x60(%rbp)
leaq -0xa8(%rbp), %r13
leaq -0x58(%rbp), %r14
leaq -0x108(%rbp), %rdi
movq %r15, %rbx
movq %r15, %rsi
callq 0x3050
testl %eax, %eax
leaq -0x88(%rbp), %r15
jne 0x4260
movq %r15, %rdi
movq %r13, %rsi
callq 0x31d0
movq 0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
cmpq 0x8(%rax), %rcx
jae 0x4260
movq 0x20(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x3620
movsbl (%rax), %esi
movq %r14, %rdi
callq 0x3540
movq %r12, %rdi
movq %r15, %rsi
callq 0x3ca6
movq %r13, %rdi
movq %r12, %rsi
callq 0x33e0
movq %r12, %rdi
callq 0x3668
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x682b
leaq -0x108(%rbp), %rdi
movq %r12, %rsi
callq 0x33e0
movq %r12, %rdi
callq 0x3668
movq %r12, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x682b
movq %rbx, %r15
movq %rbx, %rdi
movq %r12, %rsi
callq 0x33e0
movq %r12, %rdi
callq 0x3668
incq -0x60(%rbp)
jmp 0x419a
leaq -0x58(%rbp), %rdi
callq 0x3668
leaq -0x88(%rbp), %rdi
movq 0x30(%rbp), %rsi
callq 0x31d0
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3d28
movq -0x30(%rbp), %rax
leaq -0x1(%rax), %rbx
leaq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %r14
movq %r14, %rsi
callq 0x33e0
movq %r14, %rdi
callq 0x3668
testq %rbx, %rbx
je 0x4420
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x3620
movsbl (%rax), %edx
leaq -0x48(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x58(%rbp), %rdi
pushq $0x1
popq %rsi
callq 0x3380
leaq -0xc8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0x88(%rbp), %rdx
callq 0x682b
leaq -0x108(%rbp), %rdi
leaq -0xc8(%rbp), %rbx
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
leaq -0xc8(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0x58(%rbp), %rdx
callq 0x682b
leaq -0x128(%rbp), %r14
leaq -0xc8(%rbp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
incq -0x30(%rbp)
leaq -0x58(%rbp), %rbx
leaq -0x108(%rbp), %rdi
movq %r14, %rsi
callq 0x3050
testl %eax, %eax
jne 0x4411
leaq -0x88(%rbp), %r14
movq %r14, %rdi
leaq -0xa8(%rbp), %rsi
callq 0x31d0
movq -0x30(%rbp), %rax
leaq -0x3(%rax), %rsi
movq 0x20(%rbp), %rdi
callq 0x3620
movsbl (%rax), %esi
movq %rbx, %rdi
callq 0x3540
movq %r15, %rdi
movq %r14, %rsi
callq 0x3d28
leaq -0xa8(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x682b
leaq -0x108(%rbp), %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
movq %r15, %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x682b
leaq -0x128(%rbp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
decq -0x30(%rbp)
jmp 0x434d
leaq -0x58(%rbp), %rdi
callq 0x3668
movq -0x30(%rbp), %r13
jmp 0x4424
pushq $0x2
popq %r13
movq -0xd0(%rbp), %rax
movq (%rax), %rdx
movq -0xd8(%rbp), %rax
movq (%rax), %rcx
movq -0xe0(%rbp), %rax
movq (%rax), %r8
movq -0x38(%rbp), %rax
movq (%rax), %r9
leaq -0x88(%rbp), %rbx
subq $0x8, %rsp
leaq 0x8c05(%rip), %r10      # 0xd060
leaq 0x8bd4(%rip), %r11      # 0xd036
leaq 0x8bcb(%rip), %r14      # 0xd034
leaq 0x8bc2(%rip), %r15      # 0xd032
leaq 0x8b91(%rip), %rsi      # 0xd008
movq 0x40(%rbp), %rdi
xorl %eax, %eax
movq 0x18(%rbp), %r12
pushq (%r12)
pushq %r10
pushq -0x60(%rbp)
pushq %r11
pushq %r13
pushq %r14
pushq (%rbx)
pushq %r15
jmp 0x488e
movq 0x8(%r13), %rcx
movq %r13, %r14
cmpq $0x1, %rcx
jne 0x4531
leaq -0x58(%rbp), %rdi
pushq $0x1
popq %rcx
movq -0x38(%rbp), %rsi
xorl %edx, %edx
callq 0x3340
leaq -0x58(%rbp), %rsi
movq %r14, %rdi
callq 0x67eb
testb %al, %al
je 0x4528
movq -0x38(%rbp), %rsi
movq 0x8(%rsi), %rdx
decq %rdx
leaq -0xc8(%rbp), %rdi
pushq $-0x1
popq %rcx
callq 0x3340
leaq -0xc8(%rbp), %rbx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x67eb
movl %eax, %r14d
movq %rbx, %rdi
callq 0x3668
leaq -0x58(%rbp), %rdi
callq 0x3668
testb %r14b, %r14b
movq -0x68(%rbp), %r14
je 0x4531
cmpl $0x1, %r15d
jne 0x4943
movq 0x28(%rbp), %r15
decq %r15
jmp 0x457e
leaq -0x58(%rbp), %rdi
callq 0x3668
movslq %r15d, %rdx
movq -0x38(%rbp), %rsi
movq 0x8(%rsi), %rcx
leaq -0x58(%rbp), %rdi
callq 0x3340
leaq -0x58(%rbp), %rsi
movq %r14, %rdi
callq 0x67eb
testb %al, %al
je 0x456b
movq -0x38(%rbp), %rax
cmpq $0x4, 0x8(%rax)
je 0x456b
cmpq $0x2, 0x8(%r14)
jne 0x48ed
xorl %r15d, %r15d
movq 0x28(%rbp), %rbx
leaq -0x58(%rbp), %rdi
callq 0x3668
addq %rbx, %r15
leaq -0x88(%rbp), %rdi
movq 0x30(%rbp), %rbx
movq %rbx, %rsi
callq 0x31d0
movq %r15, -0x30(%rbp)
movq (%rbx), %rdi
callq 0x3170
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3ca6
leaq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %r14
movq %r14, %rsi
callq 0x33e0
movq %r14, %rdi
callq 0x3668
movq -0x30(%rbp), %rax
leaq 0x1(%rax), %r14
movq 0x20(%rbp), %rsi
cmpq 0x8(%rsi), %r14
jae 0x4679
movslq %ebx, %rcx
leaq -0x58(%rbp), %rdi
movq %r14, %rdx
movq %rcx, -0x60(%rbp)
callq 0x3340
leaq -0x58(%rbp), %r15
leaq -0xa8(%rbp), %r12
leaq -0x88(%rbp), %r13
leaq -0xc8(%rbp), %rbx
movq %r15, %rdi
movq %r12, %rsi
callq 0x3050
testl %eax, %eax
jne 0x4670
movq %r13, %rdi
movq %r12, %rsi
callq 0x31d0
movq %rbx, %rdi
movq %r13, %rsi
callq 0x3ca6
incq %r14
movq %r12, %rdi
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
movq %rbx, %rdi
movq 0x20(%rbp), %rsi
movq %r14, %rdx
movq -0x60(%rbp), %rcx
callq 0x3340
movq %r15, %rdi
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
jmp 0x460d
leaq -0x58(%rbp), %rdi
callq 0x3668
leaq -0x88(%rbp), %rdi
movq 0x30(%rbp), %rsi
callq 0x31d0
leaq -0x58(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3d28
leaq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %rbx
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
movq -0x30(%rbp), %rax
leaq -0x1(%rax), %rsi
movq 0x20(%rbp), %rdi
callq 0x3620
movsbl (%rax), %edx
leaq -0x48(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x58(%rbp), %rdi
pushq $0x1
popq %rsi
callq 0x3380
leaq -0xc8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0x88(%rbp), %rdx
callq 0x682b
movq %r14, -0x60(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0xc8(%rbp), %rbx
movq %rbx, %rsi
callq 0x33e0
movq %rbx, %rdi
callq 0x3668
leaq -0xc8(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0x58(%rbp), %rdx
callq 0x682b
leaq -0x128(%rbp), %r14
leaq -0xc8(%rbp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
incq -0x30(%rbp)
leaq -0xa8(%rbp), %rbx
leaq -0x58(%rbp), %r12
leaq -0x108(%rbp), %rdi
movq %r14, %r13
movq %r14, %rsi
callq 0x3050
testl %eax, %eax
jne 0x4814
leaq -0x88(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x31d0
movq -0x30(%rbp), %rax
leaq -0x3(%rax), %rsi
movq 0x20(%rbp), %rdi
callq 0x3620
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x3540
movq %r15, %rdi
movq %r14, %rsi
callq 0x3d28
movq %rbx, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x682b
leaq -0x108(%rbp), %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
movq %r15, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x682b
movq %r13, %r14
movq %r13, %rdi
movq %r15, %rsi
callq 0x33e0
movq %r15, %rdi
callq 0x3668
decq -0x30(%rbp)
jmp 0x475c
leaq -0x58(%rbp), %rdi
callq 0x3668
movq -0xd0(%rbp), %rax
movq (%rax), %rdx
movq -0xd8(%rbp), %rax
movq (%rax), %rcx
movq -0xe0(%rbp), %rax
movq (%rax), %r8
movq -0x38(%rbp), %rax
movq (%rax), %r9
leaq -0x88(%rbp), %rbx
subq $0x8, %rsp
leaq 0x880c(%rip), %r10      # 0xd060
leaq 0x87db(%rip), %r11      # 0xd036
leaq 0x87d2(%rip), %r15      # 0xd034
leaq 0x879b(%rip), %r12      # 0xd004
leaq 0x8798(%rip), %rsi      # 0xd008
movq 0x40(%rbp), %rdi
xorl %eax, %eax
movq 0x18(%rbp), %r13
pushq (%r13)
pushq %r10
pushq -0x60(%rbp)
pushq %r11
pushq -0x30(%rbp)
pushq %r15
pushq (%rbx)
pushq %r12
movq 0x10(%rbp), %r10
pushq (%r10)
movq -0xe8(%rbp), %r10
pushq (%r10)
movq -0x68(%rbp), %r10
pushq (%r10)
callq 0x3470
addq $0x60, %rsp
leaq -0x128(%rbp), %rdi
callq 0x3668
leaq -0x108(%rbp), %rdi
callq 0x3668
leaq -0xa8(%rbp), %rdi
callq 0x3668
movq %rbx, %rdi
callq 0x3668
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
shlq $0x20, %r15
addq %r12, %r15
sarq $0x20, %r15
leaq -0xc8(%rbp), %rdi
movq -0x38(%rbp), %rsi
xorl %edx, %edx
movq %r15, %rcx
callq 0x3340
leaq -0xc8(%rbp), %rbx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x680e
movl %eax, %r14d
movq %rbx, %rdi
callq 0x3668
movzbl %r14b, %r15d
negq %r15
jmp 0x456e
shlq $0x20, %r15
addq %r12, %r15
sarq $0x20, %r15
jmp 0x494a
movq 0x8(%r14), %r15
notq %r15
addq 0x28(%rbp), %r15
jmp 0x457e
jmp 0x49ab
jmp 0x49ab
jmp 0x498c
jmp 0x4979
jmp 0x4979
jmp 0x4979
jmp 0x4979
jmp 0x4979
jmp 0x49ab
jmp 0x49ab
jmp 0x4979
jmp 0x4979
jmp 0x4979
jmp 0x4979
jmp 0x49b9
jmp 0x49b9
jmp 0x498c
jmp 0x4979
jmp 0x498c
movq %rax, %rbx
jmp 0x49c5
jmp 0x498c
jmp 0x49b9
jmp 0x49b9
jmp 0x498c
jmp 0x498c
jmp 0x498c
jmp 0x498c
movq %rax, %rbx
jmp 0x49c5
jmp 0x49b9
jmp 0x49b9
jmp 0x49b9
jmp 0x49ab
jmp 0x49ab
jmp 0x49ab
jmp 0x49ab
jmp 0x49ab
jmp 0x49ab
jmp 0x49b9
jmp 0x49b9
jmp 0x49b9
jmp 0x49b9
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x3668
jmp 0x49c5
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x3668
leaq -0x128(%rbp), %rdi
callq 0x3668
leaq -0x108(%rbp), %rdi
callq 0x3668
leaq -0xa8(%rbp), %rdi
callq 0x3668
leaq -0x88(%rbp), %rdi
callq 0x3668
movq %rbx, %rdi
callq 0x3590