// File: canzarlab[P]Trajan/src/LPCP.cpp
// Function: LPCP::SolveLP()
bool LPCP::SolveLP()
{
    clog << "nr_rows = " << nr_rows << " and nr_cols = " << nr_cols << endl;
    warm_y.conservativeResizeLike(Vector::Zero(nr_rows)); // resizes y with 0's, but keeping old values intact.

    SpMat A(nr_rows, nr_cols);
    A.setFromTriplets(Triplets.begin(), Triplets.end());
    SpMat A_t = A.transpose();
    Vector b = Vector::Ones(nr_rows);

    //x = Vector::Zero(nr_cols);
    //y = Vector::Zero(nr_rows);

    CoveringJRF simpleJRF(A_t, c, b, warm_y, warm_x);

    Vector c1 = -c;
//        PackingJRF simpleJRF(A, b, c1, x, y);
    AugmentedLagrangian solver(simpleJRF, 15);
    solver.setParameter("verbose", false);
    solver.setParameter("pgtol", 1e-1); // should influence running time a lot
    solver.setParameter("constraintsTol", 1e-3);
    Timer timeGeno;
    timeGeno.start();
    solver.solve();
    timeGeno.stop();

    clog << "f = " << solver.f() << " computed in time: " << timeGeno.secs() << " secs" << endl;

    /* when Packing: x->x, y->y, when Covering: -y -> x, x -> y */
    x = -Vector::ConstMapType(solver.y(), nr_cols);
    y = Vector::ConstMapType(solver.x(), nr_rows);

    warm_x = Vector::ConstMapType(solver.y(), nr_cols);
    warm_y = Vector::ConstMapType(solver.x(), nr_rows);


    Vector t = A_t*y-c;
    int nr_tight_constr =  nr_cols - (t.array() > 0.1).count();
    clog << "Number of tight constraints in the dual: " << nr_tight_constr << endl;
    //idea, truncate matrix A for columns that correspond to non-tight constraints in dual
    SpMat truncA(nr_rows, nr_tight_constr);
    Vector truncc(nr_tight_constr);
    Vector truncx(nr_tight_constr);
    int truncA_col = 0;
    for (int i=0; i<nr_cols; i++)
        if (t(i)> 0.1)
            x(i) = 0.0;
        else {
            for (SpMat::InnerIterator it(A,i); it; ++it)
            {
                truncA.coeffRef(it.row(), truncA_col) = it.value();
            }
            truncc(truncA_col) = - c(i);
            truncx(truncA_col) = x(i);
            truncA_col ++;
        }

    assert(truncA_col == nr_tight_constr);

    clog << "Truncated matrix formed ... resolve" << endl;
    Vector expy = Vector::Zero(truncA.rows() + truncA.cols());
    IntegerPackingJRF simpleJRF1(truncA, b, truncc, truncx, expy);
    //PackingJRF simpleJRF1(truncA, b, truncc, truncx, y);
    AugmentedLagrangian solver1(simpleJRF1, 15);
    solver1.setParameter("verbose", false);
    solver1.setParameter("pgtol", 1e-1); // should influence running time a lot
    solver1.setParameter("constraintsTol", 1e-5);
    Timer timeGeno1;
    timeGeno1.start();
    solver1.solve();
    timeGeno1.stop();
    clog << "trunc f = " << solver1.f() << " computed in time: " << timeGeno1.secs() << " secs" << endl;

    // map the solution back to vector x
    truncx = Vector::ConstMapType(solver1.x(), nr_tight_constr);
    clog <<"MAX INTEGER PACKING VALUE: " <<  truncx.maxCoeff() << endl;
    truncA_col = 0;
    for (int i=0; i<nr_cols; i++)
        if (t(i)<= 0.1){
            x(i) = truncx(truncA_col);
            truncA_col++;
        }

    assert(truncA_col == nr_tight_constr);
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x810, %rsp            # imm = 0x810
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x608(%rbp)
movq 0xbd05f(%rip), %rdi     # 0x1a0f50
leaq 0x46344(%rip), %rsi     # 0x12a23c
callq 0xa440
movq %rax, %rdi
movq -0x608(%rbp), %rax
movl 0x108(%rax), %esi
callq 0xa790
movq %rax, %rdi
leaq 0x4632b(%rip), %rsi     # 0x12a247
callq 0xa440
movq %rax, %rdi
movq -0x608(%rbp), %rax
movl 0x10c(%rax), %esi
callq 0xa790
movq %rax, %rdi
movq 0xbd020(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
movq -0x608(%rbp), %rax
movq %rax, %rcx
addq $0xb0, %rcx
movq %rcx, -0x618(%rbp)
movslq 0x108(%rax), %rsi
leaq -0x20(%rbp), %rdi
movq %rdi, -0x610(%rbp)
callq 0x13c30
movq -0x618(%rbp), %rdi
movq -0x610(%rbp), %rsi
callq 0xcec20
movq -0x608(%rbp), %rax
movslq 0x108(%rax), %rsi
movslq 0x10c(%rax), %rdx
leaq -0x68(%rbp), %rdi
movq %rdi, -0x5f8(%rbp)
callq 0xaf0a0
movq -0x608(%rbp), %rdi
addq $0x88, %rdi
movq %rdi, -0x600(%rbp)
callq 0xaf180
movq -0x600(%rbp), %rdi
movq %rax, -0x70(%rbp)
callq 0xaf1b0
movq -0x5f8(%rbp), %rdi
movq %rax, -0x78(%rbp)
leaq -0x70(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xaf130
jmp 0xe3ff0
leaq -0x68(%rbp), %rdi
callq 0xaf1e0
movq %rdx, -0x628(%rbp)
movb %al, -0x619(%rbp)
jmp 0xe4008
movq -0x628(%rbp), %rax
movb -0x619(%rbp), %cl
movb %cl, -0xe0(%rbp)
movq %rax, -0xd8(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xaf210
jmp 0xe4037
movq -0x608(%rbp), %rax
movslq 0x108(%rax), %rsi
leaq -0x108(%rbp), %rdi
callq 0xaf2b0
jmp 0xe4053
leaq -0xf0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xaf2f0
jmp 0xe4068
movq -0x608(%rbp), %r9
movq %r9, %rdx
addq $0xf8, %rdx
movq %r9, %r8
addq $0xb0, %r8
addq $0xa0, %r9
leaq -0x148(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xf0(%rbp), %rcx
callq 0xe52e0
jmp 0xe40a6
movq -0x608(%rbp), %rsi
addq $0xf8, %rsi
leaq -0x168(%rbp), %rdi
callq 0xaf330
jmp 0xe40c2
leaq -0x158(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0xaf380
jmp 0xe40d7
leaq -0x1d0(%rbp), %rdi
leaq -0x148(%rbp), %rsi
movl $0xf, %edx
callq 0x124e0
jmp 0xe40f1
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x630(%rbp)
callq 0xa7d0
movq -0x630(%rbp), %rdx
leaq 0x272f8(%rip), %rsi     # 0x10b40a
leaq -0x1f0(%rbp), %rdi
callq 0xe9b0
jmp 0xe4120
leaq -0x1d0(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
xorps %xmm0, %xmm0
callq 0x139e0
jmp 0xe4138
leaq -0x1f0(%rbp), %rdi
callq 0xa8d8
leaq -0x1f1(%rbp), %rdi
callq 0xa4c0
leaq -0x219(%rbp), %rdi
movq %rdi, -0x638(%rbp)
callq 0xa7d0
movq -0x638(%rbp), %rdx
leaq 0x27277(%rip), %rsi     # 0x10b3e8
leaq -0x218(%rbp), %rdi
callq 0xe9b0
jmp 0xe417f
leaq -0x1d0(%rbp), %rdi
leaq -0x218(%rbp), %rsi
movsd 0x29adb(%rip), %xmm0    # 0x10dc70
callq 0x139e0
jmp 0xe419c
leaq -0x218(%rbp), %rdi
callq 0xa8d8
leaq -0x219(%rbp), %rdi
callq 0xa4c0
leaq -0x241(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0xa7d0
movq -0x640(%rbp), %rdx
leaq 0x27226(%rip), %rsi     # 0x10b3fb
leaq -0x240(%rbp), %rdi
callq 0xe9b0
jmp 0xe41e3
leaq -0x1d0(%rbp), %rdi
leaq -0x240(%rbp), %rsi
movsd 0x29a87(%rip), %xmm0    # 0x10dc80
callq 0x139e0
jmp 0xe4200
leaq -0x240(%rbp), %rdi
callq 0xa8d8
leaq -0x241(%rbp), %rdi
callq 0xa4c0
leaq -0x288(%rbp), %rdi
callq 0xeb30
jmp 0xe4226
leaq -0x288(%rbp), %rdi
callq 0xeb50
jmp 0xe4234
leaq -0x1d0(%rbp), %rdi
callq 0x125f0
jmp 0xe4242
leaq -0x288(%rbp), %rdi
callq 0xf350
jmp 0xe4250
movq 0xbccf9(%rip), %rdi     # 0x1a0f50
leaq 0x49ae6(%rip), %rsi     # 0x12dd44
callq 0xa440
movq %rax, -0x648(%rbp)
jmp 0xe426c
leaq -0x1d0(%rbp), %rdi
callq 0x139c0
movsd %xmm0, -0x650(%rbp)
jmp 0xe4282
movsd -0x650(%rbp), %xmm0
movq -0x648(%rbp), %rdi
callq 0xa870
movq %rax, -0x658(%rbp)
jmp 0xe429f
movq -0x658(%rbp), %rdi
leaq 0x45faa(%rip), %rsi     # 0x12a257
callq 0xa440
movq %rax, -0x660(%rbp)
jmp 0xe42bb
leaq -0x288(%rbp), %rdi
callq 0xf3b0
movss %xmm0, -0x664(%rbp)
jmp 0xe42d1
movss -0x664(%rbp), %xmm0
movq -0x660(%rbp), %rdi
callq 0xa340
movq %rax, -0x670(%rbp)
jmp 0xe42ee
movq -0x670(%rbp), %rdi
leaq 0x26f70(%rip), %rsi     # 0x10b26c
callq 0xa440
movq %rax, -0x678(%rbp)
jmp 0xe430a
movq -0x678(%rbp), %rdi
movq 0xbcc48(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
jmp 0xe431f
leaq -0x1d0(%rbp), %rdi
callq 0x139a0
movq %rax, -0x680(%rbp)
jmp 0xe4334
movq -0x608(%rbp), %rax
movslq 0x10c(%rax), %rax
movq %rax, -0x688(%rbp)
leaq -0x2c2(%rbp), %rdi
callq 0x160e0
jmp 0xe4357
movq -0x688(%rbp), %rdx
movq -0x680(%rbp), %rsi
leaq -0x2c0(%rbp), %rdi
leaq -0x2c2(%rbp), %rcx
callq 0x1cea0
jmp 0xe437a
leaq -0x2a8(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0xe5340
jmp 0xe438f
movq -0x608(%rbp), %rdi
addq $0xc0, %rdi
leaq -0x2a8(%rbp), %rsi
callq 0xe5390
jmp 0xe43ab
leaq -0x1d0(%rbp), %rdi
callq 0x13980
movq %rax, -0x690(%rbp)
jmp 0xe43c0
movq -0x608(%rbp), %rax
movslq 0x108(%rax), %rax
movq %rax, -0x698(%rbp)
leaq -0x2e2(%rbp), %rdi
callq 0x160e0
jmp 0xe43e3
movq -0x698(%rbp), %rdx
movq -0x690(%rbp), %rsi
leaq -0x2e0(%rbp), %rdi
leaq -0x2e2(%rbp), %rcx
callq 0x1cea0
jmp 0xe4406
movq -0x608(%rbp), %rdi
addq $0xd0, %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x14740
jmp 0xe4422
leaq -0x1d0(%rbp), %rdi
callq 0x139a0
movq %rax, -0x6a0(%rbp)
jmp 0xe4437
movq -0x608(%rbp), %rax
movslq 0x10c(%rax), %rax
movq %rax, -0x6a8(%rbp)
leaq -0x302(%rbp), %rdi
callq 0x160e0
jmp 0xe445a
movq -0x6a8(%rbp), %rdx
movq -0x6a0(%rbp), %rsi
leaq -0x300(%rbp), %rdi
leaq -0x302(%rbp), %rcx
callq 0x1cea0
jmp 0xe447d
movq -0x608(%rbp), %rdi
addq $0xa0, %rdi
leaq -0x300(%rbp), %rsi
callq 0x14740
jmp 0xe4499
leaq -0x1d0(%rbp), %rdi
callq 0x13980
movq %rax, -0x6b0(%rbp)
jmp 0xe44ae
movq -0x608(%rbp), %rax
movslq 0x108(%rax), %rax
movq %rax, -0x6b8(%rbp)
leaq -0x322(%rbp), %rdi
callq 0x160e0
jmp 0xe44d1
movq -0x6b8(%rbp), %rdx
movq -0x6b0(%rbp), %rsi
leaq -0x320(%rbp), %rdi
leaq -0x322(%rbp), %rcx
callq 0x1cea0
jmp 0xe44f4
movq -0x608(%rbp), %rdi
addq $0xb0, %rdi
leaq -0x320(%rbp), %rsi
callq 0x14740
jmp 0xe4510
movq -0x608(%rbp), %rsi
addq $0xd0, %rsi
leaq -0xd0(%rbp), %rdi
callq 0xe53c0
movq %rdx, -0x6c8(%rbp)
movq %rax, -0x6c0(%rbp)
jmp 0xe453a
movq -0x608(%rbp), %rdx
movq -0x6c8(%rbp), %rax
movq -0x6c0(%rbp), %rcx
movq %rcx, -0x368(%rbp)
movq %rax, -0x360(%rbp)
addq $0xf8, %rdx
leaq -0x358(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0xe5410
jmp 0xe4579
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0xe5480
jmp 0xe458e
movq -0x608(%rbp), %rax
movslq 0x10c(%rax), %rax
movq %rax, -0x6d8(%rbp)
leaq -0x338(%rbp), %rdi
callq 0x28e80
movq %rax, -0x6d0(%rbp)
jmp 0xe45b8
movq -0x6d0(%rbp), %rax
movq %rax, -0x3a8(%rbp)
movabsq $0x3fb999999999999a, %rax # imm = 0x3FB999999999999A
movq %rax, -0x3b0(%rbp)
leaq -0x3a0(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
leaq -0x3b0(%rbp), %rdx
callq 0xe54c0
jmp 0xe45f3
leaq -0x3a0(%rbp), %rdi
callq 0xe5530
movq %rax, -0x6e0(%rbp)
jmp 0xe4608
movq -0x6d8(%rbp), %rax
movq -0x6e0(%rbp), %rcx
subl %ecx, %eax
movl %eax, -0x36c(%rbp)
movq 0xbc92b(%rip), %rdi     # 0x1a0f50
leaq 0x4967c(%rip), %rsi     # 0x12dca8
callq 0xa440
movq %rax, -0x6e8(%rbp)
jmp 0xe463a
movq -0x6e8(%rbp), %rdi
movl -0x36c(%rbp), %esi
callq 0xa790
movq %rax, -0x6f0(%rbp)
jmp 0xe4655
movq -0x6f0(%rbp), %rdi
movq 0xbc8fd(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
jmp 0xe466a
movq -0x608(%rbp), %rax
movslq 0x108(%rax), %rsi
movslq -0x36c(%rbp), %rdx
leaq -0x3f8(%rbp), %rdi
callq 0xaf0a0
jmp 0xe468d
leaq -0x408(%rbp), %rdi
leaq -0x36c(%rbp), %rsi
callq 0xaee20
jmp 0xe46a2
leaq -0x418(%rbp), %rdi
leaq -0x36c(%rbp), %rsi
callq 0xaee20
jmp 0xe46b7
movl $0x0, -0x41c(%rbp)
movl $0x0, -0x420(%rbp)
movq -0x608(%rbp), %rcx
movl -0x420(%rbp), %eax
cmpl 0x10c(%rcx), %eax
jge 0xe4a90
movslq -0x420(%rbp), %rsi
leaq -0x338(%rbp), %rdi
callq 0x145f0
movq %rax, -0x6f8(%rbp)
jmp 0xe4700
movq -0x6f8(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x2955d(%rip), %xmm1    # 0x10dc70
ucomisd %xmm1, %xmm0
jbe 0xe48d2
movq -0x608(%rbp), %rdi
addq $0xc0, %rdi
movslq -0x420(%rbp), %rsi
callq 0x145f0
movq %rax, -0x700(%rbp)
jmp 0xe4740
movq -0x700(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
jmp 0xe4a7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe47e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0xa8d8
leaq -0x1f1(%rbp), %rdi
callq 0xa4c0
jmp 0xe51a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe4820
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x218(%rbp), %rdi
callq 0xa8d8
leaq -0x219(%rbp), %rdi
callq 0xa4c0
jmp 0xe51a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe485d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x240(%rbp), %rdi
callq 0xa8d8
leaq -0x241(%rbp), %rdi
callq 0xa4c0
jmp 0xe51a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe51a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5195
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5189
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe517d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5171
movslq -0x420(%rbp), %rdx
leaq -0x448(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xb1f00
jmp 0xe48eb
jmp 0xe48ed
leaq -0x448(%rbp), %rdi
callq 0xb1fd0
movb %al, -0x701(%rbp)
jmp 0xe4901
movb -0x701(%rbp), %al
testb $0x1, %al
jne 0xe4910
jmp 0xe4996
leaq -0x448(%rbp), %rdi
callq 0xb1ff0
movq %rax, -0x710(%rbp)
jmp 0xe4925
movq -0x710(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x720(%rbp)
leaq -0x448(%rbp), %rdi
callq 0xe5760
movq %rax, -0x718(%rbp)
jmp 0xe494d
movq -0x718(%rbp), %rsi
movslq -0x41c(%rbp), %rdx
leaq -0x3f8(%rbp), %rdi
callq 0xe5570
movq %rax, -0x728(%rbp)
jmp 0xe4970
movq -0x728(%rbp), %rax
movsd -0x720(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x448(%rbp), %rdi
callq 0xb20a0
jmp 0xe4991
jmp 0xe48ed
movq -0x608(%rbp), %rdi
addq $0xf8, %rdi
movslq -0x420(%rbp), %rsi
callq 0x145f0
movq %rax, -0x730(%rbp)
jmp 0xe49b9
movq -0x730(%rbp), %rax
movsd (%rax), %xmm0
movaps 0x269f5(%rip), %xmm1    # 0x10b3c0
pxor %xmm1, %xmm0
movsd %xmm0, -0x740(%rbp)
movslq -0x41c(%rbp), %rsi
leaq -0x408(%rbp), %rdi
callq 0x145f0
movq %rax, -0x738(%rbp)
jmp 0xe49f3
movq -0x608(%rbp), %rdi
movq -0x738(%rbp), %rax
movsd -0x740(%rbp), %xmm0
movsd %xmm0, (%rax)
addq $0xc0, %rdi
movslq -0x420(%rbp), %rsi
callq 0x145f0
movq %rax, -0x748(%rbp)
jmp 0xe4a29
movq -0x748(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x758(%rbp)
movslq -0x41c(%rbp), %rsi
leaq -0x418(%rbp), %rdi
callq 0x145f0
movq %rax, -0x750(%rbp)
jmp 0xe4a58
movq -0x750(%rbp), %rax
movsd -0x758(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x41c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x41c(%rbp)
jmp 0xe4a7c
movl -0x420(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x420(%rbp)
jmp 0xe46cb
movl -0x41c(%rbp), %eax
cmpl -0x36c(%rbp), %eax
jne 0xe4aa0
jmp 0xe4abf
leaq 0x4922b(%rip), %rdi     # 0x12dcd2
leaq 0x49242(%rip), %rsi     # 0x12dcf0
movl $0x42, %edx
leaq 0x49243(%rip), %rcx     # 0x12dcfd
callq 0xa2b0
movq 0xbc48a(%rip), %rdi     # 0x1a0f50
leaq 0x4924d(%rip), %rsi     # 0x12dd1a
callq 0xa440
movq %rax, -0x760(%rbp)
jmp 0xe4adb
movq -0x760(%rbp), %rdi
movq 0xbc477(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
jmp 0xe4af0
leaq -0x3f8(%rbp), %rdi
callq 0xafdc0
movq %rax, -0x768(%rbp)
jmp 0xe4b05
leaq -0x3f8(%rbp), %rdi
callq 0xafda0
movq %rax, -0x770(%rbp)
jmp 0xe4b1a
movq -0x770(%rbp), %rax
movq -0x768(%rbp), %rsi
addq %rax, %rsi
leaq -0x470(%rbp), %rdi
callq 0x13c30
jmp 0xe4b39
leaq -0x458(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0xaf2f0
jmp 0xe4b4e
leaq -0x4b0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
leaq -0x408(%rbp), %rcx
leaq -0x418(%rbp), %r8
leaq -0x458(%rbp), %r9
callq 0xdda40
jmp 0xe4b7f
leaq -0x518(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
movl $0xf, %edx
callq 0x124e0
jmp 0xe4b99
leaq -0x539(%rbp), %rdi
movq %rdi, -0x778(%rbp)
callq 0xa7d0
movq -0x778(%rbp), %rdx
leaq 0x26850(%rip), %rsi     # 0x10b40a
leaq -0x538(%rbp), %rdi
callq 0xe9b0
jmp 0xe4bc8
leaq -0x518(%rbp), %rdi
leaq -0x538(%rbp), %rsi
xorps %xmm0, %xmm0
callq 0x139e0
jmp 0xe4be0
leaq -0x538(%rbp), %rdi
callq 0xa8d8
leaq -0x539(%rbp), %rdi
callq 0xa4c0
leaq -0x561(%rbp), %rdi
movq %rdi, -0x780(%rbp)
callq 0xa7d0
movq -0x780(%rbp), %rdx
leaq 0x267cf(%rip), %rsi     # 0x10b3e8
leaq -0x560(%rbp), %rdi
callq 0xe9b0
jmp 0xe4c27
leaq -0x518(%rbp), %rdi
leaq -0x560(%rbp), %rsi
movsd 0x29033(%rip), %xmm0    # 0x10dc70
callq 0x139e0
jmp 0xe4c44
leaq -0x560(%rbp), %rdi
callq 0xa8d8
leaq -0x561(%rbp), %rdi
callq 0xa4c0
leaq -0x589(%rbp), %rdi
movq %rdi, -0x788(%rbp)
callq 0xa7d0
movq -0x788(%rbp), %rdx
leaq 0x2677e(%rip), %rsi     # 0x10b3fb
leaq -0x588(%rbp), %rdi
callq 0xe9b0
jmp 0xe4c8b
leaq -0x518(%rbp), %rdi
leaq -0x588(%rbp), %rsi
movsd 0x48fff(%rip), %xmm0    # 0x12dca0
callq 0x139e0
jmp 0xe4ca8
leaq -0x588(%rbp), %rdi
callq 0xa8d8
leaq -0x589(%rbp), %rdi
callq 0xa4c0
leaq -0x5d0(%rbp), %rdi
callq 0xeb30
jmp 0xe4cce
leaq -0x5d0(%rbp), %rdi
callq 0xeb50
jmp 0xe4cdc
leaq -0x518(%rbp), %rdi
callq 0x125f0
jmp 0xe4cea
leaq -0x5d0(%rbp), %rdi
callq 0xf350
jmp 0xe4cf8
movq 0xbc251(%rip), %rdi     # 0x1a0f50
leaq 0x49038(%rip), %rsi     # 0x12dd3e
callq 0xa440
movq %rax, -0x790(%rbp)
jmp 0xe4d14
leaq -0x518(%rbp), %rdi
callq 0x139c0
movsd %xmm0, -0x798(%rbp)
jmp 0xe4d2a
movsd -0x798(%rbp), %xmm0
movq -0x790(%rbp), %rdi
callq 0xa870
movq %rax, -0x7a0(%rbp)
jmp 0xe4d47
movq -0x7a0(%rbp), %rdi
leaq 0x45502(%rip), %rsi     # 0x12a257
callq 0xa440
movq %rax, -0x7a8(%rbp)
jmp 0xe4d63
leaq -0x5d0(%rbp), %rdi
callq 0xf3b0
movss %xmm0, -0x7ac(%rbp)
jmp 0xe4d79
movss -0x7ac(%rbp), %xmm0
movq -0x7a8(%rbp), %rdi
callq 0xa340
movq %rax, -0x7b8(%rbp)
jmp 0xe4d96
movq -0x7b8(%rbp), %rdi
leaq 0x264c8(%rip), %rsi     # 0x10b26c
callq 0xa440
movq %rax, -0x7c0(%rbp)
jmp 0xe4db2
movq -0x7c0(%rbp), %rdi
movq 0xbc1a0(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
jmp 0xe4dc7
leaq -0x518(%rbp), %rdi
callq 0x13980
movq %rax, -0x7c8(%rbp)
jmp 0xe4ddc
movslq -0x36c(%rbp), %rax
movq %rax, -0x7d0(%rbp)
leaq -0x5ea(%rbp), %rdi
callq 0x160e0
jmp 0xe4df8
movq -0x7d0(%rbp), %rdx
movq -0x7c8(%rbp), %rsi
leaq -0x5e8(%rbp), %rdi
leaq -0x5ea(%rbp), %rcx
callq 0x1cea0
jmp 0xe4e1b
leaq -0x418(%rbp), %rdi
leaq -0x5e8(%rbp), %rsi
callq 0x14740
jmp 0xe4e30
movq 0xbc119(%rip), %rdi     # 0x1a0f50
leaq 0x48f0b(%rip), %rsi     # 0x12dd49
callq 0xa440
movq %rax, -0x7d8(%rbp)
jmp 0xe4e4c
leaq -0x418(%rbp), %rdi
callq 0xe5780
movsd %xmm0, -0x7e0(%rbp)
jmp 0xe4e62
movsd -0x7e0(%rbp), %xmm0
movq -0x7d8(%rbp), %rdi
callq 0xa870
movq %rax, -0x7e8(%rbp)
jmp 0xe4e7f
movq -0x7e8(%rbp), %rdi
movq 0xbc0d3(%rip), %rsi     # 0x1a0f60
callq 0xa4a0
jmp 0xe4e94
movl $0x0, -0x41c(%rbp)
movl $0x0, -0x5f0(%rbp)
movq -0x608(%rbp), %rcx
movl -0x5f0(%rbp), %eax
cmpl 0x10c(%rcx), %eax
jge 0xe5078
movslq -0x5f0(%rbp), %rsi
leaq -0x338(%rbp), %rdi
callq 0x145f0
movq %rax, -0x7f0(%rbp)
jmp 0xe4edd
movq -0x7f0(%rbp), %rax
movsd 0x28d84(%rip), %xmm0    # 0x10dc70
ucomisd (%rax), %xmm0
jb 0xe5062
movslq -0x41c(%rbp), %rsi
leaq -0x418(%rbp), %rdi
callq 0x145f0
movq %rax, -0x7f8(%rbp)
jmp 0xe4f12
movq -0x608(%rbp), %rdi
movq -0x7f8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x808(%rbp)
addq $0xc0, %rdi
movslq -0x5f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x800(%rbp)
jmp 0xe4f48
movq -0x800(%rbp), %rax
movsd -0x808(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x41c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x41c(%rbp)
jmp 0xe5062
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5165
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5159
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe4fc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x538(%rbp), %rdi
callq 0xa8d8
leaq -0x539(%rbp), %rdi
callq 0xa4c0
jmp 0xe514d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe5000
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x560(%rbp), %rdi
callq 0xa8d8
leaq -0x561(%rbp), %rdi
callq 0xa4c0
jmp 0xe514d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe503d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x588(%rbp), %rdi
callq 0xa8d8
leaq -0x589(%rbp), %rdi
callq 0xa4c0
jmp 0xe514d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xe514d
jmp 0xe5064
movl -0x5f0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5f0(%rbp)
jmp 0xe4ea8
movl -0x41c(%rbp), %eax
cmpl -0x36c(%rbp), %eax
jne 0xe5088
jmp 0xe50a7
leaq 0x48c43(%rip), %rdi     # 0x12dcd2
leaq 0x48c5a(%rip), %rsi     # 0x12dcf0
movl $0x5c, %edx
leaq 0x48c5b(%rip), %rcx     # 0x12dcfd
callq 0xa2b0
leaq -0x518(%rbp), %rdi
callq 0xaf420
leaq -0x4b0(%rbp), %rdi
callq 0xddab0
leaq -0x458(%rbp), %rdi
callq 0xff40
leaq -0x418(%rbp), %rdi
callq 0xff40
leaq -0x408(%rbp), %rdi
callq 0xff40
leaq -0x3f8(%rbp), %rdi
callq 0xaf470
leaq -0x338(%rbp), %rdi
callq 0xff40
leaq -0x1d0(%rbp), %rdi
callq 0xaf420
leaq -0x158(%rbp), %rdi
callq 0xff40
leaq -0x148(%rbp), %rdi
callq 0xe57c0
leaq -0xf0(%rbp), %rdi
callq 0xff40
leaq -0xd0(%rbp), %rdi
callq 0xaf470
leaq -0x68(%rbp), %rdi
callq 0xaf470
movb $0x1, %al
andb $0x1, %al
addq $0x810, %rsp            # imm = 0x810
popq %rbp
retq
leaq -0x518(%rbp), %rdi
callq 0xaf420
leaq -0x4b0(%rbp), %rdi
callq 0xddab0
leaq -0x458(%rbp), %rdi
callq 0xff40
leaq -0x418(%rbp), %rdi
callq 0xff40
leaq -0x408(%rbp), %rdi
callq 0xff40
leaq -0x3f8(%rbp), %rdi
callq 0xaf470
leaq -0x338(%rbp), %rdi
callq 0xff40
leaq -0x1d0(%rbp), %rdi
callq 0xaf420
leaq -0x158(%rbp), %rdi
callq 0xff40
leaq -0x148(%rbp), %rdi
callq 0xe57c0
leaq -0xf0(%rbp), %rdi
callq 0xff40
leaq -0xd0(%rbp), %rdi
callq 0xaf470
leaq -0x68(%rbp), %rdi
callq 0xaf470
movq -0x80(%rbp), %rdi
callq 0xa7c0
nop