// File: /workspace/github_cpp_makefile_star2_O2/ttalvitie[P]traveling-santa/optimize.cpp
// Function: main
int main() {
	unsigned int seed = random_device{}();
	cout << "Using random seed " << seed << "\n";
	rng.seed(seed);

    double initTemp = exp(uniform_real_distribution<double>(log(5000.0), log(50000.0))(rng));
    cout << "Initial temperature " << initTemp << "\n";

    Z initWtLimit = 0;
    initWtLimit = max(initWtLimit, uniform_int_distribution<Z>(0, FinalWtLimit)(rng));
    initWtLimit = max(initWtLimit, uniform_int_distribution<Z>(0, FinalWtLimit)(rng));
    cout << "Initial weight limit " << initWtLimit << "\n";

    Z endWtLimit = 2 * FinalWtLimit;
    endWtLimit = min(endWtLimit, uniform_int_distribution<Z>(FinalWtLimit, 2 * FinalWtLimit)(rng));
    endWtLimit = min(endWtLimit, uniform_int_distribution<Z>(FinalWtLimit, 2 * FinalWtLimit)(rng));
    cout << "End weight limit " << endWtLimit << " (capped to " << FinalWtLimit << ")\n";

    long long iterations = (long long)3e11;
    cout << "Running " << (double)iterations << " iterations\n";

    cout << "Constructing initial paths\n";

    vector<Path> paths = initialPaths(initWtLimit);

    double cost = 0.0;
    for(const Path& path : paths) {
        cost += path.cost;
    }

    cout << "Initially " << len(paths) << " paths, cost = " << cost << "\n";

    for(long long iter = 0; iter < iterations; ++iter) {
        double prog = (double)iter / (double)iterations;
        auto temp = [&]() {
            double t = (1.0 - (double)iter / (double)iterations);
            return t * t * initTemp;
        };
        Z wtLimit = min(initWtLimit + iter * (endWtLimit - initWtLimit) / iterations, FinalWtLimit);

        if(!(iter & 0xFFFFFF)) {
            cout << "cost = " << cost << ", progress = " << prog << ", temperature = " << temp() << ", weight limit " << wtLimit << "\n";
        }
        if(!(iter & 0xFFF)) {
            int emptyCount = 0;
            int i = 0;
            while(i < len(paths)) {
                if(len(paths[i].points) == 2) {
                    if(emptyCount >= 200) {
                        swap(paths[i], paths.back());
                        paths.pop_back();
                        continue;
                    }
                    ++emptyCount;
                }
                ++i;
            }
            while(emptyCount < 200) {
                Path path;
                path.points.push_back(Korvatunturi);
                path.points.push_back(Korvatunturi);
                path.finalize();
                paths.push_back(move(path));
                ++emptyCount;
            }
        }

        int type = uniform_int_distribution<int>(0, 3)(rng);
        if(type == 0) {
            int ap = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            int bp = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            if(ap == bp) continue;
            int ai = uniform_int_distribution<int>(1, len(paths[ap].points) - 1)(rng);
            int bi = uniform_int_distribution<int>(1, len(paths[bp].points) - 1)(rng);

            if(paths[ap].points[ai - 1].leftWt + paths[bp].points[bi].rightWt > wtLimit) continue;
            if(paths[bp].points[bi - 1].leftWt + paths[ap].points[ai].rightWt > wtLimit) continue;

            double costDiff = 0.0;
            costDiff -= sphereDist(paths[ap].points[ai - 1].pos, paths[ap].points[ai].pos);
            costDiff -= sphereDist(paths[bp].points[bi - 1].pos, paths[bp].points[bi].pos);
            costDiff += sphereDist(paths[ap].points[ai - 1].pos, paths[bp].points[bi].pos);
            costDiff += sphereDist(paths[bp].points[bi - 1].pos, paths[ap].points[ai].pos);

            if(costDiff <= 0.0 || uniform_real_distribution(0.0, 1.0)(rng) < exp(-costDiff / temp())) {
                cost += costDiff;

                int ae = len(paths[ap].points);
                int be = len(paths[bp].points);
                paths[ap].points.insert(paths[ap].points.end(), paths[bp].points.begin() + bi, paths[bp].points.begin() + be);
                paths[bp].points.insert(paths[bp].points.end(), paths[ap].points.begin() + ai, paths[ap].points.begin() + ae);
                paths[ap].points.erase(paths[ap].points.begin() + ai, paths[ap].points.begin() + ae);
                paths[bp].points.erase(paths[bp].points.begin() + bi, paths[bp].points.begin() + be);

                paths[ap].finalize();
                paths[bp].finalize();
            }
        }
        if(type == 1) {
            int p = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            int i = uniform_int_distribution<int>(1, len(paths[p].points) - 1)(rng);
            int j = uniform_int_distribution<int>(1, len(paths[p].points) - 1)(rng);
            if(i > j) swap(i, j);
            if(j - i < 2) continue;

            double costDiff = 0.0;
            costDiff -= sphereDist(paths[p].points[i - 1].pos, paths[p].points[i].pos);
            costDiff -= sphereDist(paths[p].points[j - 1].pos, paths[p].points[j].pos);
            costDiff += sphereDist(paths[p].points[i - 1].pos, paths[p].points[j - 1].pos);
            costDiff += sphereDist(paths[p].points[j].pos, paths[p].points[i].pos);

            if(costDiff <= 0.0 || uniform_real_distribution(0.0, 1.0)(rng) < exp(-costDiff / temp())) {
                cost += costDiff;

                reverse(paths[p].points.begin() + i, paths[p].points.begin() + j);

                paths[p].finalize();
            }
        }
        if(type == 2) {
            int ap = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            int bp = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            if(ap == bp) continue;
            int as = uniform_int_distribution<int>(1, len(paths[ap].points) - 1)(rng);
            int ae = uniform_int_distribution<int>(1, len(paths[ap].points) - 1)(rng);
            int bs = uniform_int_distribution<int>(1, len(paths[bp].points) - 1)(rng);
            int be = uniform_int_distribution<int>(1, len(paths[bp].points) - 1)(rng);

            if(as > ae) swap(as, ae);
            if(bs > be) swap(bs, be);

            if(ae == as) continue;
            if(be == bs) continue;

            const Point& as1 = paths[ap].points[as - 1];
            const Point& as2 = paths[ap].points[as];
            const Point& ae1 = paths[ap].points[ae - 1];
            const Point& ae2 = paths[ap].points[ae];
            const Point& bs1 = paths[bp].points[bs - 1];
            const Point& bs2 = paths[bp].points[bs];
            const Point& be1 = paths[bp].points[be - 1];
            const Point& be2 = paths[bp].points[be];

            Z aWt1 = as1.leftWt;
            Z aWt2 = ae1.leftWt - aWt1;
            Z aWt3 = ae2.rightWt;
            Z bWt1 = bs1.leftWt;
            Z bWt2 = be1.leftWt - bWt1;
            Z bWt3 = be2.rightWt;

            if(aWt1 + bWt2 + aWt3 > wtLimit) continue;
            if(bWt1 + aWt2 + bWt3 > wtLimit) continue;

            double costDiff = 0.0;
            costDiff -= sphereDist(as1.pos, as2.pos);
            costDiff -= sphereDist(ae1.pos, ae2.pos);
            costDiff -= sphereDist(bs1.pos, bs2.pos);
            costDiff -= sphereDist(be1.pos, be2.pos);
            costDiff += sphereDist(as1.pos, bs2.pos);
            costDiff += sphereDist(ae1.pos, be2.pos);
            costDiff += sphereDist(bs1.pos, as2.pos);
            costDiff += sphereDist(be1.pos, ae2.pos);

            if(costDiff <= 0.0 || uniform_real_distribution(0.0, 1.0)(rng) < exp(-costDiff / temp())) {
                cost += costDiff;

                paths[ap].points.insert(paths[ap].points.begin() + ae, paths[bp].points.begin() + bs, paths[bp].points.begin() + be);
                paths[bp].points.insert(paths[bp].points.begin() + be, paths[ap].points.begin() + as, paths[ap].points.begin() + ae);
                paths[ap].points.erase(paths[ap].points.begin() + as, paths[ap].points.begin() + ae);
                paths[bp].points.erase(paths[bp].points.begin() + bs, paths[bp].points.begin() + be);

                paths[ap].finalize();
                paths[bp].finalize();
            }
        }
        if(type == 3) {
            int ap = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            int bp = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            int cp = uniform_int_distribution<int>(0, len(paths) - 1)(rng);
            if(ap == bp || ap == cp || bp == cp) continue;
            int ai = uniform_int_distribution<int>(1, len(paths[ap].points) - 1)(rng);
            int bi = uniform_int_distribution<int>(1, len(paths[bp].points) - 1)(rng);
            int ci = uniform_int_distribution<int>(1, len(paths[cp].points) - 1)(rng);

            if(paths[ap].points[ai - 1].leftWt + paths[bp].points[bi].rightWt > wtLimit) continue;
            if(paths[bp].points[bi - 1].leftWt + paths[cp].points[ci].rightWt > wtLimit) continue;
            if(paths[cp].points[ci - 1].leftWt + paths[ap].points[ai].rightWt > wtLimit) continue;

            double costDiff = 0.0;
            costDiff -= sphereDist(paths[ap].points[ai - 1].pos, paths[ap].points[ai].pos);
            costDiff -= sphereDist(paths[bp].points[bi - 1].pos, paths[bp].points[bi].pos);
            costDiff -= sphereDist(paths[cp].points[ci - 1].pos, paths[cp].points[ci].pos);
            costDiff += sphereDist(paths[ap].points[ai - 1].pos, paths[bp].points[bi].pos);
            costDiff += sphereDist(paths[bp].points[bi - 1].pos, paths[cp].points[ci].pos);
            costDiff += sphereDist(paths[cp].points[ci - 1].pos, paths[ap].points[ai].pos);

            if(costDiff <= 0.0 || uniform_real_distribution(0.0, 1.0)(rng) < exp(-costDiff / temp())) {
                cost += costDiff;

                int ae = len(paths[ap].points);
                int be = len(paths[bp].points);
                int ce = len(paths[cp].points);
                paths[ap].points.insert(paths[ap].points.end(), paths[bp].points.begin() + bi, paths[bp].points.begin() + be);
                paths[bp].points.insert(paths[bp].points.end(), paths[cp].points.begin() + ci, paths[cp].points.begin() + ce);
                paths[cp].points.insert(paths[cp].points.end(), paths[ap].points.begin() + ai, paths[ap].points.begin() + ae);
                paths[ap].points.erase(paths[ap].points.begin() + ai, paths[ap].points.begin() + ae);
                paths[bp].points.erase(paths[bp].points.begin() + bi, paths[bp].points.begin() + be);
                paths[cp].points.erase(paths[cp].points.begin() + ci, paths[cp].points.begin() + ce);

                paths[ap].finalize();
                paths[bp].finalize();
                paths[cp].finalize();
            }
        }
    }

    cout << "cost = " << cost << "\n";

    writeOutput(paths);

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x14c8, %rsp           # imm = 0x14C8
leaq 0x140(%rsp), %rbx
movq %rbx, %rdi
callq 0x4ba8
movq %rbx, %rdi
callq 0x2250
movl %eax, %ebp
leaq 0x140(%rsp), %r12
movq %r12, %rdi
callq 0x4bfe
movq 0x5f5f(%rip), %r15      # 0x8fd8
leaq 0x304a(%rip), %rsi      # 0x60ca
movq %r15, %rdi
callq 0x21f0
movl %ebp, %r13d
movq %rax, %rdi
movq %r13, %rsi
callq 0x2130
leaq 0x308b(%rip), %rbp      # 0x6128
movq %rax, %rdi
movq %rbp, %rsi
callq 0x21f0
leaq 0x6181(%rip), %rbx      # 0x9230
movq %rbx, %rdi
movq %r13, %rsi
callq 0x4c0e
movaps 0x2f8f(%rip), %xmm0     # 0x6050
movaps %xmm0, (%r12)
leaq 0x140(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4c46
callq 0x2340
movsd %xmm0, 0x100(%rsp)
leaq 0x2fef(%rip), %rsi      # 0x60dd
movq %r15, %rdi
callq 0x21f0
movsd 0x100(%rsp), %xmm0
movq %rax, %rdi
callq 0x22c0
movq %rax, %rdi
movq %rbp, %rsi
callq 0x21f0
andq $0x0, (%r12)
movl $0x989680, %ebp         # imm = 0x989680
movq %rbp, 0x8(%r12)
leaq 0x140(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4c4e
movq %rax, %r13
andq $0x0, (%r12)
movq %rbp, 0x8(%r12)
leaq 0x140(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4c4e
cmpq %rax, %r13
cmovgq %r13, %rax
xorl %r14d, %r14d
testq %rax, %rax
cmovgq %rax, %r14
leaq 0x2f86(%rip), %rsi      # 0x60f2
movq %r15, %rdi
callq 0x21f0
movq %rax, %rdi
movq %r14, %rsi
callq 0x2080
movq %rax, %rdi
leaq 0x2f9f(%rip), %rsi      # 0x6128
callq 0x21f0
movq %rbp, (%r12)
movl $0x1312d00, %r13d       # imm = 0x1312D00
movq %r13, 0x8(%r12)
leaq 0x140(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4c4e
movq %rax, %r12
movq %rbp, (%r15)
movq %r13, 0x8(%r15)
leaq 0x140(%rsp), %rdi
movq %rbx, %rsi
callq 0x4c4e
movq %rax, %rbx
cmpq %rax, %r12
cmovlq %r12, %rbx
cmpq %r13, %rbx
cmovgeq %r13, %rbx
leaq 0x2f26(%rip), %rsi      # 0x6108
movq 0x5def(%rip), %r15      # 0x8fd8
movq %r15, %rdi
callq 0x21f0
movq %rax, %rdi
movq %rbx, 0xe0(%rsp)
movq %rbx, %rsi
callq 0x2080
leaq 0x2f0f(%rip), %rsi      # 0x611a
movq %rax, %rdi
callq 0x21f0
movl $0x989680, %esi         # imm = 0x989680
movq %rax, %rdi
callq 0x2080
leaq 0x2f00(%rip), %rsi      # 0x6127
movq %rax, %rdi
callq 0x21f0
movabsq $0x45d964b800, %rax     # imm = 0x45D964B800
movq %rax, 0xf0(%rsp)
leaq 0x2ee2(%rip), %rsi      # 0x612a
movq %r15, %rdi
callq 0x21f0
cvtsi2sdq 0xf0(%rsp), %xmm0
movq %rax, %rdi
callq 0x22c0
leaq 0x2eca(%rip), %rsi      # 0x6133
movq %rax, %rdi
callq 0x21f0
leaq 0x2ec8(%rip), %rsi      # 0x6140
movq %r15, %rdi
callq 0x21f0
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
movq %r14, 0xf8(%rsp)
movq %r14, %rsi
callq 0x269b
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
xorpd %xmm0, %xmm0
movsd %xmm0, 0x68(%rsp)
cmpq %rcx, %rax
je 0x32c5
movsd 0x68(%rsp), %xmm0
addsd 0x18(%rax), %xmm0
movsd %xmm0, 0x68(%rsp)
addq $0x20, %rax
jmp 0x32a9
movq 0x5d0c(%rip), %rdi      # 0x8fd8
leaq 0x2e89(%rip), %rsi      # 0x615c
callq 0x21f0
movq 0x40(%rsp), %rsi
subq 0x38(%rsp), %rsi
shrq $0x5, %rsi
movq %rax, %rdi
callq 0x2320
leaq 0x2e72(%rip), %rsi      # 0x6167
movq %rax, %rdi
callq 0x21f0
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x22c0
leaq 0x2e16(%rip), %rsi      # 0x6128
movq %rax, %rdi
callq 0x21f0
movq 0xe0(%rsp), %rax
subq 0xf8(%rsp), %rax
movq %rax, 0xe0(%rsp)
xorl %r14d, %r14d
pushq $0x38
popq %r13
leaq 0x5eb8(%rip), %rbp      # 0x91f8
leaq 0x140(%rsp), %r12
xorpd %xmm0, %xmm0
movhpd 0x2ccc(%rip), %xmm0     # xmm0 = xmm0[0],mem[0]
movapd %xmm0, 0x120(%rsp)
movq %r14, 0xe8(%rsp)
movq 0xf0(%rsp), %r15
cmpq %r15, %r14
jge 0x4809
leaq 0xe8(%rsp), %rax
movq %rax, 0x108(%rsp)
leaq 0xf0(%rsp), %rax
movq %rax, 0x110(%rsp)
leaq 0x100(%rsp), %rax
movq %rax, 0x118(%rsp)
movq %r14, %rax
imulq 0xe0(%rsp), %rax
cqto
idivq %r15
movq %rax, %rbx
addq 0xf8(%rsp), %rbx
movl $0x989680, %eax         # imm = 0x989680
cmpq %rax, %rbx
cmovgeq %rax, %rbx
testl $0xffffff, %r14d        # imm = 0xFFFFFF
jne 0x3479
movq 0x5bf6(%rip), %rdi      # 0x8fd8
leaq 0x2d86(%rip), %rsi      # 0x616f
callq 0x21f0
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x22c0
movq %rax, %rdi
leaq 0x2d71(%rip), %rsi      # 0x6177
callq 0x21f0
cvtsi2sd %r14, %xmm0
cvtsi2sd %r15, %xmm1
divsd %xmm1, %xmm0
movq %rax, %rdi
callq 0x22c0
movq %rax, %rdi
leaq 0x2d5a(%rip), %rsi      # 0x6185
callq 0x21f0
movq %rax, %r14
leaq 0x108(%rsp), %rdi
callq 0x48f2
movq %r14, %rdi
callq 0x22c0
movq %rax, %rdi
leaq 0x2d44(%rip), %rsi      # 0x6196
callq 0x21f0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x2080
movq %rax, %rdi
leaq 0x2cbc(%rip), %rsi      # 0x6128
callq 0x21f0
movq 0xe8(%rsp), %r14
shlq $0x34, %r14
je 0x38a7
movabsq $0x300000000, %rax      # imm = 0x300000000
movq %rax, 0x140(%rsp)
movq %r12, %rdi
leaq 0x5d91(%rip), %r14      # 0x9230
movq %r14, %rsi
callq 0x4ca8
cmpl $0x3, %eax
ja 0x42ff
movl %eax, %eax
leaq 0x2bd7(%rip), %rcx      # 0x6090
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movq %r14, %rsi
movl %eax, %r14d
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
callq 0x4ca8
movl %eax, %r15d
cmpl %eax, %r14d
je 0x42ff
movslq %r14d, %rdx
movq 0x38(%rsp), %rcx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rax
movq %rdx, 0x70(%rsp)
subq (%rcx,%rdx), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x5cce(%rip), %r14      # 0x9230
movq %r14, %rsi
callq 0x4ca8
movq %r13, %rsi
movl %eax, %r13d
movslq %r15d, %r15
movq 0x38(%rsp), %rcx
shlq $0x5, %r15
movq 0x8(%rcx,%r15), %rax
subq (%rcx,%r15), %rax
cqto
idivq %rsi
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movq 0x38(%rsp), %rdx
leal -0x1(%r13), %ecx
movslq %ecx, %rsi
movq 0x70(%rsp), %r14
movq (%rdx,%r14), %rcx
imulq $0x38, %rsi, %r9
movslq %eax, %rsi
movq (%rdx,%r15), %rdx
imulq $0x38, %rsi, %rdi
movq 0x30(%rdx,%rdi), %rsi
addq 0x28(%rcx,%r9), %rsi
cmpq %rbx, %rsi
jg 0x403d
decl %eax
cltq
imulq $0x38, %rax, %rsi
movslq %r13d, %rax
imulq $0x38, %rax, %r8
movq 0x30(%rcx,%r8), %rax
addq 0x28(%rdx,%rsi), %rax
cmpq %rbx, %rax
jg 0x403d
leaq (%rcx,%r9), %rax
addq %r8, %rcx
movq 0x18(%rcx), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rcx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax), %xmm0
movups %xmm0, (%rsp)
movq %rdi, %rbx
movq %rsi, %r13
movq %r8, 0x58(%rsp)
movq %r9, 0xa0(%rsp)
callq 0x25e6
movsd %xmm0, 0x80(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r15), %rax
movq 0x18(%rax,%rbx), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%rbx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax,%r13), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax,%r13), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x60(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r14), %rcx
movq (%rax,%r15), %rax
movq 0x18(%rax,%rbx), %rdx
movq %rdx, 0x28(%rsp)
movq %rbx, 0x50(%rsp)
movups 0x8(%rax,%rbx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0xa0(%rsp), %rdx
movq 0x18(%rcx,%rdx), %rax
movq %rax, 0x10(%rsp)
movups 0x8(%rcx,%rdx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xa0(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r15), %rcx
movq (%rax,%r14), %rax
movq 0x58(%rsp), %rsi
movq 0x18(%rax,%rsi), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rax,%rsi), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rcx,%r13), %rax
movq %rax, 0x10(%rsp)
movupd 0x8(%rcx,%r13), %xmm0
movupd %xmm0, (%rsp)
callq 0x25e6
xorpd %xmm1, %xmm1
subsd 0x80(%rsp), %xmm1
subsd 0x60(%rsp), %xmm1
addsd 0xa0(%rsp), %xmm1
addsd %xmm0, %xmm1
xorpd %xmm0, %xmm0
movapd %xmm1, 0x80(%rsp)
ucomisd %xmm1, %xmm0
jae 0x37bc
movapd 0x120(%rsp), %xmm0
movapd %xmm0, 0x140(%rsp)
movq %r12, %rdi
leaq 0x5ac8(%rip), %rsi      # 0x9230
callq 0x4c46
movsd %xmm0, 0x60(%rsp)
movapd 0x80(%rsp), %xmm0
xorpd 0x28dc(%rip), %xmm0     # 0x6060
movapd %xmm0, 0xa0(%rsp)
leaq 0x108(%rsp), %rdi
callq 0x48f2
movapd 0xa0(%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x2340
ucomisd 0x60(%rsp), %xmm0
jbe 0x403d
movq 0x38(%rsp), %rax
leaq (%rax,%r14), %rdi
movq (%rax,%r14), %rbx
movq 0x8(%rax,%r14), %r13
movq (%rax,%r15), %rcx
movq 0x8(%rax,%r15), %rax
subq %rcx, %rax
cqto
pushq $0x38
popq %rsi
idivq %rsi
movq 0x50(%rsp), %rdx
addq %rcx, %rdx
cltq
imulq $0x38, %rax, %rax
movq %rax, 0x60(%rsp)
addq %rax, %rcx
movq %r13, %rsi
callq 0x49f2
subq %rbx, %r13
movq %r13, %rax
cqto
pushq $0x38
popq %rcx
idivq %rcx
movq 0x38(%rsp), %rcx
leaq (%rcx,%r15), %rdi
movq 0x8(%rcx,%r15), %rsi
movq (%rcx,%r14), %rcx
movq 0x58(%rsp), %rbx
leaq (%rcx,%rbx), %rdx
cltq
imulq $0x38, %rax, %r13
addq %r13, %rcx
callq 0x49f2
movq 0x38(%rsp), %rdi
movq (%rdi,%r14), %rax
addq %r14, %rdi
addq %rax, %rbx
addq %rax, %r13
movq %rbx, %rsi
movq %r13, %rdx
callq 0x4cb0
movq 0x38(%rsp), %rdi
movq (%rdi,%r15), %rax
addq %r15, %rdi
movq 0x50(%rsp), %rsi
addq %rax, %rsi
movq 0x60(%rsp), %rdx
addq %rax, %rdx
callq 0x4cb0
pushq $0x38
popq %r13
addq 0x38(%rsp), %r14
movq %r14, %rdi
callq 0x4a12
addq 0x38(%rsp), %r15
movq %r15, %rdi
callq 0x4a12
movsd 0x68(%rsp), %xmm0
addsd 0x80(%rsp), %xmm0
jmp 0x42f9
xorl %r15d, %r15d
xorl %r14d, %r14d
movq %r15, %r13
shlq $0x5, %r13
movq 0x38(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rsi, %rax
subq %rdi, %rax
shrq $0x5, %rax
cltq
cmpq %rax, %r15
jge 0x3917
movq 0x8(%rdi,%r13), %rax
subq (%rdi,%r13), %rax
cqto
pushq $0x38
popq %rcx
idivq %rcx
cmpl $0x2, %eax
jne 0x3912
cmpl $0xc8, %r14d
jl 0x390f
addq %r13, %rdi
addq $-0x20, %rsi
callq 0x4c56
movq 0x40(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x40(%rsp)
callq 0x4d92
jmp 0x38b4
incl %r14d
incq %r15
jmp 0x38ad
pushq $0x38
popq %r13
cmpl $0xc7, %r14d
jg 0x3483
xorpd %xmm0, %xmm0
movapd %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x49bc
movq %r12, %rdi
movq %rbp, %rsi
callq 0x49bc
movq %r12, %rdi
callq 0x4a12
leaq 0x38(%rsp), %rdi
movq %r12, %rsi
callq 0x52c2
incl %r14d
movq %r12, %rdi
callq 0x4d92
jmp 0x391b
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movq %r14, %rsi
movl %eax, %r14d
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
callq 0x4ca8
movl %eax, %r15d
cmpl %eax, %r14d
je 0x42ff
movslq %r14d, %rbp
movq 0x38(%rsp), %rcx
shlq $0x5, %rbp
movq 0x8(%rcx,%rbp), %rax
subq (%rcx,%rbp), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x581f(%rip), %r14      # 0x9230
movq %r14, %rsi
callq 0x4ca8
movl %eax, 0x70(%rsp)
movq 0x38(%rsp), %rcx
movq 0x8(%rcx,%rbp), %rax
movq %rbp, 0x50(%rsp)
subq (%rcx,%rbp), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movl %eax, 0x58(%rsp)
movq %r14, %rsi
movslq %r15d, %r14
movq 0x38(%rsp), %rcx
shlq $0x5, %r14
movq 0x8(%rcx,%r14), %rax
subq (%rcx,%r14), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
callq 0x4ca8
leaq 0x5760(%rip), %rbp      # 0x91f8
movl %eax, %r15d
movq 0x38(%rsp), %rcx
movq 0x8(%rcx,%r14), %rax
movq %r14, 0x80(%rsp)
subq (%rcx,%r14), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x575c(%rip), %rsi      # 0x9230
callq 0x4ca8
movl 0x70(%rsp), %esi
movl 0x58(%rsp), %r9d
cmpl %r9d, %esi
sete %cl
cmpl %eax, %r15d
sete %dl
orb %cl, %dl
jne 0x403d
cmpl %eax, %r15d
movl %eax, %ecx
cmovll %r15d, %ecx
cmovgl %r15d, %eax
cmpl %r9d, %esi
movl %r9d, %edx
cmovll %esi, %edx
cmovgl %esi, %r9d
movq 0x38(%rsp), %rsi
movq 0x50(%rsp), %rdi
movq (%rsi,%rdi), %r15
movslq %edx, %rdx
imulq $0x38, %rdx, %r8
movslq %r9d, %rdx
imulq $0x38, %rdx, %r9
movq 0x80(%rsp), %rdx
movq (%rsi,%rdx), %r14
movslq %ecx, %rcx
imulq $0x38, %rcx, %rsi
cltq
imulq $0x38, %rax, %rdi
movq -0x10(%r15,%r8), %rcx
movq -0x10(%r14,%rsi), %rax
movq 0x30(%r15,%r9), %rdx
addq %rcx, %rdx
subq %rax, %rdx
addq -0x10(%r14,%rdi), %rdx
cmpq %rbx, %rdx
jg 0x403d
leaq (%r14,%rdi), %rdx
subq %rcx, %rax
addq 0x30(%rdx), %rax
leaq (%r15,%r9), %r13
addq -0x10(%r13), %rax
cmpq %rbx, %rax
jg 0x403d
movq %r9, 0x130(%rsp)
movq %rdi, 0x98(%rsp)
leaq (%r15,%r8), %rcx
movq %rcx, 0xd0(%rsp)
leaq (%r14,%rsi), %rax
movq %rax, 0x70(%rsp)
movq -0x20(%rcx), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%rcx), %xmm0
movups %xmm0, (%rsp)
movq 0x18(%r15,%r8), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%r15,%r8), %xmm0
movups %xmm0, 0x18(%rsp)
movq %rsi, %rbx
movq %r8, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
callq 0x25e6
movsd %xmm0, 0xc0(%rsp)
movq 0x18(%r13), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%r13), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x20(%r13), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%r13), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xb8(%rsp)
movq 0x18(%r14,%rbx), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%r14,%rbx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x70(%rsp), %rcx
movq -0x20(%rcx), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%rcx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xb0(%rsp)
movq 0x58(%rsp), %rcx
movq 0x18(%rcx), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%rcx), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x20(%rcx), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%rcx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xd8(%rsp)
movq 0x18(%r14,%rbx), %rax
movq %rax, 0x28(%rsp)
movq %rbx, 0xa0(%rsp)
movups 0x8(%r14,%rbx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0xd0(%rsp), %rcx
movq -0x20(%rcx), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%rcx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xd0(%rsp)
movq 0x58(%rsp), %rcx
movq 0x18(%rcx), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%rcx), %xmm0
movq %rcx, %rbx
movups %xmm0, 0x18(%rsp)
movq -0x20(%r13), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%r13), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x138(%rsp)
movq 0x60(%rsp), %rcx
movq 0x18(%r15,%rcx), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%r15,%rcx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x70(%rsp), %rcx
movq -0x20(%rcx), %rax
movq %rax, 0x10(%rsp)
movups -0x30(%rcx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x70(%rsp)
movq 0x18(%r13), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%r13), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x20(%rbx), %rax
movq %rax, 0x10(%rsp)
movupd -0x30(%rbx), %xmm0
movupd %xmm0, (%rsp)
callq 0x25e6
xorpd %xmm1, %xmm1
subsd 0xc0(%rsp), %xmm1
subsd 0xb8(%rsp), %xmm1
subsd 0xb0(%rsp), %xmm1
subsd 0xd8(%rsp), %xmm1
addsd 0xd0(%rsp), %xmm1
addsd 0x138(%rsp), %xmm1
addsd 0x70(%rsp), %xmm1
addsd %xmm0, %xmm1
xorpd %xmm0, %xmm0
movapd %xmm1, 0x70(%rsp)
ucomisd %xmm1, %xmm0
jae 0x472b
movapd 0x120(%rsp), %xmm0
movapd %xmm0, 0x140(%rsp)
movq %r12, %rdi
leaq 0x544c(%rip), %rsi      # 0x9230
callq 0x4c46
movsd %xmm0, 0x58(%rsp)
movq 0x50(%rsp), %rbx
movq 0x80(%rsp), %r15
movapd 0x70(%rsp), %xmm0
xorpd 0x2256(%rip), %xmm0     # 0x6060
movapd %xmm0, 0xc0(%rsp)
leaq 0x108(%rsp), %rdi
callq 0x48f2
movapd 0xc0(%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x2340
ucomisd 0x58(%rsp), %xmm0
pushq $0x38
popq %r13
jbe 0x42ff
jmp 0x473c
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movl %eax, %r13d
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movl %eax, %r15d
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movl %eax, %r14d
cmpl %eax, %r15d
je 0x403d
cmpl %r15d, %r13d
je 0x403d
cmpl %r14d, %r13d
je 0x403d
movslq %r13d, %rdx
movq 0x38(%rsp), %rcx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rax
movq %rdx, 0x70(%rsp)
subq (%rcx,%rdx), %rax
cqto
pushq $0x38
popq %r13
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x5302(%rip), %rsi      # 0x9230
callq 0x4ca8
movq %rax, 0x50(%rsp)
movslq %r15d, %rdx
movq 0x38(%rsp), %rcx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rax
movq %rdx, 0x58(%rsp)
subq (%rcx,%rdx), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x52bb(%rip), %rsi      # 0x9230
callq 0x4ca8
movl %eax, %r15d
movslq %r14d, %r14
movq 0x38(%rsp), %rcx
shlq $0x5, %r14
movq 0x8(%rcx,%r14), %rax
subq (%rcx,%r14), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
leaq 0x527b(%rip), %rsi      # 0x9230
callq 0x4ca8
movq 0x38(%rsp), %rdx
movq 0x50(%rsp), %rcx
decl %ecx
movslq %ecx, %rsi
movq 0x70(%rsp), %r13
movq (%rdx,%r13), %rcx
imulq $0x38, %rsi, %r11
movslq %r15d, %rdi
movq 0x58(%rsp), %r8
movq (%rdx,%r8), %rsi
imulq $0x38, %rdi, %r10
movq 0x30(%rsi,%r10), %rdi
addq 0x28(%rcx,%r11), %rdi
cmpq %rbx, %rdi
jg 0x403d
decl %r15d
movslq %r15d, %rdi
imulq $0x38, %rdi, %r15
movslq %eax, %rdi
movq (%rdx,%r14), %rdx
imulq $0x38, %rdi, %r9
movq 0x30(%rdx,%r9), %rdi
addq 0x28(%rsi,%r15), %rdi
cmpq %rbx, %rdi
jg 0x403d
decl %eax
cltq
imulq $0x38, %rax, %rdi
movslq 0x50(%rsp), %rax
imulq $0x38, %rax, %rsi
movq 0x30(%rcx,%rsi), %rax
addq 0x28(%rdx,%rdi), %rax
cmpq %rbx, %rax
jle 0x430f
pushq $0x38
popq %r13
jmp 0x42ff
movq 0x40(%rsp), %rax
subq 0x38(%rsp), %rax
shrq $0x5, %rax
decl %eax
andl $0x0, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movslq %eax, %rbx
movq 0x38(%rsp), %rcx
shlq $0x5, %rbx
movq 0x8(%rcx,%rbx), %rax
subq (%rcx,%rbx), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x4ca8
movq %r14, %rsi
movl %eax, %r14d
movq 0x38(%rsp), %rcx
movq 0x8(%rcx,%rbx), %rax
subq (%rcx,%rbx), %rax
cqto
idivq %r13
decl %eax
movl $0x1, 0x140(%rsp)
movl %eax, 0x144(%rsp)
movq %r12, %rdi
callq 0x4ca8
cmpl %eax, %r14d
movl %eax, %r15d
cmovgl %r14d, %r15d
movslq %eax, %rcx
cmovll %r14d, %eax
movslq %r14d, %rdx
subq %rcx, %rdx
movq %rdx, %rcx
negq %rcx
cmovsq %rdx, %rcx
cmpl $0x1, %ecx
jle 0x42ff
movq 0x38(%rsp), %rcx
leal -0x1(%rax), %edx
movslq %edx, %rdx
movq (%rcx,%rbx), %rcx
imulq $0x38, %rdx, %r13
cltq
imulq $0x38, %rax, %rdx
movq %rdx, 0x58(%rsp)
movq 0x18(%rcx,%rdx), %rax
movq %rax, 0x28(%rsp)
movups 0x8(%rcx,%rdx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rcx,%r13), %rax
movq %rax, 0x10(%rsp)
movups 0x8(%rcx,%r13), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x70(%rsp)
movq 0x38(%rsp), %rax
leal -0x1(%r15), %ecx
movslq %ecx, %rcx
movq (%rax,%rbx), %rax
imulq $0x38, %rcx, %r14
movslq %r15d, %rcx
imulq $0x38, %rcx, %r15
movq 0x18(%rax,%r15), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%r15), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax,%r14), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax,%r14), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x50(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%rbx), %rax
movq 0x18(%rax,%r14), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%r14), %xmm0
movq 0x58(%rsp), %r14
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax,%r13), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax,%r13), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0x80(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%rbx), %rax
movq 0x18(%rax,%r14), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%r14), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax,%r15), %rcx
movq %rcx, 0x10(%rsp)
movupd 0x8(%rax,%r15), %xmm0
movupd %xmm0, (%rsp)
callq 0x25e6
xorpd %xmm1, %xmm1
subsd 0x70(%rsp), %xmm1
subsd 0x50(%rsp), %xmm1
addsd 0x80(%rsp), %xmm1
addsd %xmm0, %xmm1
xorpd %xmm0, %xmm0
movapd %xmm1, 0x70(%rsp)
ucomisd %xmm1, %xmm0
jae 0x42c2
movapd 0x120(%rsp), %xmm0
movapd %xmm0, 0x140(%rsp)
movq %r12, %rdi
leaq 0x4fc1(%rip), %rsi      # 0x9230
callq 0x4c46
movsd %xmm0, 0x50(%rsp)
movapd 0x70(%rsp), %xmm0
xorpd 0x1dd8(%rip), %xmm0     # 0x6060
movapd %xmm0, 0x80(%rsp)
leaq 0x108(%rsp), %rdi
callq 0x48f2
movapd 0x80(%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x2340
ucomisd 0x50(%rsp), %xmm0
pushq $0x38
popq %r13
ja 0x42c6
jmp 0x42ff
pushq $0x38
popq %r13
movq 0x38(%rsp), %rax
movq (%rax,%rbx), %rax
addq %rax, %r14
addq %rax, %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x4f73
addq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x4a12
movsd 0x68(%rsp), %xmm0
addsd 0x70(%rsp), %xmm0
movsd %xmm0, 0x68(%rsp)
movq 0xe8(%rsp), %r14
incq %r14
jmp 0x335d
leaq (%rcx,%r11), %rax
addq %rsi, %rcx
movq 0x18(%rcx), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rcx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax), %xmm0
movups %xmm0, (%rsp)
movq %r8, %rbx
movq %r9, 0x60(%rsp)
movq %r10, 0x80(%rsp)
movq %rsi, 0x50(%rsp)
movq %rdi, 0xa0(%rsp)
movq %r11, 0xb0(%rsp)
callq 0x25e6
movsd %xmm0, 0x98(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%rbx), %rax
movq 0x80(%rsp), %rdx
movq 0x18(%rax,%rdx), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%rdx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rax,%r15), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax,%r15), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xc0(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r14), %rax
movq 0x60(%rsp), %rdx
movq 0x18(%rax,%rdx), %rcx
movq %rcx, 0x28(%rsp)
movups 0x8(%rax,%rdx), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0xa0(%rsp), %rdx
movq 0x18(%rax,%rdx), %rcx
movq %rcx, 0x10(%rsp)
movups 0x8(%rax,%rdx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xb8(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r13), %rcx
movq (%rax,%rbx), %rax
movq 0x80(%rsp), %rsi
movq 0x18(%rax,%rsi), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rax,%rsi), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0xb0(%rsp), %rdx
movq 0x18(%rcx,%rdx), %rax
movq %rax, 0x10(%rsp)
movups 0x8(%rcx,%rdx), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xb0(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%rbx), %rcx
movq (%rax,%r14), %rax
movq 0x60(%rsp), %rsi
movq 0x18(%rax,%rsi), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rax,%rsi), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x18(%rcx,%r15), %rax
movq %rax, 0x10(%rsp)
movups 0x8(%rcx,%r15), %xmm0
movups %xmm0, (%rsp)
callq 0x25e6
movsd %xmm0, 0xd8(%rsp)
movq 0x38(%rsp), %rax
movq (%rax,%r14), %rcx
movq (%rax,%r13), %rax
movq 0x50(%rsp), %rsi
movq 0x18(%rax,%rsi), %rdx
movq %rdx, 0x28(%rsp)
movups 0x8(%rax,%rsi), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0xa0(%rsp), %rdx
movq 0x18(%rcx,%rdx), %rax
movq %rax, 0x10(%rsp)
movupd 0x8(%rcx,%rdx), %xmm0
movupd %xmm0, (%rsp)
callq 0x25e6
xorpd %xmm1, %xmm1
subsd 0x98(%rsp), %xmm1
subsd 0xc0(%rsp), %xmm1
subsd 0xb8(%rsp), %xmm1
addsd 0xb0(%rsp), %xmm1
addsd 0xd8(%rsp), %xmm1
addsd %xmm0, %xmm1
xorpd %xmm0, %xmm0
movapd %xmm1, 0xa0(%rsp)
ucomisd %xmm1, %xmm0
pushq $0x38
popq %r13
jae 0x45a2
movapd 0x120(%rsp), %xmm0
movapd %xmm0, 0x140(%rsp)
movq %r12, %rdi
leaq 0x4ce8(%rip), %rsi      # 0x9230
callq 0x4c46
movsd %xmm0, 0x98(%rsp)
movapd 0xa0(%rsp), %xmm0
xorpd 0x1af9(%rip), %xmm0     # 0x6060
movapd %xmm0, 0xc0(%rsp)
leaq 0x108(%rsp), %rdi
callq 0x48f2
movapd 0xc0(%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x2340
ucomisd 0x98(%rsp), %xmm0
jbe 0x42ff
movq 0x38(%rsp), %r8
movq 0x70(%rsp), %rcx
leaq (%r8,%rcx), %rdi
movq 0x8(%r8,%rcx), %rsi
movq %rsi, %rax
subq (%r8,%rcx), %rax
cqto
idivq %r13
movq %rax, 0x98(%rsp)
movq 0x58(%rsp), %rbx
movq (%r8,%rbx), %rcx
movq 0x8(%r8,%rbx), %rax
subq %rcx, %rax
cqto
idivq %r13
movq (%r8,%r14), %r13
movq 0x8(%r8,%r14), %r15
movq 0x80(%rsp), %rdx
addq %rcx, %rdx
cltq
imulq $0x38, %rax, %rax
movq %rax, 0xc0(%rsp)
addq %rax, %rcx
callq 0x49f2
subq %r13, %r15
movq %r15, %rax
cqto
pushq $0x38
popq %rcx
idivq %rcx
movq 0x38(%rsp), %rcx
leaq (%rcx,%rbx), %rdi
movq 0x8(%rcx,%rbx), %rsi
movq (%rcx,%r14), %rcx
movq 0x60(%rsp), %rdx
addq %rcx, %rdx
cltq
imulq $0x38, %rax, %rax
movq %rax, 0xb8(%rsp)
addq %rax, %rcx
callq 0x49f2
movq 0x38(%rsp), %rax
leaq (%rax,%r14), %rdi
movq 0x8(%rax,%r14), %rsi
movq 0x70(%rsp), %rbx
movq (%rax,%rbx), %rcx
movq 0x50(%rsp), %r13
leaq (%rcx,%r13), %rdx
movslq 0x98(%rsp), %rax
imulq $0x38, %rax, %r15
addq %r15, %rcx
callq 0x49f2
movq 0x38(%rsp), %rdi
movq (%rdi,%rbx), %rax
addq %rbx, %rdi
addq %rax, %r13
addq %rax, %r15
movq %r13, %rsi
movq %r15, %rdx
callq 0x4cb0
movq 0x38(%rsp), %rdi
movq 0x58(%rsp), %rcx
movq (%rdi,%rcx), %rax
addq %rcx, %rdi
movq 0x80(%rsp), %rsi
addq %rax, %rsi
movq 0xc0(%rsp), %rdx
addq %rax, %rdx
callq 0x4cb0
movq 0x38(%rsp), %rdi
movq (%rdi,%r14), %rax
addq %r14, %rdi
movq 0x60(%rsp), %rsi
addq %rax, %rsi
movq 0xb8(%rsp), %rdx
addq %rax, %rdx
callq 0x4cb0
movq 0x70(%rsp), %rdi
addq 0x38(%rsp), %rdi
callq 0x4a12
pushq $0x38
popq %r13
movq 0x58(%rsp), %rdi
addq 0x38(%rsp), %rdi
callq 0x4a12
addq 0x38(%rsp), %r14
movq %r14, %rdi
callq 0x4a12
movsd 0x68(%rsp), %xmm0
addsd 0xa0(%rsp), %xmm0
jmp 0x42f9
pushq $0x38
popq %r13
movq 0x50(%rsp), %rbx
movq 0x80(%rsp), %r15
movq 0x38(%rsp), %rax
leaq (%rax,%rbx), %rdi
movq (%rax,%rbx), %rsi
movq 0x130(%rsp), %r14
addq %r14, %rsi
movq (%rax,%r15), %rcx
movq 0xa0(%rsp), %rax
leaq (%rcx,%rax), %rdx
movq 0x98(%rsp), %rbx
addq %rbx, %rcx
callq 0x49f2
movq 0x38(%rsp), %rax
leaq (%rax,%r15), %rdi
movq (%rax,%r15), %rsi
addq %rbx, %rsi
movq 0x50(%rsp), %rbx
movq (%rax,%rbx), %rcx
movq 0x60(%rsp), %r15
leaq (%rcx,%r15), %rdx
addq %r14, %rcx
callq 0x49f2
movq 0x38(%rsp), %rdi
movq (%rdi,%rbx), %rax
addq %rbx, %rdi
addq %rax, %r15
addq %rax, %r14
movq %r15, %rsi
movq %r14, %rdx
callq 0x4cb0
movq 0x38(%rsp), %rdi
movq 0x80(%rsp), %r14
movq (%rdi,%r14), %rax
addq %r14, %rdi
movq 0xa0(%rsp), %rsi
addq %rax, %rsi
movq 0x98(%rsp), %rdx
addq %rax, %rdx
callq 0x4cb0
addq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x4a12
addq 0x38(%rsp), %r14
movq %r14, %rdi
callq 0x4a12
jmp 0x42ed
movq 0x47c8(%rip), %rdi      # 0x8fd8
leaq 0x1958(%rip), %rsi      # 0x616f
callq 0x21f0
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x22c0
leaq 0x18f7(%rip), %rsi      # 0x6128
movq %rax, %rdi
callq 0x21f0
leaq 0x38(%rsp), %rdi
callq 0x2e1f
leaq 0x38(%rsp), %rdi
callq 0x4b4a
xorl %eax, %eax
addq $0x14c8, %rsp           # imm = 0x14C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x4bfe
jmp 0x48ea
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
jmp 0x48cb
movq %rax, %rbx
jmp 0x48e0
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x4d92
leaq 0x38(%rsp), %rdi
callq 0x4b4a
movq %rbx, %rdi
callq 0x2330