// File: EduBic[P]TSP-MetaheuristicSolvers/solversexecutor.cpp
// Function: SolversExecutor::execute()
void SolversExecutor::execute() {

    // name log file with actual date
    time_t rawtime;
    struct tm* timeinfo;
    char buffer[80];

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    strftime(buffer, sizeof(buffer),"%d-%m-%Y %I:%M:%S", timeinfo);
    string nowTime(buffer);

    string fileNameStr = string(mFilename);
    fileNameStr.erase(0, 5);

    ofstream outputLog("Log/" + fileNameStr + "-outputLog-" + nowTime + ".txt");
    ofstream latexLog("Log/" + fileNameStr + "-latexLog-" + nowTime + ".txt");
    //ofstream csvLog("Log/" + fileNameStr + "-csvLog-" + nowTime + ".csv");

    //csvLog << "Length, Avg. Value, Avg. Time, Best Value found, Total time" << endl;

    latexLog << "Solver, Avg Value, Best Value found, Avg. Time, Total time, Avg Iter" << endl;


    for (std::vector<Solver*>::iterator it = mSolvers.begin(); it != mSolvers.end(); ++it) {

        latexLog << endl;

        int i = 0;
        double values[mInitSolutions.size()];
        double times[mInitSolutions.size()];
        uint iterations[mInitSolutions.size()];
        double bestOfBestvalue = 1e10;

        for (std::vector<TSPSolution*>::iterator inIt = mInitSolutions.begin(); inIt != mInitSolutions.end(); ++inIt) {

            TSPSolution* bestSolution = new TSPSolution(mTspInstance);
            executeAndMeasureTime(*(*it), **inIt, *bestSolution);

            mBestSolutions.push_back(bestSolution);


            // print solution into log file
            double value = bestSolution->evaluateObjectiveFunction(mTspInstance);

            if (value < bestOfBestvalue) {
                bestOfBestvalue = value;
            }

            // print logconsole result of init solution solved
            outputLog << std::endl << "----------------------------------------------------------------------" << std::endl
                      << std::endl << bestSolution->solveBy << std::endl;

            //bestSolution->print(outputLog);

            outputLog << "(value : " << value << ")\t"
                      << "sec. (user time) " << bestSolution->userTime << "\t"
                      << "sec. (CPU time) " << bestSolution->cpuTime << "\t"
                      << "Max iterations " << bestSolution->iterations << endl;

            // print latex result of init solution solved
            latexLog << bestSolution->solveBy << ", " << value << ", " << bestSolution->cpuTime << endl;

            // for compute average
            values[i] = value;
            times[i] = bestSolution->cpuTime;
            iterations[i] = bestSolution->iterations;

            i++;
        }


        double sumValue = 0;
        double sumTime = 0;
        uint sumIter = 0;
        for (unsigned int j = 0; j < mInitSolutions.size(); j++) {
            sumValue += values[j];
            sumTime += times[j];
            sumIter += iterations[j];
        }

        double avgValue = sumValue / mInitSolutions.size();
        double avgTime = sumTime / mInitSolutions.size();
        double avgIter = sumIter / mInitSolutions.size();

        //latexLog << endl;
        //latexLog << "Solver, Avg Value, Avg. Time, Best Value found, Total time, Avg Iter" << endl;
        latexLog << (*it)->getSolverName()
                 << ", " << avgValue
                 << ", " << bestOfBestvalue
                 << ", " << avgTime
                 << ", " << sumTime
                 << ", " << avgIter;
        latexLog << endl;


        // Print result for Calibration of TS
        TabuSearchSolver* tsSolver = dynamic_cast<TabuSearchSolver*>(*it);
        if (tsSolver != NULL) {
            //csvLog << tsSolver->mTabuLength << ", " << avgValue << ", " << ", " << bestOfBestvalue << ", " << avgTime << ", " << sumTime << endl;
        }

        // Print result
        // csvLog << (*it)->getSolverName() << ", " << bestOfBestvalue << ", " << sumTime << endl;
    }

    //csvLog.close();
    latexLog.close();
    outputLog.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x850, %rsp            # imm = 0x850
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x6a8(%rbp)
leaq -0x10(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0x3250
movq -0x6a0(%rbp), %rdi
callq 0x31f0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rcx
leaq 0xa7bb(%rip), %rdx      # 0xe050
leaq -0x70(%rbp), %rdi
movq %rdi, -0x698(%rbp)
movl $0x50, %esi
callq 0x3210
leaq -0x91(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x3430
movq -0x698(%rbp), %rsi
movq -0x690(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0x3320
jmp 0x38d9
leaq -0x91(%rbp), %rdi
callq 0x32c0
movq -0x6a8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x6b8(%rbp)
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
callq 0x3430
movq -0x6b8(%rbp), %rsi
movq -0x6b0(%rbp), %rdx
leaq -0xc8(%rbp), %rdi
callq 0x3320
jmp 0x3925
leaq -0xc9(%rbp), %rdi
callq 0x32c0
xorl %eax, %eax
movl %eax, %esi
leaq -0xc8(%rbp), %rdi
movl $0x5, %edx
callq 0x30a0
jmp 0x3948
leaq 0xa713(%rip), %rsi      # 0xe062
leaq -0x350(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0x5940
jmp 0x3964
leaq 0xa6fc(%rip), %rdx      # 0xe067
leaq -0x330(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x58a0
jmp 0x3980
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
leaq -0x90(%rbp), %rdx
callq 0x58f0
jmp 0x399c
leaq 0xa6d0(%rip), %rdx      # 0xe073
leaq -0x2f0(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x58a0
jmp 0x39b8
leaq -0x2d0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
movl $0x10, %edx
callq 0x3480
jmp 0x39d2
leaq -0x2f0(%rbp), %rdi
callq 0x31b0
leaq -0x310(%rbp), %rdi
callq 0x31b0
leaq -0x330(%rbp), %rdi
callq 0x31b0
leaq -0x350(%rbp), %rdi
callq 0x31b0
leaq 0xa659(%rip), %rsi      # 0xe062
leaq -0x5d0(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0x5940
jmp 0x3a1e
leaq 0xa653(%rip), %rdx      # 0xe078
leaq -0x5b0(%rbp), %rdi
leaq -0x5d0(%rbp), %rsi
callq 0x58a0
jmp 0x3a3a
leaq -0x590(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
leaq -0x90(%rbp), %rdx
callq 0x58f0
jmp 0x3a56
leaq 0xa616(%rip), %rdx      # 0xe073
leaq -0x570(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x58a0
jmp 0x3a72
leaq -0x550(%rbp), %rdi
leaq -0x570(%rbp), %rsi
movl $0x10, %edx
callq 0x3480
jmp 0x3a8c
leaq -0x570(%rbp), %rdi
callq 0x31b0
leaq -0x590(%rbp), %rdi
callq 0x31b0
leaq -0x5b0(%rbp), %rdi
callq 0x31b0
leaq -0x5d0(%rbp), %rdi
callq 0x31b0
leaq 0xa5c0(%rip), %rsi      # 0xe083
leaq -0x550(%rbp), %rdi
callq 0x3280
movq %rax, -0x6c0(%rbp)
jmp 0x3ad8
movq -0x6c0(%rbp), %rdi
movq 0x104ca(%rip), %rsi     # 0x13fb0
callq 0x32b0
jmp 0x3aed
movq -0x6a8(%rbp), %rdi
addq $0x30, %rdi
callq 0x5a70
movq %rax, -0x5d8(%rbp)
movq -0x6a8(%rbp), %rdi
addq $0x30, %rdi
callq 0x5ae0
movq %rax, -0x5e0(%rbp)
leaq -0x5d8(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0x5aa0
testb $0x1, %al
jne 0x3b37
jmp 0x45fa
movq 0x10472(%rip), %rsi     # 0x13fb0
leaq -0x550(%rbp), %rdi
callq 0x32b0
jmp 0x3b4c
movq -0x6a8(%rbp), %rdi
movl $0x0, -0x5e4(%rbp)
addq $0x60, %rdi
movq %rdi, -0x6d8(%rbp)
callq 0x5b10
movq -0x6d8(%rbp), %rdi
movq %rsp, %rcx
movq %rcx, -0x5f0(%rbp)
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x6e0(%rbp)
movq %rcx, %rsp
movq %rax, -0x5f8(%rbp)
callq 0x5b10
movq -0x6d8(%rbp), %rdi
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x6d0(%rbp)
movq %rcx, %rsp
movq %rax, -0x600(%rbp)
callq 0x5b10
movq -0x6a8(%rbp), %rdi
movq %rax, %rcx
movq %rcx, %rax
leaq 0xf(,%rcx,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x6c8(%rbp)
movq %rcx, %rsp
movq %rax, -0x608(%rbp)
movsd 0xa3fb(%rip), %xmm0     # 0xe008
movsd %xmm0, -0x610(%rbp)
addq $0x60, %rdi
callq 0x5b30
movq %rax, -0x618(%rbp)
movq -0x6a8(%rbp), %rdi
addq $0x60, %rdi
callq 0x5ba0
movq %rax, -0x620(%rbp)
leaq -0x618(%rbp), %rdi
leaq -0x620(%rbp), %rsi
callq 0x5b60
testb $0x1, %al
jne 0x3c58
jmp 0x421c
movl $0x50, %edi
callq 0x3290
movq %rax, -0x6e8(%rbp)
jmp 0x3c6b
movq -0x6e8(%rbp), %rdi
movq -0x6a8(%rbp), %rsi
addq $0x8, %rsi
callq 0x5530
jmp 0x3c84
movq -0x6e8(%rbp), %rax
movq %rax, -0x628(%rbp)
leaq -0x5d8(%rbp), %rdi
callq 0x5bd0
movq (%rax), %rax
movq %rax, -0x6f0(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x5be0
movq -0x6a8(%rbp), %rdi
movq -0x6f0(%rbp), %rsi
movq (%rax), %rdx
movq -0x628(%rbp), %rcx
callq 0x4690
jmp 0x3cd3
movq -0x6a8(%rbp), %rdi
addq $0x48, %rdi
leaq -0x628(%rbp), %rsi
callq 0x57c0
jmp 0x3cec
movq -0x6a8(%rbp), %rsi
movq -0x628(%rbp), %rdi
addq $0x8, %rsi
callq 0x5bf0
movsd %xmm0, -0x6f8(%rbp)
jmp 0x3d0d
movsd -0x6f8(%rbp), %xmm0
movsd %xmm0, -0x630(%rbp)
movsd -0x630(%rbp), %xmm1
movsd -0x610(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x3f00
movsd -0x630(%rbp), %xmm0
movsd %xmm0, -0x610(%rbp)
jmp 0x3f00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x91(%rbp), %rdi
callq 0x32c0
jmp 0x467b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0x32c0
jmp 0x466f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x4663
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3e1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3e0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3e03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x31b0
leaq -0x310(%rbp), %rdi
callq 0x31b0
leaq -0x330(%rbp), %rdi
callq 0x31b0
leaq -0x350(%rbp), %rdi
callq 0x31b0
jmp 0x4663
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x4657
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3eb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3ea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x3e9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x570(%rbp), %rdi
callq 0x31b0
leaq -0x590(%rbp), %rdi
callq 0x31b0
leaq -0x5b0(%rbp), %rdi
callq 0x31b0
leaq -0x5d0(%rbp), %rdi
callq 0x31b0
jmp 0x4657
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x464b
movq -0x6e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x3260
jmp 0x464b
movq 0x100a9(%rip), %rsi     # 0x13fb0
leaq -0x2d0(%rbp), %rdi
callq 0x32b0
movq %rax, -0x700(%rbp)
jmp 0x3f1c
movq -0x700(%rbp), %rdi
leaq 0xa19e(%rip), %rsi      # 0xe0c8
callq 0x3280
movq %rax, -0x708(%rbp)
jmp 0x3f38
movq -0x708(%rbp), %rdi
movq 0x1006a(%rip), %rsi     # 0x13fb0
callq 0x32b0
movq %rax, -0x710(%rbp)
jmp 0x3f54
movq -0x710(%rbp), %rdi
movq 0x1004e(%rip), %rsi     # 0x13fb0
callq 0x32b0
movq %rax, -0x718(%rbp)
jmp 0x3f70
movq -0x718(%rbp), %rdi
movq -0x628(%rbp), %rsi
addq $0x18, %rsi
callq 0x3240
movq %rax, -0x720(%rbp)
jmp 0x3f90
movq -0x720(%rbp), %rdi
movq 0x10012(%rip), %rsi     # 0x13fb0
callq 0x32b0
jmp 0x3fa5
leaq 0xa163(%rip), %rsi      # 0xe10f
leaq -0x2d0(%rbp), %rdi
callq 0x3280
movq %rax, -0x728(%rbp)
jmp 0x3fc1
movq -0x728(%rbp), %rdi
movsd -0x630(%rbp), %xmm0
callq 0x3460
movq %rax, -0x730(%rbp)
jmp 0x3fde
movq -0x730(%rbp), %rdi
leaq 0xa12d(%rip), %rsi      # 0xe119
callq 0x3280
movq %rax, -0x738(%rbp)
jmp 0x3ffa
movq -0x738(%rbp), %rdi
leaq 0xa114(%rip), %rsi      # 0xe11c
callq 0x3280
movq %rax, -0x740(%rbp)
jmp 0x4016
movq -0x740(%rbp), %rdi
movq -0x628(%rbp), %rax
movsd 0x38(%rax), %xmm0
callq 0x3460
movq %rax, -0x748(%rbp)
jmp 0x4037
movq -0x748(%rbp), %rdi
leaq 0xa0d5(%rip), %rsi      # 0xe11a
callq 0x3280
movq %rax, -0x750(%rbp)
jmp 0x4053
movq -0x750(%rbp), %rdi
leaq 0xa0cd(%rip), %rsi      # 0xe12e
callq 0x3280
movq %rax, -0x758(%rbp)
jmp 0x406f
movq -0x758(%rbp), %rdi
movq -0x628(%rbp), %rax
movsd 0x40(%rax), %xmm0
callq 0x3460
movq %rax, -0x760(%rbp)
jmp 0x4090
movq -0x760(%rbp), %rdi
leaq 0xa07c(%rip), %rsi      # 0xe11a
callq 0x3280
movq %rax, -0x768(%rbp)
jmp 0x40ac
movq -0x768(%rbp), %rdi
leaq 0xa085(%rip), %rsi      # 0xe13f
callq 0x3280
movq %rax, -0x770(%rbp)
jmp 0x40c8
movq -0x770(%rbp), %rdi
movq -0x628(%rbp), %rax
movl 0x48(%rax), %esi
callq 0x3300
movq %rax, -0x778(%rbp)
jmp 0x40e7
movq -0x778(%rbp), %rdi
movq 0xfebb(%rip), %rsi      # 0x13fb0
callq 0x32b0
jmp 0x40fc
movq -0x628(%rbp), %rsi
addq $0x18, %rsi
leaq -0x550(%rbp), %rdi
callq 0x3240
movq %rax, -0x780(%rbp)
jmp 0x411c
movq -0x780(%rbp), %rdi
leaq 0xa165(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x788(%rbp)
jmp 0x4138
movq -0x788(%rbp), %rdi
movsd -0x630(%rbp), %xmm0
callq 0x3460
movq %rax, -0x790(%rbp)
jmp 0x4155
movq -0x790(%rbp), %rdi
leaq 0xa12c(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x798(%rbp)
jmp 0x4171
movq -0x798(%rbp), %rdi
movq -0x628(%rbp), %rax
movsd 0x40(%rax), %xmm0
callq 0x3460
movq %rax, -0x7a0(%rbp)
jmp 0x4192
movq -0x7a0(%rbp), %rdi
movq 0xfe10(%rip), %rsi      # 0x13fb0
callq 0x32b0
jmp 0x41a7
movq -0x6c8(%rbp), %rax
movq -0x6d0(%rbp), %rcx
movq -0x6e0(%rbp), %rdx
movsd -0x630(%rbp), %xmm0
movslq -0x5e4(%rbp), %rsi
movsd %xmm0, (%rdx,%rsi,8)
movq -0x628(%rbp), %rdx
movsd 0x40(%rdx), %xmm0
movslq -0x5e4(%rbp), %rdx
movsd %xmm0, (%rcx,%rdx,8)
movq -0x628(%rbp), %rcx
movl 0x48(%rcx), %edx
movslq -0x5e4(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x5e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5e4(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x5cc0
jmp 0x3c25
xorps %xmm0, %xmm0
movsd %xmm0, -0x638(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x640(%rbp)
movl $0x0, -0x644(%rbp)
movl $0x0, -0x648(%rbp)
movq -0x6a8(%rbp), %rdi
movl -0x648(%rbp), %eax
movq %rax, -0x7a8(%rbp)
addq $0x60, %rdi
callq 0x5b10
movq %rax, %rcx
movq -0x7a8(%rbp), %rax
cmpq %rcx, %rax
jae 0x42e6
movq -0x6c8(%rbp), %rax
movq -0x6d0(%rbp), %rcx
movq -0x6e0(%rbp), %rdx
movl -0x648(%rbp), %esi
movsd (%rdx,%rsi,8), %xmm0
addsd -0x638(%rbp), %xmm0
movsd %xmm0, -0x638(%rbp)
movl -0x648(%rbp), %edx
movsd (%rcx,%rdx,8), %xmm0
addsd -0x640(%rbp), %xmm0
movsd %xmm0, -0x640(%rbp)
movl -0x648(%rbp), %ecx
movl (%rax,%rcx,4), %eax
addl -0x644(%rbp), %eax
movl %eax, -0x644(%rbp)
movl -0x648(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x648(%rbp)
jmp 0x4246
movq -0x6a8(%rbp), %rdi
movsd -0x638(%rbp), %xmm0
movsd %xmm0, -0x7e8(%rbp)
addq $0x60, %rdi
movq %rdi, -0x7b8(%rbp)
callq 0x5b10
movsd -0x7e8(%rbp), %xmm0
movq -0x7b8(%rbp), %rdi
movq %rax, %xmm1
movaps 0x9d08(%rip), %xmm2     # 0xe030
movaps %xmm2, -0x7e0(%rbp)
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x9d05(%rip), %xmm2     # 0xe040
movaps %xmm2, -0x7d0(%rbp)
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x650(%rbp)
movsd -0x640(%rbp), %xmm0
movsd %xmm0, -0x7c0(%rbp)
callq 0x5b10
movaps -0x7e0(%rbp), %xmm3
movaps -0x7d0(%rbp), %xmm2
movsd -0x7c0(%rbp), %xmm0
movq -0x7b8(%rbp), %rdi
movq %rax, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x658(%rbp)
movl -0x644(%rbp), %eax
movq %rax, -0x7b0(%rbp)
callq 0x5b10
movq %rax, %rcx
movq -0x7b0(%rbp), %rax
xorl %edx, %edx
divq %rcx
cvtsi2sd %rax, %xmm0
movsd %xmm0, -0x660(%rbp)
leaq -0x5d8(%rbp), %rdi
callq 0x5bd0
movq (%rax), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x680(%rbp), %rdi
callq *%rax
jmp 0x4401
leaq -0x550(%rbp), %rdi
leaq -0x680(%rbp), %rsi
callq 0x3240
movq %rax, -0x7f0(%rbp)
jmp 0x441d
movq -0x7f0(%rbp), %rdi
leaq 0x9e64(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x7f8(%rbp)
jmp 0x4439
movq -0x7f8(%rbp), %rdi
movsd -0x650(%rbp), %xmm0
callq 0x3460
movq %rax, -0x800(%rbp)
jmp 0x4456
movq -0x800(%rbp), %rdi
leaq 0x9e2b(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x808(%rbp)
jmp 0x4472
movq -0x808(%rbp), %rdi
movsd -0x610(%rbp), %xmm0
callq 0x3460
movq %rax, -0x810(%rbp)
jmp 0x448f
movq -0x810(%rbp), %rdi
leaq 0x9df2(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x818(%rbp)
jmp 0x44ab
movq -0x818(%rbp), %rdi
movsd -0x658(%rbp), %xmm0
callq 0x3460
movq %rax, -0x820(%rbp)
jmp 0x44c8
movq -0x820(%rbp), %rdi
leaq 0x9db9(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x828(%rbp)
jmp 0x44e4
movq -0x828(%rbp), %rdi
movsd -0x640(%rbp), %xmm0
callq 0x3460
movq %rax, -0x830(%rbp)
jmp 0x4501
movq -0x830(%rbp), %rdi
leaq 0x9d80(%rip), %rsi      # 0xe28f
callq 0x3280
movq %rax, -0x838(%rbp)
jmp 0x451d
movq -0x838(%rbp), %rdi
movsd -0x660(%rbp), %xmm0
callq 0x3460
jmp 0x4533
leaq -0x680(%rbp), %rdi
callq 0x31b0
movq 0xfa6a(%rip), %rsi      # 0x13fb0
leaq -0x550(%rbp), %rdi
callq 0x32b0
jmp 0x4554
leaq -0x5d8(%rbp), %rdi
callq 0x5bd0
movq (%rax), %rax
movq %rax, -0x840(%rbp)
cmpq $0x0, %rax
je 0x45ba
movq -0x840(%rbp), %rdi
leaq 0xf6da(%rip), %rsi      # 0x13c58
leaq 0xf73b(%rip), %rdx      # 0x13cc0
xorl %eax, %eax
movl %eax, %ecx
callq 0x32d0
movq %rax, -0x848(%rbp)
jmp 0x45c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x680(%rbp), %rdi
callq 0x31b0
jmp 0x464b
xorl %eax, %eax
movq %rax, -0x848(%rbp)
jmp 0x45c5
movq -0x848(%rbp), %rax
movq %rax, -0x688(%rbp)
cmpq $0x0, -0x688(%rbp)
je 0x45df
jmp 0x45df
movq -0x5f0(%rbp), %rax
movq %rax, %rsp
leaq -0x5d8(%rbp), %rdi
callq 0x5ce0
jmp 0x3b04
leaq -0x550(%rbp), %rdi
callq 0x3350
jmp 0x4608
leaq -0x2d0(%rbp), %rdi
callq 0x3350
jmp 0x4616
leaq -0x550(%rbp), %rdi
callq 0x3370
leaq -0x2d0(%rbp), %rdi
callq 0x3370
leaq -0xc8(%rbp), %rdi
callq 0x31b0
leaq -0x90(%rbp), %rdi
callq 0x31b0
movq %rbp, %rsp
popq %rbp
retq
leaq -0x550(%rbp), %rdi
callq 0x3370
leaq -0x2d0(%rbp), %rdi
callq 0x3370
leaq -0xc8(%rbp), %rdi
callq 0x31b0
leaq -0x90(%rbp), %rdi
callq 0x31b0
movq -0xa0(%rbp), %rdi
callq 0x3420
nopw (%rax,%rax)