// File: /workspace/github_cpp_makefile_star2_O3/quiath[P]fast-atoi/main.cpp
// Function: main
int main(int argc, char* argv[])
{
    unsigned MAX_WORD_LEN = 8;
    unsigned long N = 10000000UL;
    unsigned WORD_COUNT = 10000;
    bool digits_only = false;
    bool use_atol = false;
    std::string out_filename = "";

    std::vector<std::string> args(argv, argv + argc);
    int i = 1;
    while (i < args.size())
    {
        if (args[i] == "-t" || args[i] == "--unittest")
        {
            unit_test();
            return 0;
        }
        if (args[i] == "-d" || args[i] == "--digitsonly")
        {
            digits_only = true;
        }
        if (args[i] == "-a" || args[i] == "--atol")
        {
            use_atol = true;
        }

        if ((args[i] == "-l" || args[i] == "--length") && 
            i < args.size()) 
        {
            if ((MAX_WORD_LEN = atoi(args[i + 1].c_str())) > 20 || MAX_WORD_LEN == 0) 
            {
                std::cerr << "Invalid length" << std::endl;
                return 1;
            }
            i++;
        }       
        if ((args[i] == "-w" || args[i] == "--words") && 
            i < args.size())
        {
            if ((WORD_COUNT = atol(args[i + 1].c_str())) > 1000000 || WORD_COUNT == 0) 
            {
                std::cerr << "Invalid word count" << std::endl;
                return 1;
            }
            i++;
        }
        if ((args[i] == "-n" || args[i] == "--numloops") && 
            i < args.size())
        {
            if ((N = atol(args[i + 1].c_str())) > 1000000000000UL || N == 0) 
            {
                std::cerr << "Invalid number of loops" << std::endl;
                return 1;
            }
            i++;
        }
        if ((args[i] == "-o" || args[i] == "--output") && 
            i < args.size())
        {
            out_filename = args[i + 1];
            i++;
        }

        i++;
    }

    for (size_t L = 1; L <= MAX_WORD_LEN; ++L)
    {

        Name2Time best;
        std::vector<std::string> v;
        generate_add(v, WORD_COUNT, L, digits_only);


        std::cout << "Digits per number: " << L << " The string contains"
                  << (digits_only ? " digits only" : " whitespace and sign" ) << std::endl; 
        std::cout << "Int size in bytes:" << sizeof(myint) << std::endl;
        std::cout << "Loops:" << N << std::endl;
        std::cout << "Words:" << WORD_COUNT << std::endl;
        std::cout << "Ramp up:" << std::endl;
        test(N, atoi, v, best, "");

        for (int i = 0; i < 3; ++i) 
        {
            test(N, zero, v, best,            "zero..........");
            if (use_atol)
            {
                test(N, atol, v, best,            "atol..........");
            }
            else
            {
                test(N, atoi, v, best,            "atoi..........");
            }
            test(N, atoisimple, v, best,      "atoisimple....");
            test(N, fastatoi, v, best,        "fastatoi......");
            test(N, fastatoiadd, v, best,     "fastatoiadd...");
            test(N, fastatoiaddunr, v, best,  "fastatoiaddunr");
        }

        for (auto& kv : best)
        {
            std::cout << "Best: " << kv.first << " : " << std::setw(11) << kv.second << std::endl;
        }

        if (out_filename.length() > 0) 
        {
            std::ofstream f(out_filename.c_str(), std::ios::app | std::ios::out);
            if (!f.fail())
            {
                if (L == 1)
                {
                    // header
                    f << "\"Length\",\"Digits only\"" ;
                    for (auto& kv : best)
                    {
                         f << ",\"" << kv.first << "\""; 
                    }
                    f << std::endl;
                }
                f << L << "," << (digits_only ? 1 : 0);

                for (auto& kv : best)
                {
                    f << "," << kv.second;
                }
                f << std::endl;
            }
        }
        else
        {
          std::cout << "No output file param" << std::endl;
        }
    
    }

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d8, %rsp            # imm = 0x2D8
movl %edi, %ebx
leaq 0x88(%rsp), %rax
leaq 0x213d(%rip), %rdx      # 0x5046
leaq 0x78(%rsp), %rdi
movq %rsi, %r14
movq %rdx, %rsi
movq %rax, -0x10(%rax)
callq 0x44cc
movslq %ebx, %rax
leaq (%r14,%rax,8), %rdx
leaq 0xd8(%rsp), %rbx
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
movq %rbx, %rcx
callq 0x3d7e
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rax
subq %rdi, %rax
cmpq $0x21, %rax
jb 0x3248
movl $0x2710, %eax           # imm = 0x2710
movl $0x1, %r15d
movl $0x989680, %r14d        # imm = 0x989680
movl $0x1, %r12d
movl $0x0, 0x20(%rsp)
movl $0x0, 0x2c(%rsp)
movq %rax, 0x38(%rsp)
movl $0x8, %eax
movq %rax, 0x30(%rsp)
movq %r12, %r13
shlq $0x5, %r13
leaq 0x214f(%rip), %rsi      # 0x50e6
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3a31
movq 0x8(%rsp), %rdi
leaq 0x2136(%rip), %rsi      # 0x50e9
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3a31
movq 0x8(%rsp), %rdi
leaq 0x2125(%rip), %rsi      # 0x50f4
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x2ff3
movq 0x8(%rsp), %rdi
leaq 0x2110(%rip), %rsi      # 0x50f7
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
jne 0x2ff9
movb $0x1, %al
movl %eax, 0x20(%rsp)
movq 0x8(%rsp), %rdi
leaq 0x20ff(%rip), %rsi      # 0x5104
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3029
movq 0x8(%rsp), %rdi
leaq 0x20ea(%rip), %rsi      # 0x5107
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
jne 0x302f
movb $0x1, %al
movl %eax, 0x2c(%rsp)
movq 0x8(%rsp), %rdi
leaq 0x20d3(%rip), %rsi      # 0x510e
addq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3066
addq 0x8(%rsp), %r13
leaq 0x20be(%rip), %rsi      # 0x5111
movq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3066
movq 0x8(%rsp), %r13
jmp 0x30a1
movq 0x8(%rsp), %r13
movq 0x10(%rsp), %rax
subq %r13, %rax
sarq $0x5, %rax
cmpq %r12, %rax
jbe 0x30a1
movslq %r15d, %rax
shlq $0x5, %rax
movq 0x20(%rax,%r13), %rdi
callq 0x2320
leal -0x15(%rax), %ecx
cmpl $-0x14, %ecx
jb 0x3a6d
movq %rax, 0x30(%rsp)
incl %r15d
movslq %r15d, %r12
leaq 0x207e(%rip), %rsi      # 0x5129
movq %r12, %rbp
shlq $0x5, %rbp
addq %rbp, %r13
movq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x30e0
addq 0x8(%rsp), %rbp
leaq 0x205f(%rip), %rsi      # 0x512c
movq %rbp, %rdi
callq 0x2090
testl %eax, %eax
je 0x30e0
movq 0x8(%rsp), %r13
jmp 0x3125
movq 0x8(%rsp), %r13
movq 0x10(%rsp), %rax
subq %r13, %rax
sarq $0x5, %rax
cmpq %r12, %rax
jbe 0x3125
movslq %r15d, %r12
incq %r12
movq %r12, %rax
shlq $0x5, %rax
movq (%r13,%rax), %rdi
callq 0x2318
movl $0xfff0bdbf, %edx       # imm = 0xFFF0BDBF
leal (%rax,%rdx), %ecx
cmpl %edx, %ecx
jbe 0x3a7b
movq %rax, 0x38(%rsp)
incl %r15d
movq %r12, %rbp
shlq $0x5, %rbp
leaq 0x2014(%rip), %rsi      # 0x5147
addq %rbp, %r13
movq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x3161
addq 0x8(%rsp), %rbp
leaq 0x1ffc(%rip), %rsi      # 0x514a
movq %rbp, %rdi
callq 0x2090
testl %eax, %eax
je 0x3161
movq 0x8(%rsp), %r13
jmp 0x31ad
movq 0x8(%rsp), %r13
movq 0x10(%rsp), %rax
subq %r13, %rax
sarq $0x5, %rax
cmpq %r12, %rax
jbe 0x31ad
movslq %r15d, %r12
incq %r12
movq %r12, %rax
shlq $0x5, %rax
movq (%r13,%rax), %rdi
callq 0x2318
movabsq $-0xe8d4a51001, %rcx    # imm = 0xFFFFFF172B5AEFFF
movq %rax, %r14
addq %rcx, %rax
incq %rcx
cmpq %rcx, %rax
jb 0x3a89
incl %r15d
movq %r12, %rbp
shlq $0x5, %rbp
leaq 0x1fb2(%rip), %rsi      # 0x516d
addq %rbp, %r13
movq %r13, %rdi
callq 0x2090
testl %eax, %eax
je 0x31e2
addq 0x8(%rsp), %rbp
leaq 0x1f9a(%rip), %rsi      # 0x5170
movq %rbp, %rdi
callq 0x2090
testl %eax, %eax
jne 0x3211
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
cmpq %r12, %rcx
jbe 0x3211
movslq %r15d, %rcx
shlq $0x5, %rcx
leaq 0x20(%rcx,%rax), %rsi
leaq 0x78(%rsp), %rdi
callq 0x2120
incl %r15d
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rax
incl %r15d
movslq %r15d, %r12
subq %rdi, %rax
sarq $0x5, %rax
cmpq %r12, %rax
ja 0x2f89
movq 0x30(%rsp), %rax
movl 0x20(%rsp), %esi
movq 0x38(%rsp), %rdi
testl %eax, %eax
jne 0x3262
jmp 0x3a36
movl $0x2710, %edi           # imm = 0x2710
movl $0x989680, %r14d        # imm = 0x989680
movl $0x8, %eax
xorl %esi, %esi
movl $0x0, 0x2c(%rsp)
movl %esi, %ecx
movl %eax, %eax
movq %rax, 0xa8(%rsp)
leaq 0x1f2d(%rip), %rax      # 0x51a2
leaq 0x1f33(%rip), %rdx      # 0x51af
leaq 0xe8(%rsp), %r15
andb $0x1, %cl
cmovneq %rax, %rdx
movl %esi, %eax
notb %al
movq %rdx, 0xb8(%rsp)
movq 0x4d1a(%rip), %rdx      # 0x7fb8
movzbl %al, %eax
andl $0x1, %eax
leaq 0xc(,%rax,8), %rax
movq %rax, 0xb0(%rsp)
movl %edi, %eax
movzbl %cl, %edi
movq (%rdx), %rcx
movq %rax, 0x30(%rsp)
movq 0x18(%rdx), %rax
movl $0x1, %edx
movl %edi, 0x74(%rsp)
leaq 0xc0(%rsp), %rdi
movq %rcx, 0xa0(%rsp)
movzbl %sil, %ecx
movq %rax, 0x98(%rsp)
andl $0x1, %ecx
movl %ecx, 0x38(%rsp)
leaq 0x48(%rsp), %rax
vxorps %xmm0, %xmm0, %xmm0
xorl %ecx, %ecx
movl $0x0, 0x48(%rsp)
movq %rcx, 0x50(%rsp)
movq %rcx, 0xd0(%rsp)
movq %rax, 0x58(%rsp)
movq %rax, 0x60(%rsp)
movq %rcx, 0x68(%rsp)
vmovaps %xmm0, 0xc0(%rsp)
movl 0x38(%rsp), %ecx
movq 0x30(%rsp), %rsi
movq %rdx, 0x20(%rsp)
movq %rdi, %rbp
callq 0x2ba8
movq 0x4c82(%rip), %rdi      # 0x7fc8
movl $0x13, %edx
leaq 0x1e27(%rip), %rsi      # 0x5179
callq 0x2250
movq 0x4c6a(%rip), %rdi      # 0x7fc8
movq 0x20(%rsp), %rsi
callq 0x2160
movl $0x14, %edx
leaq 0x1e19(%rip), %rsi      # 0x518d
movq %rax, %rdi
movq %rax, %r13
callq 0x2250
movq 0xb8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq %r13, %rdi
callq 0x2250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x4c02(%rip), %rdi      # 0x7fc8
movl $0x12, %edx
leaq 0x1df2(%rip), %rsi      # 0x51c4
callq 0x2250
movq 0x4bea(%rip), %rdi      # 0x7fc8
movl $0x8, %esi
callq 0x2160
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x4baf(%rip), %rdi      # 0x7fc8
movl $0x6, %edx
leaq 0x1db2(%rip), %rsi      # 0x51d7
callq 0x2250
movq 0x4b97(%rip), %rdi      # 0x7fc8
movq %r14, %rsi
callq 0x2160
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x4b5e(%rip), %rdi      # 0x7fc8
movl $0x6, %edx
leaq 0x1d68(%rip), %rsi      # 0x51de
callq 0x2250
movq 0x4b46(%rip), %rdi      # 0x7fc8
movq 0x30(%rsp), %rsi
callq 0x2160
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x4b0b(%rip), %rdi      # 0x7fc8
movl $0x8, %edx
leaq 0x1d1c(%rip), %rsi      # 0x51e5
callq 0x2250
movq 0x4af3(%rip), %rcx      # 0x7fc8
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x2210
movq 0x4ad8(%rip), %rdi      # 0x7fc8
movsbl %al, %esi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq %r15, 0xd8(%rsp)
leaq 0x1b37(%rip), %rdx      # 0x5046
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x44cc
movq 0x4aaf(%rip), %rsi      # 0x7fd0
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x3dba
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3546
callq 0x21f0
movl $0x3, %r12d
movq %r15, 0xd8(%rsp)
leaq 0x1c93(%rip), %rsi      # 0x51ee
leaq 0x1c9a(%rip), %rdx      # 0x51fc
movq %rbx, %rdi
callq 0x44cc
leaq -0xf35(%rip), %rsi      # 0x263c
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3596
callq 0x21f0
testb $0x1, 0x2c(%rsp)
je 0x35d7
movq %r15, 0xd8(%rsp)
leaq 0x1c51(%rip), %rsi      # 0x51fd
leaq 0x1c58(%rip), %rdx      # 0x520b
movq %rbx, %rdi
callq 0x44cc
movq 0x49fe(%rip), %rsi      # 0x7fc0
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
jmp 0x360f
movq %r15, 0xd8(%rsp)
leaq 0x1c26(%rip), %rsi      # 0x520c
leaq 0x1c2d(%rip), %rdx      # 0x521a
movq %rbx, %rdi
callq 0x44cc
movq 0x49d4(%rip), %rsi      # 0x7fd0
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x3dba
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3621
callq 0x21f0
movq %r15, 0xd8(%rsp)
leaq 0x1beb(%rip), %rsi      # 0x521b
leaq 0x1bf2(%rip), %rdx      # 0x5229
movq %rbx, %rdi
callq 0x44cc
leaq -0x11da(%rip), %rsi     # 0x246c
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x366b
callq 0x21f0
movq %r15, 0xd8(%rsp)
leaq 0x1bb0(%rip), %rsi      # 0x522a
leaq 0x1bb7(%rip), %rdx      # 0x5238
movq %rbx, %rdi
callq 0x44cc
leaq -0x11c0(%rip), %rsi     # 0x24d0
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x36b5
callq 0x21f0
movq %r15, 0xd8(%rsp)
leaq 0x1b75(%rip), %rsi      # 0x5239
leaq 0x1b7c(%rip), %rdx      # 0x5247
movq %rbx, %rdi
callq 0x44cc
leaq -0x11a0(%rip), %rsi     # 0x253a
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x36ff
callq 0x21f0
movq %r15, 0xd8(%rsp)
leaq 0x1b3a(%rip), %rsi      # 0x5248
leaq 0x1b41(%rip), %rdx      # 0x5256
movq %rbx, %rdi
callq 0x44cc
leaq -0x1178(%rip), %rsi     # 0x25ac
leaq 0x40(%rsp), %rcx
movq %r14, %rdi
movq %rbp, %rdx
movq %rbx, %r8
callq 0x4068
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3749
callq 0x21f0
decl %r12d
jne 0x354c
movq 0x58(%rsp), %r13
leaq 0x48(%rsp), %rax
cmpq %rax, %r13
je 0x37ff
movq 0x485c(%rip), %rdi      # 0x7fc8
movl $0x6, %edx
leaq 0x1adf(%rip), %rsi      # 0x5257
callq 0x2250
movq 0x28(%r13), %rdx
movq 0x20(%r13), %rsi
movq 0x483c(%rip), %rdi      # 0x7fc8
callq 0x2250
movl $0x3, %edx
leaq 0x1ac1(%rip), %rsi      # 0x525e
movq %rax, %rdi
movq %rax, %r12
callq 0x2250
movq (%r12), %rax
movq -0x18(%rax), %rax
movq $0xb, 0x10(%r12,%rax)
movq 0x40(%r13), %rsi
movq %r12, %rdi
callq 0x2150
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq %r13, %rdi
callq 0x2180
movq %rax, %r13
jmp 0x3757
cmpq $0x0, 0x80(%rsp)
je 0x38b2
movq 0x78(%rsp), %rsi
movl $0x11, %edx
movq %rbx, %rdi
callq 0x2240
movq 0xd8(%rsp), %rax
movq -0x18(%rax), %rax
testb $0x5, 0xf8(%rsp,%rax)
jne 0x39c5
cmpq $0x1, 0x20(%rsp)
jne 0x392d
movl $0x16, %edx
leaq 0x1a10(%rip), %rsi      # 0x5262
movq %rbx, %rdi
callq 0x2250
movq 0x58(%rsp), %r13
leaq 0x48(%rsp), %rax
cmpq %rax, %r13
je 0x3901
movl $0x2, %edx
leaq 0x1a00(%rip), %rsi      # 0x5279
movq %rbx, %rdi
callq 0x2250
movq 0x28(%r13), %rdx
movq 0x20(%r13), %rsi
movq %rbx, %rdi
callq 0x2250
movl $0x1, %edx
leaq 0x19dd(%rip), %rsi      # 0x527a
movq %rax, %rdi
callq 0x2250
movq %r13, %rdi
callq 0x2180
movq %rax, %r13
jmp 0x385f
movq 0x470f(%rip), %rdi      # 0x7fc8
movl $0x14, %edx
leaq 0x19b9(%rip), %rsi      # 0x527e
callq 0x2250
movq 0x46f7(%rip), %rcx      # 0x7fc8
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x2210
movq 0x46dc(%rip), %rdi      # 0x7fc8
movsbl %al, %esi
callq 0x2030
movq %rax, %rdi
callq 0x2170
jmp 0x3a03
movq 0xd8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0x2160
movl $0x1, %edx
leaq 0x1936(%rip), %rsi      # 0x527c
movq %rax, %rdi
movq %rax, %r12
callq 0x2250
movl 0x74(%rsp), %esi
movq %r12, %rdi
callq 0x22c0
movq 0x58(%rsp), %r13
leaq 0x48(%rsp), %rax
cmpq %rax, %r13
je 0x3999
movl $0x1, %edx
leaq 0x1904(%rip), %rsi      # 0x527c
movq %rbx, %rdi
callq 0x2250
movq 0x40(%r13), %rsi
movq %rbx, %rdi
callq 0x2150
movq %r13, %rdi
callq 0x2180
movq %rax, %r13
jmp 0x3962
movq 0xd8(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0xa0(%rsp), %rax
movq 0x98(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
movq %rax, 0xd8(%rsp)
movq -0x18(%rax), %rax
movq %rcx, 0xd8(%rsp,%rax)
callq 0x21c0
leaq 0x1d0(%rsp), %rdi
callq 0x20b0
movq %rbp, %rdi
callq 0x3bfc
leaq 0x40(%rsp), %rdi
callq 0x4320
movq 0x20(%rsp), %rcx
movq %rbp, %rdi
leaq 0x1(%rcx), %rdx
cmpq 0xa8(%rsp), %rcx
jne 0x32f1
jmp 0x3a36
callq 0x264f
xorl %ebx, %ebx
leaq 0x8(%rsp), %rdi
callq 0x3bfc
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x3a59
callq 0x21f0
movl %ebx, %eax
addq $0x2d8, %rsp            # imm = 0x2D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0xe, %edx
leaq 0x16a1(%rip), %rsi      # 0x511a
jmp 0x3a95
movl $0x12, %edx
leaq 0x16ad(%rip), %rsi      # 0x5134
jmp 0x3a95
movl $0x17, %edx
leaq 0x16c0(%rip), %rsi      # 0x5155
movq 0x4554(%rip), %rbx      # 0x7ff0
movq %rbx, %rdi
callq 0x2250
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movl $0xa, %esi
movq %rbx, %rdi
callq 0x2210
movq 0x4531(%rip), %rdi      # 0x7ff0
movsbl %al, %esi
callq 0x2030
movl $0x1, %ebx
movq %rax, %rdi
callq 0x2170
jmp 0x3a38
jmp 0x3ae0
movq %rax, %rbx
jmp 0x3b58
movq %rax, %rbx
jmp 0x3b4e
jmp 0x3b34
jmp 0x3b34
jmp 0x3b1b
jmp 0x3aef
jmp 0x3aef
leaq 0xd8(%rsp), %rdi
movq %rax, %rbx
callq 0x2270
jmp 0x3b37
jmp 0x3b34
jmp 0x3b34
jmp 0x3b1b
jmp 0x3b1b
jmp 0x3b34
jmp 0x3b34
jmp 0x3b34
jmp 0x3b1b
jmp 0x3b34
jmp 0x3b1b
jmp 0x3b34
jmp 0x3b1b
jmp 0x3b1b
movq 0xd8(%rsp), %rdi
movq %rax, %rbx
cmpq %r15, %rdi
je 0x3b37
callq 0x21f0
jmp 0x3b37
jmp 0x3b34
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x3bfc
leaq 0x40(%rsp), %rdi
callq 0x4320
leaq 0x8(%rsp), %rdi
callq 0x3bfc
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x3b6f
callq 0x21f0
movq %rbx, %rdi
callq 0x22d0
nop