// File: /workspace/github_cpp_makefile_star2_O1/RipcordSoftware[P]lazyflatset/test/lazyflatset/main.cpp
// Function: main
int main() {
    std::vector<DataType> data;
    const unsigned max = 5 * 1000 * 1000;
    for (unsigned i = 0; i < max; ++i) {
        data.push_back(i);
    }
    
    std::cout << R"("", "listTailInsert", "vectorTailInsert", "vectorTailPush", "vectorHeadInsert", "setInsert", "unorderedSetInsert", "priorityQueuePush", "lazyFlatSetInsert", "lazyFlatSetInsert[new_item]")" << std::endl;
    
    std::cout << R"("Ascending", )";
    
    test(listTailInsert, data.begin(), data.end());
    test(vectorTailInsert, data.begin(), data.end());
    test(vectorTailPush, data.begin(), data.end());
    test(vectorHeadInsert, data.begin(), data.end());
    //test(vectorHeadPush, data.begin(), data.end());
    test(setInsert, data.begin(), data.end());
    test(unorderedSetInsert, data.begin(), data.end());
    test(priorityQueuePush, data.begin(), data.end());
    test(lazyFlatSetInsert, data.begin(), data.end());
    test(lazyFlatSetInsertNewItem, data.begin(), data.end(), true);
    
    std::cout << R"("Descending", )";
    
    std::reverse(data.begin(), data.end());
    
    test(listTailInsert, data.begin(), data.end());
    test(vectorTailInsert, data.begin(), data.end());
    test(vectorTailPush, data.begin(), data.end());
    test(vectorHeadInsert, data.begin(), data.end());
    //test(vectorHeadPush, data.begin(), data.end());
    test(setInsert, data.begin(), data.end());
    test(unorderedSetInsert, data.begin(), data.end());
    test(priorityQueuePush, data.begin(), data.end());
    test(lazyFlatSetInsert, data.begin(), data.end());
    test(lazyFlatSetInsertNewItem, data.begin(), data.end(), true);
    
    std::cout << R"("Partial shuffle", )";
    
    const unsigned blocks = 10000;
    const unsigned blockSize = max / blocks;
    auto iter = data.begin();
    for (unsigned i = 0; i < blocks; ++i) {
        auto iterEnd = iter + blockSize;
        std::random_shuffle(iter, iterEnd < data.end() ? iterEnd : data.end());
        iter += blockSize;
    }        
    
    test(listTailInsert, data.begin(), data.end());
    test(vectorTailInsert, data.begin(), data.end());
    test(vectorTailPush, data.begin(), data.end());
    test(vectorHeadInsert, data.begin(), data.end());
    //test(vectorHeadPush, data.begin(), data.end());
    test(setInsert, data.begin(), data.end());
    test(unorderedSetInsert, data.begin(), data.end());
    test(priorityQueuePush, data.begin(), data.end());
    test(lazyFlatSetInsert, data.begin(), data.end());
    test(lazyFlatSetInsertNewItem, data.begin(), data.end(), true);
    
    std::cout << R"("Full shuffle", )";
    
    std::random_shuffle(data.begin(), data.end());

    test(listTailInsert, data.begin(), data.end());
    test(vectorTailInsert, data.begin(), data.end());
    test(vectorTailPush, data.begin(), data.end());
    test(vectorHeadInsert, data.begin(), data.end());
    //test(vectorHeadPush, data.begin(), data.end());
    test(setInsert, data.begin(), data.end());
    test(unorderedSetInsert, data.begin(), data.end());
    test(priorityQueuePush, data.begin(), data.end());
    test(lazyFlatSetInsert, data.begin(), data.end());
    test(lazyFlatSetInsertNewItem, data.begin(), data.end(), true);
    
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4a8, %rsp            # imm = 0x4A8
xorps %xmm0, %xmm0
movq %rsp, %rbx
movaps %xmm0, (%rbx)
movq $0x0, 0x10(%rbx)
leaq 0x1c(%rsp), %r14
movl $0x0, (%r14)
xorl %eax, %eax
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x2940
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rsp)
jmp 0x294b
movq %rbx, %rdi
movq %r14, %rdx
callq 0x441e
movl 0x1c(%rsp), %eax
incl %eax
movl %eax, 0x1c(%rsp)
cmpl $0x4c4b40, %eax         # imm = 0x4C4B40
jb 0x2927
movq 0x6675(%rip), %rbx      # 0x8fd8
leaq 0x369a(%rip), %rsi      # 0x6004
movl $0xba, %edx
movq %rbx, %rdi
callq 0x2170
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6643(%rip), %rdi      # 0x8fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x662f(%rip), %rdi      # 0x8fd8
leaq 0x370f(%rip), %rsi      # 0x60bf
movl $0xd, %edx
callq 0x2170
xorps %xmm0, %xmm0
leaq 0x480(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x341(%rip), %r15      # 0x2692
movq %r15, (%rdi)
leaq 0x301b(%rip), %rbx      # 0x59f8
movq %rbx, 0x18(%rdi)
leaq 0x301c(%rip), %r14      # 0x5a04
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x490(%rsp), %rax
testq %rax, %rax
je 0x2a1b
leaq 0x480(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x460(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x678(%rip), %r12      # 0x23bc
movq %r12, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x470(%rsp), %rax
testq %rax, %rax
je 0x2a6e
leaq 0x460(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x440(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x609(%rip), %r13      # 0x247e
movq %r13, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x450(%rsp), %rax
testq %rax, %rax
je 0x2ac1
leaq 0x440(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x420(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x76e(%rip), %rbp      # 0x236c
movq %rbp, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x430(%rsp), %rax
testq %rax, %rax
je 0x2b14
leaq 0x420(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x400(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x627(%rip), %rax      # 0x2506
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x410(%rsp), %rax
testq %rax, %rax
je 0x2b67
leaq 0x400(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x3e0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x5e9(%rip), %rax      # 0x2597
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x3f0(%rsp), %rax
testq %rax, %rax
je 0x2bba
leaq 0x3e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x3c0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x5ad(%rip), %rax      # 0x2626
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x3d0(%rsp), %rax
testq %rax, %rax
je 0x2c0d
leaq 0x3c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x3a0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x51d(%rip), %rax      # 0x2709
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x3b0(%rsp), %rax
testq %rax, %rax
je 0x2c60
leaq 0x3a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x380(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x4e1(%rip), %rax      # 0x2798
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movl $0x1, %ecx
callq 0x282a
movq 0x390(%rsp), %rax
testq %rax, %rax
je 0x2cb6
leaq 0x380(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x631b(%rip), %rdi      # 0x8fd8
leaq 0x3409(%rip), %rsi      # 0x60cd
movl $0xe, %edx
callq 0x2170
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
cmpq %rdx, %rsi
setne %cl
movq %rdx, %rax
addq $-0x4, %rax
cmpq %rsi, %rax
seta %dil
andb %cl, %dil
cmpb $0x1, %dil
jne 0x2d17
movq %rsi, %rcx
addq $0x4, %rcx
movl -0x4(%rcx), %edi
movl (%rax), %r8d
movl %r8d, -0x4(%rcx)
movl %edi, (%rax)
addq $-0x4, %rax
leaq 0x4(%rcx), %rdi
cmpq %rax, %rcx
movq %rdi, %rcx
jb 0x2cfb
xorps %xmm0, %xmm0
leaq 0x360(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %r15, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
xorl %ecx, %ecx
callq 0x282a
movq 0x370(%rsp), %rax
testq %rax, %rax
je 0x2d5a
leaq 0x360(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x340(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %r12, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x350(%rsp), %rax
testq %rax, %rax
je 0x2da6
leaq 0x340(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x320(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %r13, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x330(%rsp), %rax
testq %rax, %rax
je 0x2df2
leaq 0x320(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x300(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %rbp, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x310(%rsp), %rax
testq %rax, %rax
je 0x2e3e
leaq 0x300(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x2e0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x951(%rip), %rax      # 0x2506
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x2f0(%rsp), %rax
testq %rax, %rax
je 0x2e91
leaq 0x2e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x2c0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x913(%rip), %rax      # 0x2597
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x2d0(%rsp), %rax
testq %rax, %rax
je 0x2ee4
leaq 0x2c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x2a0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x8d7(%rip), %rax      # 0x2626
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x2b0(%rsp), %rax
testq %rax, %rax
je 0x2f37
leaq 0x2a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x280(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x847(%rip), %rax      # 0x2709
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x290(%rsp), %rax
testq %rax, %rax
je 0x2f8a
leaq 0x280(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x260(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x80b(%rip), %rax      # 0x2798
movq %rax, (%rdi)
movq %rbx, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movl $0x1, %ecx
callq 0x282a
movq 0x270(%rsp), %rax
testq %rax, %rax
je 0x2fe0
leaq 0x260(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x5ff1(%rip), %rdi      # 0x8fd8
leaq 0x30ee(%rip), %rsi      # 0x60dc
movl $0x13, %edx
callq 0x2170
xorl %r12d, %r12d
movq (%rsp), %rbp
movq %rbp, %r13
addq $0x7d0, %rbp            # imm = 0x7D0
movq 0x8(%rsp), %r15
cmpq %r15, %rbp
cmovbq %rbp, %r15
cmpq %r15, %r13
je 0x3073
leaq 0x4(%r13), %rax
cmpq %r15, %rax
je 0x3073
movl $0x4, %ebx
callq 0x2060
cltq
movq %rbx, %rcx
sarq $0x2, %rcx
incq %rcx
cqto
idivq %rcx
leaq (,%rdx,4), %rax
cmpq %rax, %rbx
je 0x3062
leaq (%rbx,%r13), %rax
leaq (,%rdx,4), %rcx
addq %r13, %rcx
movl (%rax), %edx
movl (%rcx), %esi
movl %esi, (%rax)
movl %edx, (%rcx)
leaq (%rbx,%r13), %rax
addq $0x4, %rax
addq $0x4, %rbx
cmpq %r15, %rax
jne 0x3028
incl %r12d
cmpl $0x2710, %r12d          # imm = 0x2710
jne 0x2fff
xorps %xmm0, %xmm0
leaq 0x240(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xa06(%rip), %rbp      # 0x2692
movq %rbp, (%rdi)
leaq 0x2956(%rip), %r13      # 0x59f8
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x250(%rsp), %rax
testq %rax, %rax
leaq -0xd10(%rip), %rbx      # 0x23bc
je 0x30e0
leaq 0x240(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x220(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %rbx, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x230(%rsp), %rax
testq %rax, %rax
je 0x312c
leaq 0x220(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x200(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xcc7(%rip), %rax      # 0x247e
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x210(%rsp), %rax
testq %rax, %rax
je 0x317f
leaq 0x200(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x1e0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xe2c(%rip), %rax      # 0x236c
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x1f0(%rsp), %rax
testq %rax, %rax
je 0x31d2
leaq 0x1e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x1c0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xce5(%rip), %rax      # 0x2506
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x1d0(%rsp), %rax
testq %rax, %rax
je 0x3225
leaq 0x1c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x1a0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xca7(%rip), %rax      # 0x2597
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x1b0(%rsp), %rax
testq %rax, %rax
je 0x3278
leaq 0x1a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x180(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xc6b(%rip), %rax      # 0x2626
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x190(%rsp), %rax
testq %rax, %rax
je 0x32cb
leaq 0x180(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x160(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xbdb(%rip), %rax      # 0x2709
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x170(%rsp), %rax
testq %rax, %rax
je 0x331e
leaq 0x160(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x140(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xb9f(%rip), %rax      # 0x2798
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movl $0x1, %ecx
callq 0x282a
movq 0x150(%rsp), %rax
testq %rax, %rax
je 0x3374
leaq 0x140(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x5c5d(%rip), %rdi      # 0x8fd8
leaq 0x2d6e(%rip), %rsi      # 0x60f0
movl $0x10, %edx
callq 0x2170
movq (%rsp), %r15
movq 0x8(%rsp), %r12
cmpq %r12, %r15
je 0x33ec
leaq 0x4(%r15), %rax
cmpq %r12, %rax
je 0x33ec
movl $0x4, %ebx
callq 0x2060
cltq
movq %rbx, %rcx
sarq $0x2, %rcx
incq %rcx
cqto
idivq %rcx
leaq (,%rdx,4), %rax
cmpq %rax, %rbx
je 0x33db
leaq (%r15,%rbx), %rax
leaq (%r15,%rdx,4), %rcx
movl (%rax), %edx
movl (%rcx), %esi
movl %esi, (%rax)
movl %edx, (%rcx)
leaq (%r15,%rbx), %rax
addq $0x4, %rax
addq $0x4, %rbx
cmpq %r12, %rax
jne 0x33a8
xorps %xmm0, %xmm0
leaq 0x120(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %rbp, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x130(%rsp), %rax
testq %rax, %rax
leaq -0x106f(%rip), %rbx     # 0x23bc
leaq -0x10c6(%rip), %r15     # 0x236c
je 0x3446
leaq 0x120(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x100(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %rbx, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x110(%rsp), %rax
testq %rax, %rax
je 0x3492
leaq 0x100(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0xe0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x102d(%rip), %rax     # 0x247e
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0xf0(%rsp), %rax
testq %rax, %rax
je 0x34e5
leaq 0xe0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0xc0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
movq %r15, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0xd0(%rsp), %rax
testq %rax, %rax
je 0x3531
leaq 0xc0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x1044(%rip), %rax     # 0x2506
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0xb0(%rsp), %rax
testq %rax, %rax
je 0x3584
leaq 0xa0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x80(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0x1006(%rip), %rax     # 0x2597
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x90(%rsp), %rax
testq %rax, %rax
je 0x35d7
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x60(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xfc7(%rip), %rax      # 0x2626
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x3621
leaq 0x60(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xf2e(%rip), %rax      # 0x2709
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x282a
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x366b
leaq 0x40(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
xorps %xmm0, %xmm0
leaq 0x20(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm0, 0x10(%rdi)
leaq -0xee9(%rip), %rax      # 0x2798
movq %rax, (%rdi)
movq %r13, 0x18(%rdi)
movq %r14, 0x10(%rdi)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movl $0x1, %ecx
callq 0x282a
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x36b8
leaq 0x20(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x36c6
callq 0x2120
xorl %eax, %eax
addq $0x4a8, %rsp            # imm = 0x4A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
jmp 0x3e1b
movq %rax, %rbx
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x20(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x40(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x60(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x90(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0xb0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0xa0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0xd0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0xc0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0xf0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0xe0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x110(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x100(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x130(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x120(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
jmp 0x3e25
movq %rax, %rbx
movq 0x150(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x140(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x170(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x160(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x190(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x180(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x1b0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x1a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x1d0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x1c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x1f0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x1e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x210(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x200(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x230(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x220(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x250(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x240(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x270(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x260(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x290(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x280(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x2b0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x2a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x2d0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x2c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x2f0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x2e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x310(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x300(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x330(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x320(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x350(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x340(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x370(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x360(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x390(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x380(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x3b0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x3a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x3d0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x3c0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x3f0(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x3e0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x410(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x400(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x430(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x420(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x450(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x440(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x470(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x460(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
jmp 0x3e1b
movq %rax, %rbx
movq 0x490(%rsp), %rax
testq %rax, %rax
je 0x3e28
leaq 0x480(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x3e28
movq %rax, %rdi
callq 0x411b
jmp 0x3e25
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3e36
callq 0x2120
movq %rbx, %rdi
callq 0x21e0