// File: /workspace/github_cpp_makefile_star2_O3/f18m[P]boost-intrusive-pool/tests/unit_tests.cpp
// Function: infinite_memory_pool()
void infinite_memory_pool()
{
    BOOST_TEST_MESSAGE("Starting boost_intrusive_pool<> tests when memory pool is unbounded");

    struct {
        unsigned int initial_size;
        unsigned int enlarge_step;
        unsigned int num_elements;
    } testArray[] = {
        { 10, 1, (int)1e6 }, // force newline
        { 1, 100, (int)5e4 }, // force newline
        { 100000, 1, 123456 }, // force newline
    };

    for (int testIdx = 0; testIdx < sizeof(testArray) / sizeof(testArray[0]); testIdx++) {
        BOOST_TEST_MESSAGE(std::string("Starting test entry #") + std::to_string(testIdx));

        boost_intrusive_pool<DummyInt> f(
            testArray[testIdx].initial_size /* initial size */, testArray[testIdx].enlarge_step /* enlarge step */);

        BOOST_REQUIRE(!f.is_bounded());
        f.check();

        size_t num_freed = 0, max_active = 0;
        std::map<int, HDummyInt> helper_container;
        for (unsigned int j = 0; j < testArray[testIdx].num_elements; j++) {
            HDummyInt myInt = f.allocate_through_init(j);
            assert(myInt);

            f.check();

            *myInt = j;
            helper_container[j] = myInt;

            // returns to the factory a few items in pseudo-random order
            if ((j % 7) == 0 || (j % 53) == 0 || (j % 12345) == 0) {
                size_t value_to_release = j / 10;

                auto it = helper_container.find(value_to_release);
                if (it != helper_container.end()) {
                    // erasing the smart pointer from the std::map will trigger its return to the memory pool:
                    helper_container.erase(value_to_release);
                    num_freed++;
                }
            }

            max_active = std::max(max_active, helper_container.size());
        }

        f.check();

        BOOST_REQUIRE(!f.is_memory_exhausted());
        BOOST_REQUIRE(num_freed > 0);

        // This should hold always:
        //         m_free_count+m_inuse_count == m_total_count
        BOOST_REQUIRE_EQUAL(f.unused_count() + f.inuse_count(), f.capacity());

        BOOST_REQUIRE_EQUAL(f.inuse_count(), testArray[testIdx].num_elements - num_freed);
        BOOST_REQUIRE(f.capacity() >= max_active);
        BOOST_REQUIRE(!f.empty());

        if (testArray[testIdx].enlarge_step > 1)
            BOOST_REQUIRE(f.unused_count() > 0);

        if (testArray[testIdx].initial_size < testArray[testIdx].num_elements - num_freed)
            BOOST_REQUIRE(f.enlarge_steps_done() > 0);

        // IMPORTANT: this will crash as all pointers inside the map are INVALIDATED before
        //            the map clear() is called:
        /*
                f.clear();
                helper_container.clear(); // all pointers it contains have been invalidated!
        */

        helper_container.clear(); // all pointers it contains will be now released

        // repeat twice for test:
        f.clear();
        f.clear();

        f.check();

        BOOST_REQUIRE_EQUAL(f.inuse_count(), 0);
        BOOST_REQUIRE_EQUAL(f.capacity(), 0);
        BOOST_REQUIRE(f.empty());
        BOOST_REQUIRE_EQUAL(f.unused_count(), 0);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movq 0x585ec(%rip), %rdi     # 0x80808
leaq 0x32610(%rip), %rax     # 0x5a833
leaq -0x48(%rbp), %rsi
movq %rax, (%rsi)
leaq 0x32616(%rip), %rax     # 0x5a847
movq %rax, 0x8(%rsi)
movq $0x73, 0x10(%rsi)
callq 0x181dc
callq 0x1f031
movl $0x2, 0x5a5ef(%rip)     # 0x82840
movb $0x1, -0x88(%rbp)
leaq -0x130(%rbp), %rsi
movb $0x0, 0x8(%rsi)
leaq 0x575f6(%rip), %rax     # 0x7f860
addq $0x10, %rax
movq %rax, (%rsi)
leaq 0x58740(%rip), %rax     # 0x809b8
movq %rax, 0x10(%rsi)
leaq 0x325c5(%rip), %rax     # 0x5a848
movq %rax, 0x18(%rsi)
movq 0x5857a(%rip), %rdi     # 0x80808
callq 0x1ee5c
leaq -0x88(%rbp), %r14
movq %r14, %rdi
callq 0x1f012
leaq 0x575f7(%rip), %rax     # 0x7f8a0
addq $0x10, %rax
movq %rax, -0x140(%rbp)
leaq 0x576dd(%rip), %rax     # 0x7f998
addq $0x10, %rax
movq %rax, -0xd8(%rbp)
leaq 0x5770b(%rip), %rax     # 0x7f9d8
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
leaq 0x57739(%rip), %rax     # 0x7fa18
addq $0x10, %rax
movq %rax, -0xf0(%rbp)
leaq 0x57767(%rip), %rax     # 0x7fa58
addq $0x10, %rax
movq %rax, -0x138(%rbp)
movq $0x0, -0x100(%rbp)
movq 0x584fa(%rip), %rdi     # 0x80808
leaq 0x3251e(%rip), %rax     # 0x5a833
movq %rax, -0xb0(%rbp)
leaq 0x32524(%rip), %rax     # 0x5a847
movq %rax, -0xa8(%rbp)
movq $0x80, -0xa0(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x181dc
callq 0x1f031
movl $0x2, 0x5a4f0(%rip)     # 0x82840
movb $0x1, -0xe8(%rbp)
leaq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
movq %r14, %rdi
leaq 0x32520(%rip), %rsi     # 0x5a88c
leaq 0x3252e(%rip), %rdx     # 0x5a8a1
callq 0x4c874
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movl $0x1, %esi
leaq -0x68(%rbp), %rdi
movl $0x2d, %edx
callq 0xf580
movq -0x68(%rbp), %rdi
movl $0x1, %esi
movq -0x100(%rbp), %rdx
callq 0x4be23
movq -0x88(%rbp), %rcx
movl $0xf, %edi
leaq -0x78(%rbp), %rax
cmpq %rax, %rcx
je 0x283c1
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %r8
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x283ed
movl $0xf, %edi
leaq -0x58(%rbp), %r9
cmpq %r9, %rsi
je 0x283e8
movq -0x58(%rbp), %rdi
cmpq %rdi, %rax
jbe 0x283f7
movq %r14, %rdi
callq 0xf170
jmp 0x28404
leaq -0x68(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xf540
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x28425
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x2842b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
xorl %eax, %eax
movb %al, (%rcx)
movb %al, -0x128(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq 0x58555(%rip), %rax     # 0x809b8
movq %rax, -0x120(%rbp)
leaq -0x48(%rbp), %rax
movq %rax, -0x118(%rbp)
movq 0x5838c(%rip), %rdi     # 0x80808
leaq -0x130(%rbp), %rsi
callq 0x1ee5c
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x2849a
callq 0xf480
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x284ac
callq 0xf480
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x284c1
callq 0xf480
leaq -0xe8(%rbp), %rdi
callq 0x1f012
movq -0x100(%rbp), %rax
leaq (%rax,%rax,2), %rbx
leaq 0x2fc21(%rip), %rax     # 0x58100
movl (%rax,%rbx,4), %r15d
movl 0x4(%rax,%rbx,4), %r12d
xorps %xmm0, %xmm0
movaps %xmm0, -0x170(%rbp)
movaps %xmm0, -0x160(%rbp)
leaq -0x98(%rbp), %rdi
movq %r15, %rsi
movq %r12, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
leaq -0x170(%rbp), %r9
callq 0x39422
movq -0x160(%rbp), %rax
testq %rax, %rax
je 0x28534
leaq -0x170(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
callq 0x1f031
movq 0x5a328(%rip), %rdx     # 0x82868
leaq 0x5a319(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x3a468(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x322d4(%rip), %rax     # 0x5a833
movq %rax, 0x5a2e2(%rip)     # 0x82848
leaq 0x322da(%rip), %rax     # 0x5a847
movq %rax, 0x5a2dc(%rip)     # 0x82850
movq $0x85, 0x5a2d9(%rip) # 0x82858
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x28593
movq (%rdi), %rax
callq *0x18(%rax)
jmp 0x28595
xorl %eax, %eax
xorb $0x1, %al
movb %al, -0x48(%rbp)
leaq -0x38(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, -0x8(%rax)
leaq 0x322f6(%rip), %rax     # 0x5a8a2
movq %rax, -0x88(%rbp)
leaq 0x322f7(%rip), %rax     # 0x5a8b1
movq %rax, -0x80(%rbp)
movb $0x0, -0x128(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq 0x583de(%rip), %rax     # 0x809b8
movq %rax, -0x120(%rbp)
movq %r14, -0x118(%rbp)
leaq 0x32244(%rip), %rax     # 0x5a833
movq %rax, -0x1f0(%rbp)
leaq 0x3224a(%rip), %rax     # 0x5a847
movq %rax, -0x1e8(%rbp)
subq $0x8, %rsp
movl $0x85, %ecx
leaq -0x48(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x1f0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x38(%rbp), %rdi
callq 0x3d55a
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x2864f
callq 0x5546e
movq %r12, -0x150(%rbp)
movq %r15, -0x148(%rbp)
leaq 0x2fa9c(%rip), %rax     # 0x58100
leaq (%rax,%rbx,4), %rax
xorl %edx, %edx
movl %edx, -0x128(%rbp)
movq %rdx, -0x120(%rbp)
leaq -0x128(%rbp), %rcx
movq %rcx, -0x118(%rbp)
movq %rcx, -0x110(%rbp)
movq %rdx, -0x108(%rbp)
movl 0x8(%rax), %r13d
movl %edx, -0x68(%rbp)
movl $0x0, %r15d
movl $0x0, %r12d
testq %r13, %r13
je 0x2884e
xorl %r12d, %r12d
xorl %ebx, %ebx
movq %r14, %rdi
leaq -0x98(%rbp), %rsi
leaq -0x68(%rbp), %rdx
callq 0x394e8
movq -0x88(%rbp), %rax
testq %rax, %rax
je 0x29762
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x286f8
callq 0x5546e
movq -0x88(%rbp), %rax
testq %rax, %rax
je 0x29781
movl -0x68(%rbp), %ecx
movl %ecx, 0x20(%rax)
movl %ecx, -0xb0(%rbp)
leaq -0x130(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x395ba
movq -0x88(%rbp), %rcx
movq %rcx, -0x48(%rbp)
testq %rcx, %rcx
je 0x2873f
movq 0x8(%rcx), %rdx
cmpq $0x3ff, %rdx            # imm = 0x3FF
jae 0x297a0
incq %rdx
movq %rdx, 0x8(%rcx)
movq (%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
leaq -0x48(%rbp), %rdi
callq 0x39622
movl -0x68(%rbp), %eax
imull $0x55d4be09, %eax, %ecx # imm = 0x55D4BE09
cmpl $0x54f08, %ecx          # imm = 0x54F08
jb 0x287a5
imulq $0x24924925, %rax, %rcx # imm = 0x24924925
shrq $0x20, %rcx
movl %eax, %edx
subl %ecx, %edx
shrl %edx
addl %ecx, %edx
shrl $0x2, %edx
leal (,%rdx,8), %ecx
subl %ecx, %edx
addl %eax, %edx
je 0x287a5
imulq $0x3521cfb3, %rax, %rcx # imm = 0x3521CFB3
shrq $0x20, %rcx
movl %eax, %edx
subl %ecx, %edx
shrl %edx
addl %ecx, %edx
shrl $0x5, %edx
imull $0x35, %edx, %ecx
movl %eax, %edx
subl %ecx, %edx
jne 0x28824
movq -0x120(%rbp), %rsi
testq %rsi, %rsi
je 0x28824
movl %eax, %eax
movl $0xcccccccd, %ecx       # imm = 0xCCCCCCCD
imulq %rcx, %rax
shrq $0x23, %rax
leaq -0x128(%rbp), %r8
movq %r8, %rcx
movq %rsi, %rdx
movl 0x20(%rsi), %edi
xorl %esi, %esi
cmpl %eax, %edi
setl %sil
movq %rdx, %r8
cmovlq %rcx, %r8
movq 0x10(%rdx,%rsi,8), %rsi
testq %rsi, %rsi
jne 0x287c7
leaq -0x128(%rbp), %rsi
cmpq %rsi, %r8
je 0x28824
cmpl %eax, %edi
cmovlq %rcx, %rdx
cmpl 0x20(%rdx), %eax
jl 0x28824
movl %eax, -0x48(%rbp)
leaq -0x130(%rbp), %r15
movq %r15, %rdi
leaq -0x48(%rbp), %rsi
callq 0x55ab6
movq %r15, %rdi
movq %rax, %rsi
callq 0x55b38
incq %r12
movq -0x108(%rbp), %r15
cmpq %r15, %rbx
cmovaq %rbx, %r15
movq %r14, %rdi
callq 0x39622
movl -0x68(%rbp), %eax
incl %eax
movl %eax, -0x68(%rbp)
movq %r15, %rbx
cmpl %r13d, %eax
jb 0x286b4
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x2885f
callq 0x5546e
callq 0x1f031
movq 0x59ffd(%rip), %rdx     # 0x82868
leaq 0x59fee(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x3a13d(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31fa9(%rip), %rax     # 0x5a833
movq %rax, 0x59fb7(%rip)     # 0x82848
leaq 0x31faf(%rip), %rax     # 0x5a847
movq %rax, 0x59fb1(%rip)     # 0x82850
movq $0xa4, 0x59fae(%rip) # 0x82858
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x288be
movq (%rdi), %rax
callq *0x20(%rax)
jmp 0x288c0
xorl %eax, %eax
xorb $0x1, %al
movb %al, -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x31ff7(%rip), %rax     # 0x5a8ce
movq %rax, -0x68(%rbp)
leaq 0x32004(%rip), %rax     # 0x5a8e6
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x580bc(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x31f24(%rip), %rax     # 0x5a833
movq %rax, -0x1e0(%rbp)
leaq 0x31f2a(%rip), %rax     # 0x5a847
movq %rax, -0x1d8(%rbp)
subq $0x8, %rsp
movl $0xa4, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x1e0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x59f02(%rip), %rdx     # 0x82868
leaq 0x59ef3(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x3a042(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31eae(%rip), %rax     # 0x5a833
movq %rax, 0x59ebc(%rip)     # 0x82848
leaq 0x31eb4(%rip), %rcx     # 0x5a847
movq %rcx, 0x59eb6(%rip)     # 0x82850
movq $0xa5, 0x59eb3(%rip) # 0x82858
testq %r12, %r12
setne -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x31f29(%rip), %rdx     # 0x5a8e7
movq %rdx, -0x68(%rbp)
leaq 0x31f2b(%rip), %rdx     # 0x5a8f4
movq %rdx, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rdx
movq %rdx, -0x48(%rbp)
leaq 0x57fd5(%rip), %rdx     # 0x809b8
movq %rdx, -0x38(%rbp)
leaq -0x68(%rbp), %rdx
movq %rdx, -0x30(%rbp)
movq %rax, -0x1d0(%rbp)
movq %rcx, -0x1c8(%rbp)
subq $0x8, %rsp
movl $0xa5, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x1d0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x59e29(%rip), %rdx     # 0x82868
leaq 0x59e1a(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39f69(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31dd5(%rip), %rax     # 0x5a833
movq %rax, 0x59de3(%rip)     # 0x82848
leaq 0x31ddb(%rip), %rax     # 0x5a847
movq %rax, 0x59ddd(%rip)     # 0x82850
movq $0xa9, 0x59dda(%rip) # 0x82858
movb $0x0, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq 0x57f24(%rip), %rax     # 0x809b8
movq %rax, -0x58(%rbp)
leaq 0x31412(%rip), %rax     # 0x59eb1
movq %rax, -0x50(%rbp)
movq -0x90(%rbp), %rcx
testq %rcx, %rcx
je 0x28abd
movq 0x68(%rcx), %rax
addq 0x60(%rcx), %rax
movq 0x70(%rcx), %rcx
jmp 0x28ac1
xorl %eax, %eax
xorl %ecx, %ecx
movq %rax, -0xc0(%rbp)
movq %rcx, -0xb8(%rbp)
cmpq %rcx, %rax
sete -0xb0(%rbp)
leaq -0xa8(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
leaq 0x31d46(%rip), %rax     # 0x5a833
movq %rax, -0xe8(%rbp)
leaq 0x31d4c(%rip), %rax     # 0x5a847
movq %rax, -0xe0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x0, %edx
movb %dl, -0x40(%rbp)
movq -0xf0(%rbp), %rcx
movq %rcx, -0x48(%rbp)
leaq 0x57e8e(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0xd0(%rbp), %rsi
movq %rsi, -0x30(%rbp)
leaq -0xb8(%rbp), %rsi
movq %rsi, -0xc8(%rbp)
movb %dl, -0x80(%rbp)
movq %rcx, -0x88(%rbp)
movq %rax, -0x78(%rbp)
leaq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
subq $0x8, %rsp
movl $0xa9, %ecx
leaq -0xb0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
movl $0x2, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r14
leaq 0x31d86(%rip), %r10     # 0x5a918
pushq %r10
leaq -0x48(%rbp), %r10
pushq %r10
leaq 0x31d54(%rip), %r10     # 0x5a8f5
pushq %r10
pushq $0x2
callq 0x1b705
addq $0x30, %rsp
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x59ca2(%rip), %rdx     # 0x82868
leaq 0x59c93(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39de2(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31c4e(%rip), %rax     # 0x5a833
movq %rax, 0x59c5c(%rip)     # 0x82848
leaq 0x31c54(%rip), %rax     # 0x5a847
movq %rax, 0x59c56(%rip)     # 0x82850
movq $0xab, 0x59c53(%rip) # 0x82858
movb $0x0, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq 0x57d9d(%rip), %rax     # 0x809b8
movq %rax, -0x58(%rbp)
leaq 0x3128b(%rip), %rax     # 0x59eb1
movq %rax, -0x50(%rbp)
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x28c3c
movq 0x68(%rax), %rax
jmp 0x28c3e
xorl %eax, %eax
movq %rax, -0xc0(%rbp)
subq %r12, %r13
movq %r13, -0xb8(%rbp)
cmpq %r13, %rax
sete -0xb0(%rbp)
leaq -0xa8(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
leaq 0x31bc6(%rip), %rax     # 0x5a833
movq %rax, -0xe8(%rbp)
leaq 0x31bcc(%rip), %rax     # 0x5a847
movq %rax, -0xe0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x0, %edx
movb %dl, -0x40(%rbp)
movq -0xf0(%rbp), %rcx
movq %rcx, -0x48(%rbp)
leaq 0x57d0e(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0xd0(%rbp), %rsi
movq %rsi, -0x30(%rbp)
leaq -0xb8(%rbp), %rsi
movq %rsi, -0xc8(%rbp)
movb %dl, -0x80(%rbp)
movq %rcx, -0x88(%rbp)
movq %rax, -0x78(%rbp)
leaq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
subq $0x8, %rsp
movl $0xab, %ecx
leaq -0xb0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
movl $0x2, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r14
leaq 0x31c13(%rip), %r10     # 0x5a925
pushq %r10
leaq -0x48(%rbp), %r10
pushq %r10
leaq 0x31be7(%rip), %r10     # 0x5a908
pushq %r10
pushq $0x2
callq 0x1b705
addq $0x30, %rsp
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x59b22(%rip), %rdx     # 0x82868
leaq 0x59b13(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39c62(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31ace(%rip), %rax     # 0x5a833
movq %rax, 0x59adc(%rip)     # 0x82848
leaq 0x31ad4(%rip), %rax     # 0x5a847
movq %rax, 0x59ad6(%rip)     # 0x82850
movq $0xac, 0x59ad3(%rip) # 0x82858
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x28d97
movq 0x70(%rax), %rax
jmp 0x28d99
xorl %eax, %eax
cmpq %r15, %rax
setae -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x31b9f(%rip), %rax     # 0x5a951
movq %rax, -0x68(%rbp)
leaq 0x31bae(%rip), %rax     # 0x5a96b
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x57be1(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x31a49(%rip), %rax     # 0x5a833
movq %rax, -0x1c0(%rbp)
leaq 0x31a4f(%rip), %rax     # 0x5a847
movq %rax, -0x1b8(%rbp)
subq $0x8, %rsp
movl $0xac, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x1c0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x59a27(%rip), %rdx     # 0x82868
leaq 0x59a18(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39b67(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x319d3(%rip), %rax     # 0x5a833
movq %rax, 0x599e1(%rip)     # 0x82848
leaq 0x319d9(%rip), %rax     # 0x5a847
movq %rax, 0x599db(%rip)     # 0x82850
movq $0xad, 0x599d8(%rip) # 0x82858
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x28e99
movq 0x60(%rax), %rcx
cmpq 0x70(%rax), %rcx
setne %al
jmp 0x28e9b
xorl %eax, %eax
movb %al, -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x31abc(%rip), %rax     # 0x5a96c
movq %rax, -0x68(%rbp)
leaq 0x31abb(%rip), %rax     # 0x5a976
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x57ae3(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x3194b(%rip), %rax     # 0x5a833
movq %rax, -0x1b0(%rbp)
leaq 0x31951(%rip), %rax     # 0x5a847
movq %rax, -0x1a8(%rbp)
subq $0x8, %rsp
movl $0xad, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
cmpl $0x2, -0x150(%rbp)
jb 0x2903b
callq 0x1f031
movq 0x5991c(%rip), %rdx     # 0x82868
leaq 0x5990d(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39a5c(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x318c8(%rip), %rax     # 0x5a833
movq %rax, 0x598d6(%rip)     # 0x82848
leaq 0x318ce(%rip), %rax     # 0x5a847
movq %rax, 0x598d0(%rip)     # 0x82850
movq $0xb0, 0x598cd(%rip) # 0x82858
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x28fa1
cmpq $0x0, 0x60(%rax)
setne %al
jmp 0x28fa3
xorl %eax, %eax
movb %al, -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x319bf(%rip), %rax     # 0x5a977
movq %rax, -0x68(%rbp)
leaq 0x319c8(%rip), %rax     # 0x5a98b
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x579db(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x31843(%rip), %rax     # 0x5a833
movq %rax, -0x1a0(%rbp)
leaq 0x31849(%rip), %rax     # 0x5a847
movq %rax, -0x198(%rbp)
subq $0x8, %rsp
movl $0xb0, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x1a0(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
cmpq -0x148(%rbp), %r13
jbe 0x29155
callq 0x1f031
movq 0x59814(%rip), %rdx     # 0x82868
leaq 0x59805(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39954(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x317c0(%rip), %rax     # 0x5a833
movq %rax, 0x597ce(%rip)     # 0x82848
leaq 0x317c6(%rip), %rax     # 0x5a847
movq %rax, 0x597c8(%rip)     # 0x82850
movq $0xb3, 0x597c5(%rip) # 0x82858
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x290bb
addq $0x40, %rax
movl $0x1, %ecx
movq (%rax), %rax
decq %rcx
testq %rax, %rax
jne 0x290a8
testq %rcx, %rcx
setne %al
jmp 0x290bd
xorl %eax, %eax
movb %al, -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x318ba(%rip), %rax     # 0x5a98c
movq %rax, -0x68(%rbp)
leaq 0x318c9(%rip), %rax     # 0x5a9a6
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x578c1(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x31729(%rip), %rax     # 0x5a833
movq %rax, -0x190(%rbp)
leaq 0x3172f(%rip), %rax     # 0x5a847
movq %rax, -0x188(%rbp)
subq $0x8, %rsp
movl $0xb3, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x190(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
leaq -0x130(%rbp), %rdi
callq 0x55b9c
leaq -0x98(%rbp), %rdi
callq 0x3966e
leaq -0x98(%rbp), %rdi
callq 0x3966e
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x2918a
callq 0x5546e
callq 0x1f031
movq 0x596d2(%rip), %rdx     # 0x82868
leaq 0x596c3(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39812(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x3167e(%rip), %rax     # 0x5a833
movq %rax, 0x5968c(%rip)     # 0x82848
leaq 0x31684(%rip), %rax     # 0x5a847
movq %rax, 0x59686(%rip)     # 0x82850
movq $0xc4, 0x59683(%rip) # 0x82858
movb $0x0, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq 0x577cd(%rip), %rax     # 0x809b8
movq %rax, -0x58(%rbp)
leaq 0x30cbb(%rip), %rax     # 0x59eb1
movq %rax, -0x50(%rbp)
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x2920c
movq 0x68(%rax), %rax
jmp 0x2920e
xorl %eax, %eax
movq %rax, -0xc0(%rbp)
movl $0x0, -0xb8(%rbp)
testq %rax, %rax
sete -0xb0(%rbp)
leaq -0xa8(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
leaq 0x315f6(%rip), %rax     # 0x5a833
movq %rax, -0xe8(%rbp)
leaq 0x315fc(%rip), %rax     # 0x5a847
movq %rax, -0xe0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x0, %ecx
movb %cl, -0x40(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x5773e(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0xd0(%rbp), %rdx
movq %rdx, -0x30(%rbp)
leaq -0xb8(%rbp), %rdx
movq %rdx, -0xc8(%rbp)
movb %cl, -0x80(%rbp)
movq -0x138(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0x78(%rbp)
leaq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
subq $0x8, %rsp
movl $0xc4, %ecx
leaq -0xb0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
movl $0x2, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r14
leaq 0x36288(%rip), %r10     # 0x5f571
pushq %r10
leaq -0x48(%rbp), %r10
pushq %r10
leaq 0x31610(%rip), %r10     # 0x5a908
pushq %r10
pushq $0x2
callq 0x1b705
addq $0x30, %rsp
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x5954b(%rip), %rdx     # 0x82868
leaq 0x5953c(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x3968b(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x314f7(%rip), %rax     # 0x5a833
movq %rax, 0x59505(%rip)     # 0x82848
leaq 0x314fd(%rip), %rax     # 0x5a847
movq %rax, 0x594ff(%rip)     # 0x82850
movq $0xc5, 0x594fc(%rip) # 0x82858
movb $0x0, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq 0x57646(%rip), %rax     # 0x809b8
movq %rax, -0x58(%rbp)
leaq 0x30b34(%rip), %rax     # 0x59eb1
movq %rax, -0x50(%rbp)
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x29393
movq 0x70(%rax), %rax
jmp 0x29395
xorl %eax, %eax
movq %rax, -0xc0(%rbp)
movl $0x0, -0xb8(%rbp)
testq %rax, %rax
sete -0xb0(%rbp)
leaq -0xa8(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
leaq 0x3146f(%rip), %rax     # 0x5a833
movq %rax, -0xe8(%rbp)
leaq 0x31475(%rip), %rax     # 0x5a847
movq %rax, -0xe0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x0, %ecx
movb %cl, -0x40(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x575b7(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0xd0(%rbp), %rdx
movq %rdx, -0x30(%rbp)
leaq -0xb8(%rbp), %rdx
movq %rdx, -0xc8(%rbp)
movb %cl, -0x80(%rbp)
movq -0x138(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0x78(%rbp)
leaq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
subq $0x8, %rsp
movl $0xc5, %ecx
leaq -0xb0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
movl $0x2, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r14
leaq 0x36101(%rip), %r10     # 0x5f571
pushq %r10
leaq -0x48(%rbp), %r10
pushq %r10
leaq 0x31499(%rip), %r10     # 0x5a918
pushq %r10
pushq $0x2
callq 0x1b705
addq $0x30, %rsp
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x593c4(%rip), %rdx     # 0x82868
leaq 0x593b5(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39504(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31370(%rip), %rax     # 0x5a833
movq %rax, 0x5937e(%rip)     # 0x82848
leaq 0x31376(%rip), %rax     # 0x5a847
movq %rax, 0x59378(%rip)     # 0x82850
movq $0xc6, 0x59375(%rip) # 0x82858
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x294fc
movq 0x60(%rax), %rcx
cmpq 0x70(%rax), %rcx
sete %al
jmp 0x294fe
movb $0x1, %al
movb %al, -0x88(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
leaq 0x3145a(%rip), %rax     # 0x5a96d
movq %rax, -0x68(%rbp)
leaq 0x31458(%rip), %rax     # 0x5a976
movq %rax, -0x60(%rbp)
movb $0x0, -0x40(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x57480(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x312e8(%rip), %rax     # 0x5a833
movq %rax, -0x180(%rbp)
leaq 0x312ee(%rip), %rax     # 0x5a847
movq %rax, -0x178(%rbp)
subq $0x8, %rsp
movl $0xc6, %ecx
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
leaq -0x180(%rbp), %rdx
movl $0x2, %r8d
xorl %r9d, %r9d
xorl %eax, %eax
pushq $0x0
callq 0x1b705
addq $0x10, %rsp
leaq -0x78(%rbp), %rdi
callq 0x3d55a
callq 0x1f031
movq 0x592c6(%rip), %rdx     # 0x82868
leaq 0x592b7(%rip), %rdi     # 0x82860
xorl %esi, %esi
leaq 0x39406(%rip), %rcx     # 0x629b8
xorl %r8d, %r8d
callq 0xf760
leaq 0x31272(%rip), %rax     # 0x5a833
movq %rax, 0x59280(%rip)     # 0x82848
leaq 0x31278(%rip), %rax     # 0x5a847
movq %rax, 0x5927a(%rip)     # 0x82850
movq $0xc7, 0x59277(%rip) # 0x82858
movb $0x0, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq 0x573c1(%rip), %rax     # 0x809b8
movq %rax, -0x58(%rbp)
leaq 0x308af(%rip), %rax     # 0x59eb1
movq %rax, -0x50(%rbp)
movq -0x90(%rbp), %rax
testq %rax, %rax
je 0x29618
movq 0x60(%rax), %rax
jmp 0x2961a
xorl %eax, %eax
movq %rax, -0xc0(%rbp)
movl $0x0, -0xb8(%rbp)
testq %rax, %rax
sete -0xb0(%rbp)
leaq -0xa8(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
leaq 0x311ea(%rip), %rax     # 0x5a833
movq %rax, -0xe8(%rbp)
leaq 0x311f0(%rip), %rax     # 0x5a847
movq %rax, -0xe0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x0, %ecx
movb %cl, -0x40(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq 0x57332(%rip), %rax     # 0x809b8
movq %rax, -0x38(%rbp)
leaq -0xd0(%rbp), %rdx
movq %rdx, -0x30(%rbp)
leaq -0xb8(%rbp), %rdx
movq %rdx, -0xc8(%rbp)
movb %cl, -0x80(%rbp)
movq -0x138(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0x78(%rbp)
leaq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
subq $0x8, %rsp
movl $0xc7, %ecx
leaq -0xb0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
movl $0x2, %r8d
movl $0x2, %r9d
xorl %eax, %eax
pushq %r14
leaq 0x35e7c(%rip), %r10     # 0x5f571
pushq %r10
leaq -0x48(%rbp), %r10
pushq %r10
leaq 0x312a3(%rip), %r10     # 0x5a9a7
pushq %r10
pushq $0x2
callq 0x1b705
addq $0x30, %rsp
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
leaq -0x130(%rbp), %rdi
callq 0x4bf24
leaq -0x98(%rbp), %rdi
callq 0x397d8
movq -0x100(%rbp), %rcx
incq %rcx
movq %rcx, -0x100(%rbp)
cmpq $0x3, %rcx
jne 0x28307
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x312ad(%rip), %rdi     # 0x5aa16
leaq 0x310c3(%rip), %rsi     # 0x5a833
leaq 0x3113b(%rip), %rcx     # 0x5a8b2
movl $0x8c, %edx
callq 0xf2f0
leaq 0x31a55(%rip), %rdi     # 0x5b1dd
leaq 0x3605e(%rip), %rsi     # 0x5f7ed
leaq 0x3668b(%rip), %rcx     # 0x5fe21
movl $0xc1, %edx
callq 0xf2f0
leaq 0x365e5(%rip), %rdi     # 0x5fd8c
leaq 0x35c35(%rip), %rsi     # 0x5f3e3
leaq 0x36628(%rip), %rcx     # 0x5fddd
movl $0xdc, %edx
callq 0xf2f0
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
jmp 0x29860
jmp 0x297ef
jmp 0x297ef
jmp 0x298bb
jmp 0x2989f
jmp 0x29889
jmp 0x297fa
jmp 0x297ef
jmp 0x297ef
jmp 0x297ef
jmp 0x297fa
jmp 0x297fa
jmp 0x297ef
movq %rax, %rbx
leaq -0x78(%rbp), %rdi
jmp 0x29804
jmp 0x297fa
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x3d55a
jmp 0x298be
movq %rax, %rbx
jmp 0x29859
movq %rax, %rbx
jmp 0x29844
movq %rax, %rbx
jmp 0x29832
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x29832
callq 0xf480
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x29844
callq 0xf480
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x29859
callq 0xf480
leaq -0xe8(%rbp), %rdi
callq 0x1f012
jmp 0x298d6
movq %rax, %rbx
movq -0x160(%rbp), %rax
testq %rax, %rax
je 0x298d6
leaq -0x170(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x298d6
movq %rax, %rdi
callq 0x32d2e
movq %rax, %rbx
leaq -0x38(%rbp), %rdi
callq 0x3d55a
jmp 0x298ca
movq %rax, %rbx
jmp 0x298ca
jmp 0x298aa
jmp 0x298aa
jmp 0x298bb
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x39622
jmp 0x298be
movq %rax, %rbx
leaq -0x130(%rbp), %rdi
callq 0x4bf24
leaq -0x98(%rbp), %rdi
callq 0x397d8
movq %rbx, %rdi
callq 0xf880