// File: millanek[P]evo/evo_FstAgainstAll.cpp
// Function: FstGlobalMain(int, char**)
int FstGlobalMain(int argc, char** argv) {
    parseFstGlobaloptions(argc, argv);
    string line; // for reading the input files
    
    // Load up the annotation file
    Annotation wgAnnotation; std::ifstream* annotFile;
    if (!opt::annotFile.empty()) {
        annotFile = new std::ifstream(opt::annotFile.c_str());
        Annotation Annot(annotFile, false); // Does not use transcripts annotated as 5' or 3' partial
        wgAnnotation = Annot;
    }
    
    std::istream* vcfFile = createReader(opt::vcfFile.c_str());
    std::ifstream* setsFile = new std::ifstream(opt::setsFile.c_str());
    
    std::map<string, std::vector<string>> popToIDsMap;
    std::map<string, string> IDsToPopMap;
    std::map<string, std::vector<size_t>> popToPosMap;
    std::map<size_t, string> posToPopMap;
    
    // Get the sample sets
    while (getline(*setsFile, line)) {
        // std::cerr << line << std::endl;
        std::vector<string> ID_Pop = split(line, '\t');
        popToIDsMap[ID_Pop[1]].push_back(ID_Pop[0]);
        IDsToPopMap[ID_Pop[0]] = ID_Pop[1];
        //std::cerr << ID_Species[1] << "\t" << ID_Species[0] << std::endl;
    }
    // Get a vector of set names (usually populations/species)
    std::vector<string> populations; std::vector<string> populationsToUse;
    for(std::map<string,std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
        populations.push_back(it->first);
        if (it->first != "Outgroup" && it->first != "xxx") {
            populationsToUse.push_back(it->first);
        }
        // std::cerr << it->first << std::endl;
    } std::cerr << "There are " << populations.size() << " populations " << std::endl;
    
    std::ofstream* outFile = new std::ofstream(opt::runName + "_FstGlobal_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
    *outFile << "chr\tpos1\tpos2\tFstGlobal"; for (int i = 0; i < populationsToUse.size(); i++) { *outFile << "\t" << populationsToUse[i];}
    *outFile << std::endl;
    std::ofstream* outFileFixedWindow = new std::ofstream(opt::runName + "_FstGlobal_FW" + numToString(opt::fixedWindowSize) + ".txt");
    *outFileFixedWindow << "chr\tpos1\tpos2\tnSNPs"; for (int i = 0; i < populationsToUse.size(); i++) { *outFile << "\t" << populationsToUse[i];}
    *outFileFixedWindow << std::endl;
    
    std::ofstream* outFileGenes; if (!opt::annotFile.empty()) {
        outFileGenes = new std::ofstream(opt::runName + "_FstGlobalGenes_" + opt::runName + "_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
        // *outFileGenes << "gene\t" << "numSNPsExons\t" << "numSNPsWithIntrons\t" << "numSNPsWith3kbUpstr\t" << threePops[0] << "_exons\t" << threePops[1] << "_exons\t" << threePops[2] << "_exons\t" << threePops[0] << "_wIntrons\t" << threePops[1] << "_wIntrons\t" << threePops[2] << "_wIntrons\t" << threePops[0] << "_w3kbUpstr\t" << threePops[1] << "_w3kbUpstr\t" << threePops[2] << "_w3kbUpstr" << std::endl;
        *outFileGenes << "gene\t" << "numSNPsExons\tnumSNPsIntrons\tnumSNPs3kbPromoter";
        for (int i = 0; i < populationsToUse.size(); i++) {
            *outFileGenes << "\t" << populationsToUse[i] << "_exons";
            *outFileGenes << "\t" << populationsToUse[i] << "_wIntrons";
            *outFileGenes << "\t" << populationsToUse[i] << "_promoter";
        } *outFileGenes << std::endl;
    }
    
    // And need to prepare the vectors to hold the Fst values and the coordinates:
    std::deque<double> initFst(opt::windowSize,0.0); // deque to initialise per-site PBS values
    std::vector<std::deque<double>> FstNumDeques(populationsToUse.size()+1,initFst); // Fst numerators for each population, and one for the global Fst
    std::vector<std::deque<double>> FstDenomDeques(populationsToUse.size()+1,initFst); // Fst denominators for each population, and one for the global Fst
    std::deque<string> coordDeque(opt::windowSize,"0");
    // Fixed window size vectors:

    std::vector<std::vector<double>> FstFixedWindowNums(populationsToUse.size());
    std::vector<std::vector<double>> FstFixedWindowDenoms(populationsToUse.size());
    int currentWindowStart = 0; int currentWindowEnd = currentWindowStart + opt::fixedWindowSize;
    
    // if (!opt::annotFile.empty()) {
    std::vector<std::vector<double>> initFstVectors(3);
    std::vector<std::vector<std::vector<double>>> FstGeneNumVectors(populationsToUse.size(),initFstVectors); // For the nine PBS columns in the _PBSGenes_ files
    std::vector<std::vector<std::vector<double>>> FstGeneDenumVectors(populationsToUse.size(),initFstVectors); // For the nine PBS columns in the _PBSGenes_ files
    std::string currentGene = ""; std::string previousGene = "";
    //}
    //std::deque<std::vector<double>> regionPBSnums; regionPBSnums.assign(opt::windowSize,init);
    //std::deque<std::vector<double>> regionPBSdenoms; regionPBSdenoms.assign(opt::windowSize,init);
    //std::vector<double> allPs(populations.size(),0.0);
    int totalVariantNumber = 0; int usedVariantNumber = 0; double coordDouble = 0;
    //std::vector<int> usedVars(PBStrios.size(),0); // Will count the number of used variants for each trio
    std::vector<string> sampleNames; std::vector<std::string> fields;
    int reportProgressEvery = 10000; string chr; string coord;
    std::clock_t start; std::clock_t startGettingCounts; std::clock_t startCalculation;
    double durationOverall; double durationGettingCounts; double durationCalculation;
    
    while (getline(*vcfFile, line)) {
        line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); // Deal with any left over \r from files prepared on Windows
        if (line[0] == '#' && line[1] == '#')
            continue;
        else if (line[0] == '#' && line[1] == 'C') {
            fields = split(line, '\t');
            std::vector<std::string> sampleNames(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            // print_vector_stream(sampleNames, std::cerr);
            for (std::vector<std::string>::size_type i = 0; i != sampleNames.size(); i++) {
                posToPopMap[i] = IDsToPopMap[sampleNames[i]];
            }
            // Iterate over all the keys in the map to find the samples in the VCF:
            // Give an error if no sample is found for a species:
            for(std::map<string, std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
                string sp =  it->first;
                //std::cerr << "sp " << sp << std::endl;
                std::vector<string> IDs = it->second;
                std::vector<size_t> spPos = locateSet(sampleNames, IDs);
                if (spPos.empty()) {
                    std::cerr << "Did not find any samples in the VCF for \"" << sp << "\"" << std::endl;
                    assert(!spPos.empty());
                }
                popToPosMap[sp] = spPos;
            }
            start = std::clock();
            //  std::cerr << " " << std::endl;
            //  std::cerr << "Outgroup at pos: "; print_vector_stream(speciesToPosMap["Outgroup"], std::cerr);
            //  std::cerr << "telvit at pos: "; print_vector_stream(speciesToPosMap["telvit"], std::cerr);
        } else {
            totalVariantNumber++;
            if (totalVariantNumber % reportProgressEvery == 0) {
                durationOverall = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
                std::cerr << "Processed " << totalVariantNumber << " variants in " << durationOverall << "secs" << std::endl;
                std::cerr << "GettingCounts " << durationGettingCounts << " calculation " << durationCalculation << "secs" << std::endl;
            }
            fields = split(line, '\t'); chr = fields[0]; coord = fields[1]; coordDouble = stringToDouble(coord);
            std::vector<std::string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            //std::vector<std::string> info = split(fields[7], ';');
            // Only consider biallelic SNPs
            string refAllele = fields[3]; string altAllele = fields[4];
            if (refAllele.length() > 1 || altAllele.length() > 1 || altAllele == "*") {
                refAllele.clear(); refAllele.shrink_to_fit(); altAllele.clear(); altAllele.shrink_to_fit();
                genotypes.clear(); genotypes.shrink_to_fit(); continue;
            }
            usedVariantNumber++;
            startGettingCounts = std::clock();
            GeneralSetCountsWithComplements* c = new GeneralSetCountsWithComplements(popToPosMap, (int)genotypes.size());
            c->getSetVariantCountsSimple(genotypes, posToPopMap);
            c->getComplementCounts(populationsToUse);
            genotypes.clear(); genotypes.shrink_to_fit();
            durationGettingCounts = ( std::clock() - startGettingCounts ) / (double) CLOCKS_PER_SEC;
            
            // if this site is not variable in the populations of interest then just move to the next one
            if (c->setAAFs.at(populationsToUse[0]) == 0 && c->setAAFsComplement.at(populationsToUse[0]) == 0) {
                delete c; continue;
            }
            if (c->setAAFs.at(populationsToUse[0]) == 1 && c->setAAFsComplement.at(populationsToUse[0]) == 1) {
                delete c; continue;
            }
            // std::cerr << "Here:" << totalVariantNumber << std::endl;
            
            startCalculation = std::clock();
            
            
            // for (std::vector<std::string>::size_type i = 0; i != populations.size(); i++) {
            //     allPs[i] = c->setAAFs.at(populations[i]);
            // }
            // durationFirstLoop = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            
            // find if we are in a gene:
            std::vector<string> SNPgeneDetails = wgAnnotation.getSNPgeneDetails(chr, atoi(coord.c_str()));
            if (SNPgeneDetails[0] != "") {
                currentGene = SNPgeneDetails[0];
                if (previousGene == "") previousGene = currentGene;
            }
            
            // Check if we are still in the same physical window...
            if (coordDouble > currentWindowEnd || coordDouble < currentWindowStart) {
                int wSNP1 = (int)FstFixedWindowNums[0].size();
                *outFileFixedWindow << chr << "\t" << currentWindowStart << "\t" << currentWindowEnd << "\t" << wSNP1;
                for (int i = 0; i != populationsToUse.size(); i++) {
                    double FstFW = 0; if (wSNP1 > 0) { FstFW = vector_average(FstFixedWindowNums[i])/vector_average(FstFixedWindowDenoms[i]); }
                    *outFileFixedWindow << "\t" << FstFW;
                    FstFixedWindowNums[i].clear(); FstFixedWindowDenoms[i].clear();
                } *outFileFixedWindow << std::endl;
                if (coordDouble > currentWindowEnd) {
                    currentWindowStart = currentWindowStart + opt::fixedWindowSize; currentWindowEnd = currentWindowEnd + opt::fixedWindowSize;
                } else if (coordDouble < currentWindowStart) {
                    currentWindowStart = 0; currentWindowEnd = 0 + opt::fixedWindowSize;
                }
            }
            
            coordDeque.push_back(coord); coordDeque.pop_front();
            if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                *outFile << chr << "\t" << coordDeque[0] << "\t" << coord << "\t" << "N";
            }
            
            // Now calculate the Fst stats:
            double p1; double p2; int n1; int n2; double Fst;
            for (int i = 0; i != populationsToUse.size(); i++) {
                p1 = c->setAAFs.at(populationsToUse[i]); //assert(p_S1 == pS1test);
                p2 = c->setAAFsComplement.at(populationsToUse[i]);
                n1 = c->setAlleleCounts.at(populationsToUse[i]);
                n2 = c->setAlleleCountsComplement.at(populationsToUse[i]);
                // std::cerr << p1 << "\t" << p2 << "\t" << n1 << "\t" << n2 << std::endl;
                
                // Maximum missing data in the population is 20%, otherwise Fst is set to 0
                double FstNum; double FstDenom;
                if (n1 >= c->setSizes[i]*0.8) {
                    FstNum = calculateFstNumerator(p1, p2, n1, n2);
                    FstNumDeques[i].push_back(FstNum); FstNumDeques[i].pop_front();
                    FstDenom = calculateFstDenominator(p1, p2);
                    FstDenomDeques[i].push_back(FstDenom); FstDenomDeques[i].pop_front();
                } else {
                    FstNum = 0; FstNumDeques[i].push_back(FstNum); FstNumDeques[i].pop_front();
                    FstDenom = 0; FstDenomDeques[i].push_back(FstDenom); FstDenomDeques[i].pop_front();
                }
                    
               /* if (calculateFstNumerator(p1, p2, n1, n2)/calculateFstDenominator(p1, p2) > 1) {
                    std::cerr << chr << "\t" << coord << "\t" << p1 << "\t" << p2 << "\t" << n1 << "\t" << n2 << std::endl;
                } */
                
                if (!opt::annotFile.empty()) { if (SNPgeneDetails[0] != "") {
                    if (SNPgeneDetails[1] == "exon") {
                        FstGeneNumVectors[i][0].push_back(FstNum); FstGeneDenumVectors[i][0].push_back(FstDenom);
                    } else if (SNPgeneDetails[1] == "intron") {
                        FstGeneNumVectors[i][1].push_back(FstNum); FstGeneDenumVectors[i][1].push_back(FstDenom);
                    } else if (SNPgeneDetails[1] == "promoter") {
                        FstGeneNumVectors[i][2].push_back(FstNum); FstGeneDenumVectors[i][2].push_back(FstDenom);
                    }
                }}
                if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                    // std::cerr << PBSresults[i][0][0] << std::endl;
                    Fst = vector_average(FstNumDeques[i])/vector_average(FstDenomDeques[i]); if (Fst < 0 || vector_average(FstDenomDeques[i]) == 0) { Fst = 0; }
                    *outFile << "\t" << Fst;
                }
                // }
            }
            if (!opt::annotFile.empty()) { if (previousGene != "" && currentGene != previousGene) {
                int nExonSNPs = (int)FstGeneNumVectors[0][0].size(); int nIntronSNPs = (int)FstGeneNumVectors[0][1].size(); int nPromoterSNPs = (int)FstGeneNumVectors[0][2].size();
                *outFileGenes << previousGene << "\t" << nExonSNPs << "\t" << nIntronSNPs << "\t" << nPromoterSNPs;
                double FstExons; double FstIntrons; double FstPromoters;
                for (int i = 0; i < populationsToUse.size(); i++) {
                    if (nExonSNPs > 0) { FstExons = vector_average(FstGeneNumVectors[i][0])/vector_average(FstGeneDenumVectors[i][0]); } else { FstExons = 0; }
                    if (nIntronSNPs > 0) { FstIntrons = vector_average(FstGeneNumVectors[i][1])/vector_average(FstGeneDenumVectors[i][1]); } else { FstIntrons = 0; }
                    if (nPromoterSNPs > 0) { FstPromoters = vector_average(FstGeneNumVectors[i][2])/vector_average(FstGeneDenumVectors[i][2]); } else { FstPromoters = 0; }
                    if (FstExons < 0) FstExons = 0; if (FstIntrons < 0) FstIntrons = 0; if (FstPromoters < 0) FstPromoters = 0;
                    *outFileGenes << "\t" << FstExons << "\t" << FstIntrons << "\t" << FstPromoters;
                    FstGeneNumVectors[i][0].clear(); FstGeneNumVectors[i][1].clear(); FstGeneNumVectors[i][2].clear();
                    FstGeneDenumVectors[i][0].clear(); FstGeneDenumVectors[i][1].clear(); FstGeneDenumVectors[i][2].clear();
                } *outFileGenes << std::endl;
                previousGene = currentGene;
            }}
            if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                *outFile << std::endl;
            }
            durationCalculation = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            delete c;
        }
    }
    
    return 0;
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1180, %rsp           # imm = 0x1180
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x107d50
leaq -0x30(%rbp), %rdi
callq 0xa820
leaq -0xf0(%rbp), %rdi
callq 0xe2ed0
jmp 0x104315
leaq 0x97084(%rip), %rdi     # 0x19b3a0
callq 0xaa70
testb $0x1, %al
jne 0x10441f
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0xc90(%rbp)
jmp 0x10433c
leaq 0x9705d(%rip), %rdi     # 0x19b3a0
callq 0xa220
movq -0xc90(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x10435e
movq -0xc90(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
xorl %edx, %edx
callq 0x58390
jmp 0x104383
leaq -0xf0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xe2f20
jmp 0x104398
leaq -0x1c8(%rbp), %rdi
callq 0x588b0
jmp 0x10441f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107d34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107d28
movq -0xc90(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x107d28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x588b0
jmp 0x107d28
leaq 0x96f1a(%rip), %rdi     # 0x19b340
callq 0xa220
movq %rax, -0xca0(%rbp)
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0xc98(%rbp)
callq 0xab60
movq -0xca0(%rbp), %rsi
movq -0xc98(%rbp), %rdx
leaq -0x1f0(%rbp), %rdi
callq 0x2d6c0
jmp 0x104461
leaq -0x1f0(%rbp), %rdi
movl $0x8, %esi
callq 0x80e30
movq %rax, -0xca8(%rbp)
jmp 0x10447b
leaq -0x1f0(%rbp), %rdi
callq 0xac88
leaq -0x1f1(%rbp), %rdi
callq 0xa640
movq -0xca8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0xcb0(%rbp)
jmp 0x1044b4
leaq 0x96ea5(%rip), %rdi     # 0x19b360
callq 0xa220
movq -0xcb0(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x1044d6
movq -0xcb0(%rbp), %rax
movq %rax, -0x200(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x58920
leaq -0x260(%rbp), %rdi
callq 0x584b0
leaq -0x290(%rbp), %rdi
callq 0x951b0
leaq -0x2c0(%rbp), %rdi
callq 0x951d0
movq -0x200(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0xcb8(%rbp)
jmp 0x10452d
movq -0xcb8(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0xcb9(%rbp)
jmp 0x10454b
movb -0xcb9(%rbp), %al
testb $0x1, %al
jne 0x10455a
jmp 0x1046cd
leaq -0x2d8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x104571
leaq -0x2d8(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x230(%rbp), %rdi
callq 0x6b400
movq %rax, -0xcc8(%rbp)
jmp 0x10459a
xorl %eax, %eax
movl %eax, %esi
leaq -0x2d8(%rbp), %rdi
callq 0x3d940
movq -0xcc8(%rbp), %rdi
movq %rax, %rsi
callq 0x48dc0
jmp 0x1045bb
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0xce0(%rbp)
movl $0x1, %esi
callq 0x3d940
movq -0xce0(%rbp), %rdi
movq %rax, -0xcd8(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x260(%rbp), %rdi
callq 0x584d0
movq %rax, -0xcd0(%rbp)
jmp 0x104602
movq -0xcd8(%rbp), %rsi
movq -0xcd0(%rbp), %rdi
callq 0xa060
jmp 0x104617
leaq -0x2d8(%rbp), %rdi
callq 0x3dfa0
jmp 0x104514
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x10465a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0xac88
leaq -0x1f1(%rbp), %rdi
callq 0xa640
jmp 0x107d28
movq -0xcb0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x107d28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107cf8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x3dfa0
jmp 0x107cf8
leaq -0x2f0(%rbp), %rdi
callq 0x48da0
leaq -0x308(%rbp), %rdi
callq 0x48da0
leaq -0x230(%rbp), %rdi
callq 0x6c3d0
movq %rax, -0x310(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x6c430
movq %rax, -0x318(%rbp)
leaq -0x310(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x6c400
testb $0x1, %al
jne 0x104727
jmp 0x1047eb
leaq -0x310(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x48dc0
jmp 0x104744
leaq -0x310(%rbp), %rdi
callq 0x6c460
movq %rax, %rdi
leaq 0x36b00(%rip), %rsi     # 0x13b25a
callq 0x50eb0
movb %al, -0xce1(%rbp)
jmp 0x104767
movb -0xce1(%rbp), %al
testb $0x1, %al
jne 0x104773
jmp 0x1047d8
leaq -0x310(%rbp), %rdi
callq 0x6c460
movq %rax, %rdi
leaq 0x37fe7(%rip), %rsi     # 0x13c770
callq 0x50eb0
movb %al, -0xce2(%rbp)
jmp 0x104796
movb -0xce2(%rbp), %al
testb $0x1, %al
jne 0x1047a2
jmp 0x1047d8
leaq -0x310(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
leaq -0x308(%rbp), %rdi
callq 0x48dc0
jmp 0x1047bf
jmp 0x1047d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107ce0
jmp 0x1047da
leaq -0x310(%rbp), %rdi
callq 0x71fc0
jmp 0x1046f8
movq 0x947fe(%rip), %rdi     # 0x198ff0
leaq 0x4a204(%rip), %rsi     # 0x14e9fd
callq 0xa5c0
movq %rax, -0xcf0(%rbp)
jmp 0x104807
leaq -0x2f0(%rbp), %rdi
callq 0x3ffd0
movq -0xcf0(%rbp), %rdi
movq %rax, %rsi
callq 0xa140
movq %rax, -0xcf8(%rbp)
jmp 0x10482b
movq -0xcf8(%rbp), %rdi
leaq 0x37f3b(%rip), %rsi     # 0x13c774
callq 0xa5c0
movq %rax, -0xd00(%rbp)
jmp 0x104847
movq -0xd00(%rbp), %rdi
movq 0x94733(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x10485c
movl $0x200, %edi            # imm = 0x200
callq 0xa5d0
movq %rax, -0xd08(%rbp)
jmp 0x10486f
movb $0x1, -0x401(%rbp)
leaq 0x96b43(%rip), %rsi     # 0x19b3c0
leaq 0x47ac3(%rip), %rdx     # 0x14c347
leaq -0x3c0(%rbp), %rdi
callq 0x3da80
jmp 0x104892
movl 0x95160(%rip), %esi     # 0x1999f8
leaq -0x3e0(%rbp), %rdi
callq 0x3e190
jmp 0x1048a6
leaq -0x3a0(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
leaq -0x3e0(%rbp), %rdx
callq 0x3e070
jmp 0x1048c2
leaq 0x3b4c7(%rip), %rdx     # 0x13fd90
leaq -0x380(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
callq 0x3e020
jmp 0x1048de
movl 0x95118(%rip), %esi     # 0x1999fc
leaq -0x400(%rbp), %rdi
callq 0x3e190
jmp 0x1048f2
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
leaq -0x400(%rbp), %rdx
callq 0x3e070
jmp 0x10490e
leaq 0x44c92(%rip), %rdx     # 0x1495a7
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x3e020
jmp 0x10492a
movq -0xd08(%rbp), %rdi
leaq -0x340(%rbp), %rsi
movl $0x10, %edx
callq 0xac00
jmp 0x104944
movb $0x0, -0x401(%rbp)
leaq -0x340(%rbp), %rdi
callq 0xac88
leaq -0x360(%rbp), %rdi
callq 0xac88
leaq -0x400(%rbp), %rdi
callq 0xac88
leaq -0x380(%rbp), %rdi
callq 0xac88
leaq -0x3a0(%rbp), %rdi
callq 0xac88
leaq -0x3e0(%rbp), %rdi
callq 0xac88
leaq -0x3c0(%rbp), %rdi
callq 0xac88
movq -0xd08(%rbp), %rax
movq %rax, -0x320(%rbp)
movq -0x320(%rbp), %rdi
leaq 0x47998(%rip), %rsi     # 0x14c353
callq 0xa5c0
jmp 0x1049c2
movl $0x0, -0x408(%rbp)
movslq -0x408(%rbp), %rax
movq %rax, -0xd10(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xd10(%rbp), %rax
cmpq %rcx, %rax
jae 0x104b68
movq -0x320(%rbp), %rdi
leaq 0x314d7(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xd18(%rbp)
jmp 0x104a15
movslq -0x408(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xd18(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
jmp 0x104a39
jmp 0x104a3b
movl -0x408(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x408(%rbp)
jmp 0x1049cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104b0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104aff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x340(%rbp), %rdi
callq 0xac88
leaq -0x360(%rbp), %rdi
callq 0xac88
leaq -0x400(%rbp), %rdi
callq 0xac88
leaq -0x380(%rbp), %rdi
callq 0xac88
leaq -0x3a0(%rbp), %rdi
callq 0xac88
leaq -0x3e0(%rbp), %rdi
callq 0xac88
leaq -0x3c0(%rbp), %rdi
callq 0xac88
testb $0x1, -0x401(%rbp)
jne 0x104b52
jmp 0x104b63
movq -0xd08(%rbp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0xa5e0
jmp 0x107ce0
movq -0x320(%rbp), %rdi
movq 0x94412(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x104b7d
movl $0x200, %edi            # imm = 0x200
callq 0xa5d0
movq %rax, -0xd20(%rbp)
jmp 0x104b90
movb $0x1, -0x491(%rbp)
leaq 0x96822(%rip), %rsi     # 0x19b3c0
leaq 0x477c6(%rip), %rdx     # 0x14c36b
leaq -0x470(%rbp), %rdi
callq 0x3da80
jmp 0x104bb3
movl 0x94e47(%rip), %esi     # 0x199a00
leaq -0x490(%rbp), %rdi
callq 0x3e190
jmp 0x104bc7
leaq -0x450(%rbp), %rdi
leaq -0x470(%rbp), %rsi
leaq -0x490(%rbp), %rdx
callq 0x3e070
jmp 0x104be3
leaq 0x449bd(%rip), %rdx     # 0x1495a7
leaq -0x430(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x3e020
jmp 0x104bff
movq -0xd20(%rbp), %rdi
leaq -0x430(%rbp), %rsi
movl $0x10, %edx
callq 0xac00
jmp 0x104c19
movb $0x0, -0x491(%rbp)
leaq -0x430(%rbp), %rdi
callq 0xac88
leaq -0x450(%rbp), %rdi
callq 0xac88
leaq -0x490(%rbp), %rdi
callq 0xac88
leaq -0x470(%rbp), %rdi
callq 0xac88
movq -0xd20(%rbp), %rax
movq %rax, -0x410(%rbp)
movq -0x410(%rbp), %rdi
leaq 0x4770d(%rip), %rsi     # 0x14c379
callq 0xa5c0
jmp 0x104c73
movl $0x0, -0x498(%rbp)
movslq -0x498(%rbp), %rax
movq %rax, -0xd28(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xd28(%rbp), %rax
cmpq %rcx, %rax
jae 0x104db0
movq -0x320(%rbp), %rdi
leaq 0x31226(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xd30(%rbp)
jmp 0x104cc6
movslq -0x498(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xd30(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
jmp 0x104cea
jmp 0x104cec
movl -0x498(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x498(%rbp)
jmp 0x104c7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104d8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104d83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104d77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x104d6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x430(%rbp), %rdi
callq 0xac88
leaq -0x450(%rbp), %rdi
callq 0xac88
leaq -0x490(%rbp), %rdi
callq 0xac88
leaq -0x470(%rbp), %rdi
callq 0xac88
testb $0x1, -0x491(%rbp)
jne 0x104d9a
jmp 0x104dab
movq -0xd20(%rbp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0xa5e0
jmp 0x107ce0
movq -0x410(%rbp), %rdi
movq 0x941ca(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x104dc5
leaq 0x965d4(%rip), %rdi     # 0x19b3a0
callq 0xaa70
testb $0x1, %al
jne 0x105285
movl $0x200, %edi            # imm = 0x200
callq 0xa5d0
movq %rax, -0xd38(%rbp)
jmp 0x104dec
movb $0x1, -0x5c1(%rbp)
leaq 0x965c6(%rip), %rsi     # 0x19b3c0
leaq 0x4758c(%rip), %rdx     # 0x14c38d
leaq -0x580(%rbp), %rdi
callq 0x3da80
jmp 0x104e0f
leaq 0x965aa(%rip), %rdx     # 0x19b3c0
leaq -0x560(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x3da30
jmp 0x104e2b
leaq 0x3af5e(%rip), %rdx     # 0x13fd90
leaq -0x540(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x3e020
jmp 0x104e47
movl 0x94bab(%rip), %esi     # 0x1999f8
leaq -0x5a0(%rbp), %rdi
callq 0x3e190
jmp 0x104e5b
leaq -0x520(%rbp), %rdi
leaq -0x540(%rbp), %rsi
leaq -0x5a0(%rbp), %rdx
callq 0x3e070
jmp 0x104e77
leaq 0x3af12(%rip), %rdx     # 0x13fd90
leaq -0x500(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x3e020
jmp 0x104e93
movl 0x94b63(%rip), %esi     # 0x1999fc
leaq -0x5c0(%rbp), %rdi
callq 0x3e190
jmp 0x104ea7
leaq -0x4e0(%rbp), %rdi
leaq -0x500(%rbp), %rsi
leaq -0x5c0(%rbp), %rdx
callq 0x3e070
jmp 0x104ec3
leaq 0x446dd(%rip), %rdx     # 0x1495a7
leaq -0x4c0(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0x3e020
jmp 0x104edf
movq -0xd38(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
movl $0x10, %edx
callq 0xac00
jmp 0x104ef9
movq -0xd38(%rbp), %rax
movb $0x0, -0x5c1(%rbp)
movq %rax, -0x4a0(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0xac88
leaq -0x4e0(%rbp), %rdi
callq 0xac88
leaq -0x5c0(%rbp), %rdi
callq 0xac88
leaq -0x500(%rbp), %rdi
callq 0xac88
leaq -0x520(%rbp), %rdi
callq 0xac88
leaq -0x5a0(%rbp), %rdi
callq 0xac88
leaq -0x540(%rbp), %rdi
callq 0xac88
leaq -0x560(%rbp), %rdi
callq 0xac88
leaq -0x580(%rbp), %rdi
callq 0xac88
movq -0x4a0(%rbp), %rdi
leaq 0x46c71(%rip), %rsi     # 0x14bbf9
callq 0xa5c0
movq %rax, -0xd40(%rbp)
jmp 0x104f96
movq -0xd40(%rbp), %rdi
leaq 0x473fa(%rip), %rsi     # 0x14c39e
callq 0xa5c0
jmp 0x104fab
movl $0x0, -0x5c8(%rbp)
movslq -0x5c8(%rbp), %rax
movq %rax, -0xd48(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xd48(%rbp), %rax
cmpq %rcx, %rax
jae 0x10526e
movq -0x4a0(%rbp), %rdi
leaq 0x30eee(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xd50(%rbp)
jmp 0x104ffe
movslq -0x5c8(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xd50(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0xd58(%rbp)
jmp 0x105029
movq -0xd58(%rbp), %rdi
leaq 0x47396(%rip), %rsi     # 0x14c3cd
callq 0xa5c0
jmp 0x10503e
movq -0x4a0(%rbp), %rdi
leaq 0x30e92(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xd60(%rbp)
jmp 0x10505a
movslq -0x5c8(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xd60(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0xd68(%rbp)
jmp 0x105085
movq -0xd68(%rbp), %rdi
leaq 0x47341(%rip), %rsi     # 0x14c3d4
callq 0xa5c0
jmp 0x10509a
movq -0x4a0(%rbp), %rdi
leaq 0x30e36(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xd70(%rbp)
jmp 0x1050b6
movslq -0x5c8(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xd70(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0xd78(%rbp)
jmp 0x1050e1
movq -0xd78(%rbp), %rdi
leaq 0x46b5e(%rip), %rsi     # 0x14bc4d
callq 0xa5c0
jmp 0x1050f6
jmp 0x1050f8
movl -0x5c8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c8(%rbp)
jmp 0x104fb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x10524d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105241
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105235
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105229
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x10521d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105211
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105205
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x1051f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x1051ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0xac88
leaq -0x4e0(%rbp), %rdi
callq 0xac88
leaq -0x5c0(%rbp), %rdi
callq 0xac88
leaq -0x500(%rbp), %rdi
callq 0xac88
leaq -0x520(%rbp), %rdi
callq 0xac88
leaq -0x5a0(%rbp), %rdi
callq 0xac88
leaq -0x540(%rbp), %rdi
callq 0xac88
leaq -0x560(%rbp), %rdi
callq 0xac88
leaq -0x580(%rbp), %rdi
callq 0xac88
testb $0x1, -0x5c1(%rbp)
jne 0x105258
jmp 0x105269
movq -0xd38(%rbp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0xa5e0
jmp 0x107ce0
movq -0x4a0(%rbp), %rdi
movq 0x93d0c(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x105283
jmp 0x105285
movslq 0x9476c(%rip), %rax     # 0x1999f8
movq %rax, -0xd88(%rbp)
movq $0x0, -0x620(%rbp)
leaq -0x621(%rbp), %rdi
movq %rdi, -0xd80(%rbp)
callq 0x484d0
movq -0xd88(%rbp), %rsi
movq -0xd80(%rbp), %rcx
leaq -0x618(%rbp), %rdi
leaq -0x620(%rbp), %rdx
callq 0xffb00
jmp 0x1052d4
leaq -0x621(%rbp), %rdi
callq 0x4a130
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
incq %rax
movq %rax, -0xd98(%rbp)
leaq -0x641(%rbp), %rdi
movq %rdi, -0xd90(%rbp)
callq 0xffb80
movq -0xd98(%rbp), %rsi
movq -0xd90(%rbp), %rcx
leaq -0x640(%rbp), %rdi
leaq -0x618(%rbp), %rdx
callq 0xffba0
jmp 0x10532c
leaq -0x641(%rbp), %rdi
callq 0xffc20
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
incq %rax
movq %rax, -0xda8(%rbp)
leaq -0x661(%rbp), %rdi
movq %rdi, -0xda0(%rbp)
callq 0xffb80
movq -0xda8(%rbp), %rsi
movq -0xda0(%rbp), %rcx
leaq -0x660(%rbp), %rdi
leaq -0x618(%rbp), %rdx
callq 0xffba0
jmp 0x105384
leaq -0x661(%rbp), %rdi
callq 0xffc20
movslq 0x94661(%rip), %rax     # 0x1999f8
movq %rax, -0xdb8(%rbp)
leaq -0x6d9(%rbp), %rdi
movq %rdi, -0xdb0(%rbp)
callq 0xab60
movq -0xdb0(%rbp), %rdx
leaq 0x2e32e(%rip), %rsi     # 0x1336ed
leaq -0x6d8(%rbp), %rdi
callq 0x2d6c0
jmp 0x1053cd
leaq -0x6da(%rbp), %rdi
movq %rdi, -0xdc0(%rbp)
callq 0x48e80
movq -0xdb8(%rbp), %rsi
movq -0xdc0(%rbp), %rcx
leaq -0x6b8(%rbp), %rdi
leaq -0x6d8(%rbp), %rdx
callq 0x1081b0
jmp 0x105403
leaq -0x6da(%rbp), %rdi
callq 0x40090
leaq -0x6d8(%rbp), %rdi
callq 0xac88
leaq -0x6d9(%rbp), %rdi
callq 0xa640
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0xdd0(%rbp)
leaq -0x6f9(%rbp), %rdi
movq %rdi, -0xdc8(%rbp)
callq 0x667a0
movq -0xdd0(%rbp), %rsi
movq -0xdc8(%rbp), %rdx
leaq -0x6f8(%rbp), %rdi
callq 0xf56f0
jmp 0x105469
leaq -0x6f9(%rbp), %rdi
callq 0x669e0
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0xde0(%rbp)
leaq -0x719(%rbp), %rdi
movq %rdi, -0xdd8(%rbp)
callq 0x667a0
movq -0xde0(%rbp), %rsi
movq -0xdd8(%rbp), %rdx
leaq -0x718(%rbp), %rdi
callq 0xf56f0
jmp 0x1054b7
leaq -0x719(%rbp), %rdi
callq 0x669e0
movl $0x0, -0x720(%rbp)
movl -0x720(%rbp), %eax
movl 0x94527(%rip), %ecx     # 0x199a00
addl %ecx, %eax
movl %eax, -0x724(%rbp)
leaq -0x741(%rbp), %rdi
movq %rdi, -0xde8(%rbp)
callq 0x667a0
movq -0xde8(%rbp), %rdx
leaq -0x740(%rbp), %rdi
movl $0x3, %esi
callq 0xf56f0
jmp 0x10550e
leaq -0x741(%rbp), %rdi
callq 0x669e0
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0xdf8(%rbp)
leaq -0x761(%rbp), %rdi
movq %rdi, -0xdf0(%rbp)
callq 0xf5880
movq -0xdf8(%rbp), %rsi
movq -0xdf0(%rbp), %rcx
leaq -0x760(%rbp), %rdi
leaq -0x740(%rbp), %rdx
callq 0xf6350
jmp 0x105563
leaq -0x761(%rbp), %rdi
callq 0xf6790
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0xe08(%rbp)
leaq -0x781(%rbp), %rdi
movq %rdi, -0xe00(%rbp)
callq 0xf5880
movq -0xe08(%rbp), %rsi
movq -0xe00(%rbp), %rcx
leaq -0x780(%rbp), %rdi
leaq -0x740(%rbp), %rdx
callq 0xf6350
jmp 0x1055b8
leaq -0x781(%rbp), %rdi
callq 0xf6790
leaq -0x7a9(%rbp), %rdi
movq %rdi, -0xe10(%rbp)
callq 0xab60
movq -0xe10(%rbp), %rdx
leaq 0x308fa(%rip), %rsi     # 0x135edf
leaq -0x7a8(%rbp), %rdi
callq 0x2d6c0
jmp 0x1055f3
leaq -0x7a9(%rbp), %rdi
callq 0xa640
leaq -0x7d1(%rbp), %rdi
movq %rdi, -0xe18(%rbp)
callq 0xab60
movq -0xe18(%rbp), %rdx
leaq 0x308bf(%rip), %rsi     # 0x135edf
leaq -0x7d0(%rbp), %rdi
callq 0x2d6c0
jmp 0x10562e
leaq -0x7d1(%rbp), %rdi
callq 0xa640
movl $0x0, -0x7d8(%rbp)
movl $0x0, -0x7dc(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x7e8(%rbp)
leaq -0x800(%rbp), %rdi
callq 0x48da0
leaq -0x818(%rbp), %rdi
callq 0x48da0
movl $0x2710, -0x81c(%rbp)   # imm = 0x2710
leaq -0x840(%rbp), %rdi
callq 0xa820
leaq -0x860(%rbp), %rdi
callq 0xa820
movq -0x1d0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0xe20(%rbp)
jmp 0x1056ac
movq -0xe20(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0xe21(%rbp)
jmp 0x1056ca
movb -0xe21(%rbp), %al
testb $0x1, %al
jne 0x1056d9
jmp 0x107b06
leaq -0x30(%rbp), %rdi
movq %rdi, -0xe38(%rbp)
callq 0xa4f0
movq -0xe38(%rbp), %rdi
movq %rax, -0x8a8(%rbp)
callq 0xa330
movq %rax, -0x8b0(%rbp)
movb $0xd, -0x8b1(%rbp)
movq -0x8a8(%rbp), %rdi
movq -0x8b0(%rbp), %rsi
leaq -0x8b1(%rbp), %rdx
callq 0xc6570
movq %rax, -0xe30(%rbp)
jmp 0x10572d
movq -0xe30(%rbp), %rax
movq %rax, -0x8a0(%rbp)
leaq -0x898(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0xc65c0
leaq -0x30(%rbp), %rdi
movq %rdi, -0xe48(%rbp)
callq 0xa330
movq %rax, -0x8c8(%rbp)
leaq -0x8c0(%rbp), %rdi
leaq -0x8c8(%rbp), %rsi
callq 0xc65c0
movq -0xe48(%rbp), %rdi
movq -0x898(%rbp), %rsi
movq -0x8c0(%rbp), %rdx
callq 0xa120
movq %rax, -0xe40(%rbp)
jmp 0x10579b
movq -0xe40(%rbp), %rax
movq %rax, -0x8d0(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
callq 0xac60
movq %rax, -0xe50(%rbp)
jmp 0x1057bf
movq -0xe50(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x1059c5
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0xac60
movq %rax, -0xe58(%rbp)
jmp 0x1057e9
movq -0xe58(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x1059c5
jmp 0x105693
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x621(%rbp), %rdi
callq 0x4a130
jmp 0x107ce0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x641(%rbp), %rdi
callq 0xffc20
jmp 0x107cd4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x661(%rbp), %rdi
callq 0xffc20
jmp 0x107cc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x1058a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x6da(%rbp), %rdi
callq 0x40090
leaq -0x6d8(%rbp), %rdi
callq 0xac88
leaq -0x6d9(%rbp), %rdi
callq 0xa640
jmp 0x107cbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x6f9(%rbp), %rdi
callq 0x669e0
jmp 0x107cb0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x719(%rbp), %rdi
callq 0x669e0
jmp 0x107ca4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x741(%rbp), %rdi
callq 0x669e0
jmp 0x107c98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x761(%rbp), %rdi
callq 0xf6790
jmp 0x107c8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x781(%rbp), %rdi
callq 0xf6790
jmp 0x107c80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x7a9(%rbp), %rdi
callq 0xa640
jmp 0x107c74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x7d1(%rbp), %rdi
callq 0xa640
jmp 0x107c68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107c2c
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
callq 0xac60
movq %rax, -0xe60(%rbp)
jmp 0x1059db
movq -0xe60(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x105e10
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0xac60
movq %rax, -0xe68(%rbp)
jmp 0x105a05
movq -0xe68(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x43, %eax
jne 0x105e10
leaq -0x8e8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x105a2f
leaq -0x818(%rbp), %rdi
movq %rdi, -0xe78(%rbp)
leaq -0x8e8(%rbp), %rsi
movq %rsi, -0xe80(%rbp)
callq 0x50c30
movq -0xe80(%rbp), %rdi
callq 0x3dfa0
movq -0xe78(%rbp), %rdi
callq 0x44030
movq %rax, -0x910(%rbp)
leaq -0x910(%rbp), %rdi
movl $0x9, %esi
callq 0x44390
movq -0xe78(%rbp), %rdi
movq %rax, -0x908(%rbp)
callq 0x44060
movq %rax, -0x918(%rbp)
leaq -0x919(%rbp), %rdi
movq %rdi, -0xe70(%rbp)
callq 0x48e80
movq -0xe70(%rbp), %rcx
movq -0x908(%rbp), %rsi
movq -0x918(%rbp), %rdx
leaq -0x900(%rbp), %rdi
callq 0xc6600
jmp 0x105ad0
leaq -0x919(%rbp), %rdi
callq 0x40090
movq $0x0, -0x928(%rbp)
movq -0x928(%rbp), %rax
movq %rax, -0xe88(%rbp)
leaq -0x900(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xe88(%rbp), %rax
cmpq %rcx, %rax
je 0x105bc3
movq -0x928(%rbp), %rsi
leaq -0x900(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x260(%rbp), %rdi
callq 0x584d0
movq %rax, -0xe90(%rbp)
jmp 0x105b3f
leaq -0x2c0(%rbp), %rdi
leaq -0x928(%rbp), %rsi
callq 0x95260
movq %rax, -0xe98(%rbp)
jmp 0x105b5b
movq -0xe90(%rbp), %rsi
movq -0xe98(%rbp), %rdi
callq 0xa060
jmp 0x105b70
jmp 0x105b72
movq -0x928(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x928(%rbp)
jmp 0x105ae7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x919(%rbp), %rdi
callq 0x40090
jmp 0x107c2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105dff
leaq -0x230(%rbp), %rdi
callq 0x6c3d0
movq %rax, -0x930(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x6c430
movq %rax, -0x938(%rbp)
leaq -0x930(%rbp), %rdi
leaq -0x938(%rbp), %rsi
callq 0x6c400
testb $0x1, %al
jne 0x105c05
jmp 0x105de2
leaq -0x930(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
leaq -0x958(%rbp), %rdi
callq 0xa250
jmp 0x105c22
leaq -0x930(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
addq $0x20, %rsi
leaq -0x970(%rbp), %rdi
callq 0x3fee0
jmp 0x105c43
leaq -0x988(%rbp), %rdi
leaq -0x900(%rbp), %rsi
leaq -0x970(%rbp), %rdx
callq 0x81250
jmp 0x105c5f
leaq -0x988(%rbp), %rdi
callq 0x95340
testb $0x1, %al
jne 0x105c74
jmp 0x105d62
movq 0x93375(%rip), %rdi     # 0x198ff0
leaq 0x36c59(%rip), %rsi     # 0x13c8db
callq 0xa5c0
movq %rax, -0xea0(%rbp)
jmp 0x105c90
movq -0xea0(%rbp), %rdi
leaq -0x958(%rbp), %rsi
callq 0xa520
movq %rax, -0xea8(%rbp)
jmp 0x105cac
movq -0xea8(%rbp), %rdi
leaq 0x35755(%rip), %rsi     # 0x13b40f
callq 0xa5c0
movq %rax, -0xeb0(%rbp)
jmp 0x105cc8
movq -0xeb0(%rbp), %rdi
movq 0x932b2(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x105cdd
leaq -0x988(%rbp), %rdi
callq 0x95340
xorb $-0x1, %al
testb $0x1, %al
jne 0x105cf1
jmp 0x105cf3
jmp 0x105d60
leaq 0x36c0b(%rip), %rdi     # 0x13c905
leaq 0x466dd(%rip), %rsi     # 0x14c3de
movl $0xa5, %edx
leaq 0x466e7(%rip), %rcx     # 0x14c3f4
callq 0xa390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105dd4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x105dc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x988(%rbp), %rdi
callq 0x50d40
jmp 0x105dc8
jmp 0x105d62
leaq -0x290(%rbp), %rdi
leaq -0x958(%rbp), %rsi
callq 0x95380
movq %rax, -0xeb8(%rbp)
jmp 0x105d7e
movq -0xeb8(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0x95460
jmp 0x105d93
leaq -0x988(%rbp), %rdi
callq 0x50d40
leaq -0x970(%rbp), %rdi
callq 0x3dfa0
leaq -0x958(%rbp), %rdi
callq 0xac88
leaq -0x930(%rbp), %rdi
callq 0x71fc0
jmp 0x105bd6
leaq -0x970(%rbp), %rdi
callq 0x3dfa0
leaq -0x958(%rbp), %rdi
callq 0xac88
jmp 0x105dff
callq 0xa3a0
movq %rax, -0x868(%rbp)
leaq -0x900(%rbp), %rdi
callq 0x3dfa0
jmp 0x107aff
leaq -0x900(%rbp), %rdi
callq 0x3dfa0
jmp 0x107c2c
movl -0x7d8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7d8(%rbp)
movl -0x7d8(%rbp), %eax
cltd
idivl -0x81c(%rbp)
cmpl $0x0, %edx
jne 0x105fa3
callq 0xa3a0
movq -0x868(%rbp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x335d7(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x880(%rbp)
movq 0x9318c(%rip), %rdi     # 0x198ff0
leaq 0x36adb(%rip), %rsi     # 0x13c946
callq 0xa5c0
movq %rax, -0xec0(%rbp)
jmp 0x105e79
movq -0xec0(%rbp), %rdi
movl -0x7d8(%rbp), %esi
callq 0xab20
movq %rax, -0xec8(%rbp)
jmp 0x105e94
movq -0xec8(%rbp), %rdi
leaq 0x39ce0(%rip), %rsi     # 0x13fb82
callq 0xa5c0
movq %rax, -0xed0(%rbp)
jmp 0x105eb0
movq -0xed0(%rbp), %rdi
movsd -0x880(%rbp), %xmm0
callq 0xabd0
movq %rax, -0xed8(%rbp)
jmp 0x105ecd
movq -0xed8(%rbp), %rdi
leaq 0x3cc0d(%rip), %rsi     # 0x142ae8
callq 0xa5c0
movq %rax, -0xee0(%rbp)
jmp 0x105ee9
movq -0xee0(%rbp), %rdi
movq 0x93091(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x105efe
movq 0x930eb(%rip), %rdi     # 0x198ff0
leaq 0x43f34(%rip), %rsi     # 0x149e40
callq 0xa5c0
movq %rax, -0xee8(%rbp)
jmp 0x105f1a
movq -0xee8(%rbp), %rdi
movsd -0x888(%rbp), %xmm0
callq 0xabd0
movq %rax, -0xef0(%rbp)
jmp 0x105f37
movq -0xef0(%rbp), %rdi
leaq 0x43f0a(%rip), %rsi     # 0x149e4f
callq 0xa5c0
movq %rax, -0xef8(%rbp)
jmp 0x105f53
movq -0xef8(%rbp), %rdi
movsd -0x890(%rbp), %xmm0
callq 0xabd0
movq %rax, -0xf00(%rbp)
jmp 0x105f70
movq -0xf00(%rbp), %rdi
leaq 0x3cb6a(%rip), %rsi     # 0x142ae8
callq 0xa5c0
movq %rax, -0xf08(%rbp)
jmp 0x105f8c
movq -0xf08(%rbp), %rdi
movq 0x92fee(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x105fa1
jmp 0x105fa3
leaq -0x9a0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x105fba
leaq -0x818(%rbp), %rdi
movq %rdi, -0xf10(%rbp)
leaq -0x9a0(%rbp), %rsi
movq %rsi, -0xf18(%rbp)
callq 0x50c30
movq -0xf18(%rbp), %rdi
callq 0x3dfa0
movq -0xf10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x840(%rbp), %rdi
callq 0xa060
jmp 0x106008
leaq -0x818(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x860(%rbp), %rdi
callq 0xa060
jmp 0x10602a
leaq -0x9c0(%rbp), %rdi
leaq -0x860(%rbp), %rsi
callq 0xa250
jmp 0x10603f
leaq -0x9c0(%rbp), %rdi
callq 0x7bab0
movsd %xmm0, -0xf20(%rbp)
jmp 0x106055
movsd -0xf20(%rbp), %xmm0
movsd %xmm0, -0x7e8(%rbp)
leaq -0x9c0(%rbp), %rdi
callq 0xac88
leaq -0x818(%rbp), %rdi
movq %rdi, -0xf30(%rbp)
callq 0x44030
movq %rax, -0x9e8(%rbp)
leaq -0x9e8(%rbp), %rdi
movl $0x9, %esi
callq 0x44390
movq -0xf30(%rbp), %rdi
movq %rax, -0x9e0(%rbp)
callq 0x44060
movq %rax, -0x9f0(%rbp)
leaq -0x9f1(%rbp), %rdi
movq %rdi, -0xf28(%rbp)
callq 0x48e80
movq -0xf28(%rbp), %rcx
movq -0x9e0(%rbp), %rsi
movq -0x9f0(%rbp), %rdx
leaq -0x9d8(%rbp), %rdi
callq 0xc6600
jmp 0x1060ec
leaq -0x9f1(%rbp), %rdi
callq 0x40090
leaq -0x818(%rbp), %rdi
movl $0x3, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0xa18(%rbp), %rdi
callq 0xa250
jmp 0x10611a
leaq -0x818(%rbp), %rdi
movl $0x4, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0xa38(%rbp), %rdi
callq 0xa250
jmp 0x10613c
leaq -0xa18(%rbp), %rdi
callq 0xa930
cmpq $0x1, %rax
ja 0x10618a
leaq -0xa38(%rbp), %rdi
callq 0xa930
cmpq $0x1, %rax
ja 0x10618a
leaq 0x4807b(%rip), %rsi     # 0x14e1e2
leaq -0xa38(%rbp), %rdi
callq 0x2d770
movb %al, -0xf31(%rbp)
jmp 0x10617b
movb -0xf31(%rbp), %al
testb $0x1, %al
jne 0x10618a
jmp 0x106283
leaq -0xa18(%rbp), %rdi
movq %rdi, -0xf50(%rbp)
callq 0xa7b0
movq -0xf50(%rbp), %rdi
callq 0xac30
leaq -0xa38(%rbp), %rdi
movq %rdi, -0xf48(%rbp)
callq 0xa7b0
movq -0xf48(%rbp), %rdi
callq 0xac30
leaq -0x9d8(%rbp), %rdi
movq %rdi, -0xf40(%rbp)
callq 0x591f0
movq -0xf40(%rbp), %rdi
callq 0xc6680
jmp 0x1061e9
movl $0x10, -0xa3c(%rbp)
jmp 0x107a93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x9c0(%rbp), %rdi
callq 0xac88
jmp 0x107c2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x9f1(%rbp), %rdi
callq 0x40090
jmp 0x107c2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107aee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107ae2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107ad6
movl -0x7dc(%rbp), %eax
incl %eax
movl %eax, -0x7dc(%rbp)
callq 0xa3a0
movq %rax, -0x870(%rbp)
movl $0x2d0, %edi            # imm = 0x2D0
callq 0xa5d0
movq %rax, -0xf58(%rbp)
jmp 0x1062b0
leaq -0x9d8(%rbp), %rdi
callq 0x3ffd0
movq -0xf58(%rbp), %rdi
movl %eax, %edx
leaq -0x290(%rbp), %rsi
callq 0x108230
jmp 0x1062d3
movq -0xf58(%rbp), %rax
movq %rax, -0xa48(%rbp)
movq -0xa48(%rbp), %rdi
leaq -0x9d8(%rbp), %rsi
leaq -0x2c0(%rbp), %rdx
callq 0x7b530
jmp 0x1062fd
movq -0xa48(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x7b660
jmp 0x106312
leaq -0x9d8(%rbp), %rdi
movq %rdi, -0xf60(%rbp)
callq 0x591f0
movq -0xf60(%rbp), %rdi
callq 0xc6680
jmp 0x106333
callq 0xa3a0
movq -0x870(%rbp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x330d9(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x888(%rbp)
movq -0xa48(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0xf70(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xf70(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xf68(%rbp)
jmp 0x106397
movq -0xf68(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x10646f
jp 0x10646f
movq -0xa48(%rbp), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xf80(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xf80(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xf78(%rbp)
jmp 0x1063f1
movq -0xf78(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x10646f
jp 0x10646f
movq -0xa48(%rbp), %rax
movq %rax, -0xf88(%rbp)
cmpq $0x0, %rax
je 0x106438
movq -0xf88(%rbp), %rdi
callq 0x1083d0
movq -0xf88(%rbp), %rdi
movl $0x2d0, %esi            # imm = 0x2D0
callq 0xa5e0
movl $0x10, -0xa3c(%rbp)
jmp 0x107a93
movq -0xf58(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
movl $0x2d0, %esi            # imm = 0x2D0
callq 0xa5e0
jmp 0x107ad6
movq -0xa48(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0xf98(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xf98(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xf90(%rbp)
jmp 0x1064ab
movq -0xf90(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x2bdfa(%rip), %xmm1    # 0x1322b8
ucomisd %xmm1, %xmm0
jne 0x106565
jp 0x106565
movq -0xa48(%rbp), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xfa8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0xfa8(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xfa0(%rbp)
jmp 0x10650a
movq -0xfa0(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x2bd9b(%rip), %xmm1    # 0x1322b8
ucomisd %xmm1, %xmm0
jne 0x106565
jp 0x106565
movq -0xa48(%rbp), %rax
movq %rax, -0xfb0(%rbp)
cmpq $0x0, %rax
je 0x106556
movq -0xfb0(%rbp), %rdi
callq 0x1083d0
movq -0xfb0(%rbp), %rdi
movl $0x2d0, %esi            # imm = 0x2D0
callq 0xa5e0
movl $0x10, -0xa3c(%rbp)
jmp 0x107a93
callq 0xa3a0
movq %rax, -0x878(%rbp)
leaq -0x860(%rbp), %rdi
callq 0xa220
movq %rax, %rdi
callq 0xa970
movl %eax, %ecx
leaq -0xa60(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
leaq -0x840(%rbp), %rdx
callq 0x8f3e0
jmp 0x1065a3
xorl %eax, %eax
movl %eax, %esi
leaq -0xa60(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq 0x2f922(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0xfb1(%rbp)
jmp 0x1065ca
movb -0xfb1(%rbp), %al
testb $0x1, %al
jne 0x1065d6
jmp 0x10664e
xorl %eax, %eax
movl %eax, %esi
leaq -0xa60(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x7a8(%rbp), %rdi
callq 0xa060
jmp 0x1065f7
leaq 0x2f8e1(%rip), %rsi     # 0x135edf
leaq -0x7d0(%rbp), %rdi
callq 0x2d770
movb %al, -0xfb2(%rbp)
jmp 0x106612
movb -0xfb2(%rbp), %al
testb $0x1, %al
jne 0x10661e
jmp 0x10664c
leaq -0x7d0(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0xa060
jmp 0x106633
jmp 0x10664c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107aca
jmp 0x10664e
movsd -0x7e8(%rbp), %xmm0
cvtsi2sdl -0x724(%rbp), %xmm1
ucomisd %xmm1, %xmm0
ja 0x10667e
movsd -0x7e8(%rbp), %xmm1
cvtsi2sdl -0x720(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x106992
xorl %eax, %eax
movl %eax, %esi
leaq -0x6f8(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
callq 0x3ebf0
movl %eax, -0xa64(%rbp)
movq -0x410(%rbp), %rdi
leaq -0x840(%rbp), %rsi
callq 0xa520
movq %rax, -0xfc0(%rbp)
jmp 0x1066b8
movq -0xfc0(%rbp), %rdi
leaq 0x2f818(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xfc8(%rbp)
jmp 0x1066d4
movq -0xfc8(%rbp), %rdi
movl -0x720(%rbp), %esi
callq 0xab20
movq %rax, -0xfd0(%rbp)
jmp 0x1066ef
movq -0xfd0(%rbp), %rdi
leaq 0x2f7e1(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xfd8(%rbp)
jmp 0x10670b
movq -0xfd8(%rbp), %rdi
movl -0x724(%rbp), %esi
callq 0xab20
movq %rax, -0xfe0(%rbp)
jmp 0x106726
movq -0xfe0(%rbp), %rdi
leaq 0x2f7aa(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0xfe8(%rbp)
jmp 0x106742
movq -0xfe8(%rbp), %rdi
movl -0xa64(%rbp), %esi
callq 0xab20
jmp 0x106756
movl $0x0, -0xa68(%rbp)
movslq -0xa68(%rbp), %rax
movq %rax, -0xff0(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xff0(%rbp), %rax
cmpq %rcx, %rax
je 0x10690e
xorps %xmm0, %xmm0
movsd %xmm0, -0xa70(%rbp)
cmpl $0x0, -0xa64(%rbp)
jle 0x106892
movslq -0xa68(%rbp), %rsi
leaq -0x6f8(%rbp), %rdi
callq 0x651e0
movq %rax, %rsi
leaq -0xa88(%rbp), %rdi
callq 0x53120
jmp 0x1067c9
leaq -0xa88(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0xff8(%rbp)
jmp 0x1067df
movslq -0xa68(%rbp), %rsi
leaq -0x718(%rbp), %rdi
callq 0x651e0
movq %rax, %rsi
leaq -0xaa0(%rbp), %rdi
callq 0x53120
jmp 0x106803
leaq -0xaa0(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1000(%rbp)
jmp 0x106819
movsd -0x1000(%rbp), %xmm1
movsd -0xff8(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0xa70(%rbp)
leaq -0xaa0(%rbp), %rdi
callq 0x3ecb0
leaq -0xa88(%rbp), %rdi
callq 0x3ecb0
jmp 0x106892
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x106881
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xaa0(%rbp), %rdi
callq 0x3ecb0
leaq -0xa88(%rbp), %rdi
callq 0x3ecb0
jmp 0x107aca
movq -0x410(%rbp), %rdi
leaq 0x2f63e(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1008(%rbp)
jmp 0x1068ae
movq -0x1008(%rbp), %rdi
movsd -0xa70(%rbp), %xmm0
callq 0xabd0
jmp 0x1068c4
movslq -0xa68(%rbp), %rsi
leaq -0x6f8(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xa68(%rbp), %rsi
leaq -0x718(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movl -0xa68(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa68(%rbp)
jmp 0x106760
movq -0x410(%rbp), %rdi
movq 0x9266c(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x106923
movsd -0x7e8(%rbp), %xmm0
cvtsi2sdl -0x724(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x10695f
movl -0x720(%rbp), %eax
addl 0x930bb(%rip), %eax     # 0x199a00
movl %eax, -0x720(%rbp)
movl -0x724(%rbp), %eax
addl 0x930a9(%rip), %eax     # 0x199a00
movl %eax, -0x724(%rbp)
jmp 0x106990
movsd -0x7e8(%rbp), %xmm1
cvtsi2sdl -0x720(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x10698e
movl $0x0, -0x720(%rbp)
movl 0x9307b(%rip), %eax     # 0x199a00
addl $0x0, %eax
movl %eax, -0x724(%rbp)
jmp 0x106990
jmp 0x106992
leaq -0x6b8(%rbp), %rdi
leaq -0x860(%rbp), %rsi
callq 0x108420
jmp 0x1069a7
leaq -0x6b8(%rbp), %rdi
callq 0x108480
movl -0x7dc(%rbp), %eax
cmpl 0x93039(%rip), %eax     # 0x1999f8
jg 0x1069d3
movl 0x93031(%rip), %eax     # 0x1999f8
cmpl 0x9302f(%rip), %eax     # 0x1999fc
jne 0x106ab4
movl -0x7dc(%rbp), %eax
cltd
idivl 0x9301c(%rip)           # 0x1999fc
cmpl $0x0, %edx
jne 0x106ab4
movq -0x320(%rbp), %rdi
leaq -0x840(%rbp), %rsi
callq 0xa520
movq %rax, -0x1010(%rbp)
jmp 0x106a05
movq -0x1010(%rbp), %rdi
leaq 0x2f4cb(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1018(%rbp)
jmp 0x106a21
xorl %eax, %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x1084f0
movq -0x1018(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x1020(%rbp)
jmp 0x106a49
movq -0x1020(%rbp), %rdi
leaq 0x2f487(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1028(%rbp)
jmp 0x106a65
movq -0x1028(%rbp), %rdi
leaq -0x860(%rbp), %rsi
callq 0xa520
movq %rax, -0x1030(%rbp)
jmp 0x106a81
movq -0x1030(%rbp), %rdi
leaq 0x2f44f(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1038(%rbp)
jmp 0x106a9d
movq -0x1038(%rbp), %rdi
leaq 0x42af6(%rip), %rsi     # 0x1495a1
callq 0xa5c0
jmp 0x106ab2
jmp 0x106ab4
movl $0x0, -0xac4(%rbp)
movslq -0xac4(%rbp), %rax
movq %rax, -0x1040(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x1040(%rbp), %rax
cmpq %rcx, %rax
je 0x107289
movq -0xa48(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0x1050(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0x1050(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0x1048(%rbp)
jmp 0x106b2a
movq -0x1048(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xaa8(%rbp)
movq -0xa48(%rbp), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0x1060(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0x1060(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0x1058(%rbp)
jmp 0x106b7c
movq -0x1058(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xab0(%rbp)
movq -0xa48(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x1070(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0x1070(%rbp), %rdi
movq %rax, %rsi
callq 0x83190
movq %rax, -0x1068(%rbp)
jmp 0x106bcc
movq -0x1068(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xab4(%rbp)
movq -0xa48(%rbp), %rax
addq $0x2a0, %rax            # imm = 0x2A0
movq %rax, -0x1080(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x308(%rbp), %rdi
callq 0x3d940
movq -0x1080(%rbp), %rdi
movq %rax, %rsi
callq 0x83190
movq %rax, -0x1078(%rbp)
jmp 0x106c1a
movq -0x1078(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xab8(%rbp)
cvtsi2sdl -0xab4(%rbp), %xmm0
movsd %xmm0, -0x1088(%rbp)
movq -0xa48(%rbp), %rdi
addq $0xc8, %rdi
movslq -0xac4(%rbp), %rsi
callq 0xad930
movsd -0x1088(%rbp), %xmm0
movq (%rax), %xmm1
movaps 0x274fa(%rip), %xmm2    # 0x12e160
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x274fe(%rip), %xmm2    # 0x12e170
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0x38d47(%rip), %xmm2    # 0x13f9d0
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x106d84
movsd -0xaa8(%rbp), %xmm0
movsd -0xab0(%rbp), %xmm1
movl -0xab4(%rbp), %edi
movl -0xab8(%rbp), %esi
callq 0xe32e0
movsd %xmm0, -0x1090(%rbp)
jmp 0x106cc2
movsd -0x1090(%rbp), %xmm0
movsd %xmm0, -0xad0(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x640(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
leaq -0xad0(%rbp), %rsi
callq 0x100380
jmp 0x106cf6
movslq -0xac4(%rbp), %rsi
leaq -0x640(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
callq 0x100410
movsd -0xaa8(%rbp), %xmm0
movsd -0xab0(%rbp), %xmm1
callq 0xe3390
movsd %xmm0, -0x1098(%rbp)
jmp 0x106d30
movsd -0x1098(%rbp), %xmm0
movsd %xmm0, -0xad8(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
leaq -0xad8(%rbp), %rsi
callq 0x100380
jmp 0x106d64
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
callq 0x100410
jmp 0x106e18
movq $0x0, -0xad0(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x640(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
leaq -0xad0(%rbp), %rsi
callq 0x100380
jmp 0x106db3
movslq -0xac4(%rbp), %rsi
leaq -0x640(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
callq 0x100410
movq $0x0, -0xad8(%rbp)
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
leaq -0xad8(%rbp), %rsi
callq 0x100380
jmp 0x106dfd
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rdi
callq 0x100410
leaq 0x94581(%rip), %rdi     # 0x19b3a0
callq 0xaa70
testb $0x1, %al
jne 0x107036
xorl %eax, %eax
movl %eax, %esi
leaq -0xa60(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq 0x2f099(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0x1099(%rbp)
jmp 0x106e53
movb -0x1099(%rbp), %al
testb $0x1, %al
jne 0x106e62
jmp 0x107034
leaq -0xa60(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rdi
leaq 0x352dc(%rip), %rsi     # 0x13c159
callq 0x2d770
movb %al, -0x109a(%rbp)
jmp 0x106e8a
movb -0x109a(%rbp), %al
testb $0x1, %al
jne 0x106e96
jmp 0x106efb
movslq -0xac4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad0(%rbp), %rsi
callq 0xb77b0
jmp 0x106ec6
movslq -0xac4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad8(%rbp), %rsi
callq 0xb77b0
jmp 0x106ef6
jmp 0x107032
leaq -0xa60(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rdi
leaq 0x2dc05(%rip), %rsi     # 0x134b1b
callq 0x2d770
movb %al, -0x109b(%rbp)
jmp 0x106f23
movb -0x109b(%rbp), %al
testb $0x1, %al
jne 0x106f2f
jmp 0x106f96
movslq -0xac4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad0(%rbp), %rsi
callq 0xb77b0
jmp 0x106f60
movslq -0xac4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad8(%rbp), %rsi
callq 0xb77b0
jmp 0x106f91
jmp 0x107030
leaq -0xa60(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rdi
leaq 0x44c9d(%rip), %rsi     # 0x14bc4e
callq 0x2d770
movb %al, -0x109c(%rbp)
jmp 0x106fbe
movb -0x109c(%rbp), %al
testb $0x1, %al
jne 0x106fca
jmp 0x10702e
movslq -0xac4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad0(%rbp), %rsi
callq 0xb77b0
jmp 0x106ffb
movslq -0xac4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rdi
leaq -0xad8(%rbp), %rsi
callq 0xb77b0
jmp 0x10702c
jmp 0x10702e
jmp 0x107030
jmp 0x107032
jmp 0x107034
jmp 0x107036
movl -0x7dc(%rbp), %eax
cmpl 0x929b6(%rip), %eax     # 0x1999f8
jg 0x107056
movl 0x929ae(%rip), %eax     # 0x1999f8
cmpl 0x929ac(%rip), %eax     # 0x1999fc
jne 0x107273
movl -0x7dc(%rbp), %eax
cltd
idivl 0x92999(%rip)           # 0x1999fc
cmpl $0x0, %edx
jne 0x107273
movslq -0xac4(%rbp), %rsi
leaq -0x640(%rbp), %rdi
callq 0x100360
movq %rax, %rsi
leaq -0xb28(%rbp), %rdi
callq 0x100570
jmp 0x107090
leaq -0xb28(%rbp), %rdi
callq 0x1004b0
movsd %xmm0, -0x10a8(%rbp)
jmp 0x1070a6
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rsi
leaq -0xb78(%rbp), %rdi
callq 0x100570
jmp 0x1070ca
leaq -0xb78(%rbp), %rdi
callq 0x1004b0
movsd %xmm0, -0x10b0(%rbp)
jmp 0x1070e0
movsd -0x10b0(%rbp), %xmm1
movsd -0x10a8(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0xac0(%rbp)
leaq -0xb78(%rbp), %rdi
callq 0x100690
leaq -0xb28(%rbp), %rdi
callq 0x100690
movsd -0xac0(%rbp), %xmm1
movb $0x0, -0xbc9(%rbp)
movb $0x1, %al
xorps %xmm0, %xmm0
ucomisd %xmm1, %xmm0
movb %al, -0x10b1(%rbp)
ja 0x107192
movslq -0xac4(%rbp), %rsi
leaq -0x660(%rbp), %rdi
callq 0x100360
movq %rax, %rsi
leaq -0xbc8(%rbp), %rdi
callq 0x100570
jmp 0x107158
movb $0x1, -0xbc9(%rbp)
leaq -0xbc8(%rbp), %rdi
callq 0x1004b0
movsd %xmm0, -0x10c0(%rbp)
jmp 0x107175
movsd -0x10c0(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, -0x10b1(%rbp)
movb -0x10b1(%rbp), %al
movb %al, -0x10c1(%rbp)
testb $0x1, -0xbc9(%rbp)
jne 0x1071a9
jmp 0x1071b5
leaq -0xbc8(%rbp), %rdi
callq 0x100690
movb -0x10c1(%rbp), %al
testb $0x1, %al
jne 0x1071c1
jmp 0x10723f
xorps %xmm0, %xmm0
movsd %xmm0, -0xac0(%rbp)
jmp 0x10723f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x107200
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xb78(%rbp), %rdi
callq 0x100690
leaq -0xb28(%rbp), %rdi
callq 0x100690
jmp 0x107aca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
testb $0x1, -0xbc9(%rbp)
jne 0x10722e
jmp 0x10723a
leaq -0xbc8(%rbp), %rdi
callq 0x100690
jmp 0x107aca
movq -0x320(%rbp), %rdi
leaq 0x2ec91(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x10d0(%rbp)
jmp 0x10725b
movq -0x10d0(%rbp), %rdi
movsd -0xac0(%rbp), %xmm0
callq 0xabd0
jmp 0x107271
jmp 0x107273
jmp 0x107275
movl -0xac4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac4(%rbp)
jmp 0x106abe
leaq 0x94110(%rip), %rdi     # 0x19b3a0
callq 0xaa70
testb $0x1, %al
jne 0x1079e2
leaq 0x2ec3b(%rip), %rsi     # 0x135edf
leaq -0x7d0(%rbp), %rdi
callq 0x50eb0
movb %al, -0x10d1(%rbp)
jmp 0x1072b8
movb -0x10d1(%rbp), %al
testb $0x1, %al
jne 0x1072c7
jmp 0x1079e0
leaq -0x7a8(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
callq 0x56980
testb $0x1, %al
jne 0x1072e3
jmp 0x1079e0
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x10e8(%rbp)
leaq -0x760(%rbp), %rdi
movq %rdi, -0x10f0(%rbp)
callq 0xf57b0
movq -0x10e8(%rbp), %rsi
movq %rax, %rdi
callq 0x651e0
movq %rax, %rdi
callq 0x3ebf0
movq -0x10f0(%rbp), %rdi
movq -0x10e8(%rbp), %rsi
movl %eax, -0xbd0(%rbp)
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x3ebf0
movq -0x10f0(%rbp), %rdi
movq -0x10e8(%rbp), %rsi
movl %eax, -0xbd4(%rbp)
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x3ebf0
movl %eax, -0xbd8(%rbp)
movq -0x4a0(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
callq 0xa520
movq %rax, -0x10e0(%rbp)
jmp 0x107396
movq -0x10e0(%rbp), %rdi
leaq 0x2eb3a(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x10f8(%rbp)
jmp 0x1073b2
movq -0x10f8(%rbp), %rdi
movl -0xbd0(%rbp), %esi
callq 0xab20
movq %rax, -0x1100(%rbp)
jmp 0x1073cd
movq -0x1100(%rbp), %rdi
leaq 0x2eb03(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1108(%rbp)
jmp 0x1073e9
movq -0x1108(%rbp), %rdi
movl -0xbd4(%rbp), %esi
callq 0xab20
movq %rax, -0x1110(%rbp)
jmp 0x107404
movq -0x1110(%rbp), %rdi
leaq 0x2eacc(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1118(%rbp)
jmp 0x107420
movq -0x1118(%rbp), %rdi
movl -0xbd8(%rbp), %esi
callq 0xab20
jmp 0x107434
movl $0x0, -0xbf4(%rbp)
movslq -0xbf4(%rbp), %rax
movq %rax, -0x1120(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x1120(%rbp), %rax
cmpq %rcx, %rax
jae 0x1079b4
cmpl $0x0, -0xbd0(%rbp)
jle 0x10757d
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc10(%rbp), %rdi
callq 0x53120
jmp 0x1074a8
leaq -0xc10(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1128(%rbp)
jmp 0x1074be
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc28(%rbp), %rdi
callq 0x53120
jmp 0x1074ee
leaq -0xc28(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1130(%rbp)
jmp 0x107504
movsd -0x1130(%rbp), %xmm1
movsd -0x1128(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0xbe0(%rbp)
leaq -0xc28(%rbp), %rdi
callq 0x3ecb0
leaq -0xc10(%rbp), %rdi
callq 0x3ecb0
jmp 0x107588
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x10756c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xc28(%rbp), %rdi
callq 0x3ecb0
leaq -0xc10(%rbp), %rdi
callq 0x3ecb0
jmp 0x107aca
xorps %xmm0, %xmm0
movsd %xmm0, -0xbe0(%rbp)
cmpl $0x0, -0xbd4(%rbp)
jle 0x10769c
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc40(%rbp), %rdi
callq 0x53120
jmp 0x1075c6
leaq -0xc40(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1138(%rbp)
jmp 0x1075dc
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc58(%rbp), %rdi
callq 0x53120
jmp 0x10760d
leaq -0xc58(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1140(%rbp)
jmp 0x107623
movsd -0x1140(%rbp), %xmm1
movsd -0x1138(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0xbe8(%rbp)
leaq -0xc58(%rbp), %rdi
callq 0x3ecb0
leaq -0xc40(%rbp), %rdi
callq 0x3ecb0
jmp 0x1076a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x10768b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xc58(%rbp), %rdi
callq 0x3ecb0
leaq -0xc40(%rbp), %rdi
callq 0x3ecb0
jmp 0x107aca
xorps %xmm0, %xmm0
movsd %xmm0, -0xbe8(%rbp)
cmpl $0x0, -0xbd8(%rbp)
jle 0x1077bb
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc70(%rbp), %rdi
callq 0x53120
jmp 0x1076e5
leaq -0xc70(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1148(%rbp)
jmp 0x1076fb
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rsi
leaq -0xc88(%rbp), %rdi
callq 0x53120
jmp 0x10772c
leaq -0xc88(%rbp), %rdi
callq 0x53060
movsd %xmm0, -0x1150(%rbp)
jmp 0x107742
movsd -0x1150(%rbp), %xmm1
movsd -0x1148(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0xbf0(%rbp)
leaq -0xc88(%rbp), %rdi
callq 0x3ecb0
leaq -0xc70(%rbp), %rdi
callq 0x3ecb0
jmp 0x1077c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x1077aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xc88(%rbp), %rdi
callq 0x3ecb0
leaq -0xc70(%rbp), %rdi
callq 0x3ecb0
jmp 0x107aca
xorps %xmm0, %xmm0
movsd %xmm0, -0xbf0(%rbp)
xorps %xmm0, %xmm0
ucomisd -0xbe0(%rbp), %xmm0
jbe 0x1077de
xorps %xmm0, %xmm0
movsd %xmm0, -0xbe0(%rbp)
xorps %xmm0, %xmm0
ucomisd -0xbe8(%rbp), %xmm0
jbe 0x1077f6
xorps %xmm0, %xmm0
movsd %xmm0, -0xbe8(%rbp)
xorps %xmm0, %xmm0
ucomisd -0xbf0(%rbp), %xmm0
jbe 0x10780e
xorps %xmm0, %xmm0
movsd %xmm0, -0xbf0(%rbp)
movq -0x4a0(%rbp), %rdi
leaq 0x2e6c2(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1158(%rbp)
jmp 0x10782a
movq -0x1158(%rbp), %rdi
movsd -0xbe0(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x1160(%rbp)
jmp 0x107847
movq -0x1160(%rbp), %rdi
leaq 0x2e689(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1168(%rbp)
jmp 0x107863
movq -0x1168(%rbp), %rdi
movsd -0xbe8(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x1170(%rbp)
jmp 0x107880
movq -0x1170(%rbp), %rdi
leaq 0x2e650(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x1178(%rbp)
jmp 0x10789c
movq -0x1178(%rbp), %rdi
movsd -0xbf0(%rbp), %xmm0
callq 0xabd0
jmp 0x1078b2
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xbf4(%rbp), %rsi
leaq -0x760(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x1, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movslq -0xbf4(%rbp), %rsi
leaq -0x780(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movl $0x2, %esi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movl -0xbf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xbf4(%rbp)
jmp 0x10743e
movq -0x4a0(%rbp), %rdi
movq 0x915c6(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x1079c9
leaq -0x7d0(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0xa060
jmp 0x1079de
jmp 0x1079e0
jmp 0x1079e2
movl -0x7dc(%rbp), %eax
cmpl 0x9200a(%rip), %eax     # 0x1999f8
jg 0x1079fe
movl 0x92002(%rip), %eax     # 0x1999f8
cmpl 0x92000(%rip), %eax     # 0x1999fc
jne 0x107a27
movl -0x7dc(%rbp), %eax
cltd
idivl 0x91ff1(%rip)           # 0x1999fc
cmpl $0x0, %edx
jne 0x107a27
movq -0x320(%rbp), %rdi
movq 0x9156a(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x107a25
jmp 0x107a27
callq 0xa3a0
subq -0x878(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x319e8(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x890(%rbp)
movq -0xa48(%rbp), %rax
movq %rax, -0x1180(%rbp)
cmpq $0x0, %rax
je 0x107a7d
movq -0x1180(%rbp), %rdi
callq 0x1083d0
movq -0x1180(%rbp), %rdi
movl $0x2d0, %esi            # imm = 0x2D0
callq 0xa5e0
leaq -0xa60(%rbp), %rdi
callq 0x3dfa0
movl $0x0, -0xa3c(%rbp)
leaq -0xa38(%rbp), %rdi
callq 0xac88
leaq -0xa18(%rbp), %rdi
callq 0xac88
leaq -0x9d8(%rbp), %rdi
callq 0x3dfa0
movl -0xa3c(%rbp), %eax
testl %eax, %eax
je 0x107ac8
jmp 0x107ac3
jmp 0x105693
jmp 0x107aff
leaq -0xa60(%rbp), %rdi
callq 0x3dfa0
leaq -0xa38(%rbp), %rdi
callq 0xac88
leaq -0xa18(%rbp), %rdi
callq 0xac88
leaq -0x9d8(%rbp), %rdi
callq 0x3dfa0
jmp 0x107c2c
jmp 0x107b01
jmp 0x105693
movl $0x1, -0xa3c(%rbp)
leaq -0x860(%rbp), %rdi
callq 0xac88
leaq -0x840(%rbp), %rdi
callq 0xac88
leaq -0x818(%rbp), %rdi
callq 0x3dfa0
leaq -0x800(%rbp), %rdi
callq 0x3dfa0
leaq -0x7d0(%rbp), %rdi
callq 0xac88
leaq -0x7a8(%rbp), %rdi
callq 0xac88
leaq -0x780(%rbp), %rdi
callq 0xf57d0
leaq -0x760(%rbp), %rdi
callq 0xf57d0
leaq -0x740(%rbp), %rdi
callq 0x65200
leaq -0x718(%rbp), %rdi
callq 0x65200
leaq -0x6f8(%rbp), %rdi
callq 0x65200
leaq -0x6b8(%rbp), %rdi
callq 0x108520
leaq -0x660(%rbp), %rdi
callq 0x100760
leaq -0x640(%rbp), %rdi
callq 0x100760
leaq -0x618(%rbp), %rdi
callq 0x100690
leaq -0x308(%rbp), %rdi
callq 0x3dfa0
leaq -0x2f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x2c0(%rbp), %rdi
callq 0x95b50
leaq -0x290(%rbp), %rdi
callq 0x95b70
leaq -0x260(%rbp), %rdi
callq 0x58620
leaq -0x230(%rbp), %rdi
callq 0x58f00
leaq -0xf0(%rbp), %rdi
callq 0x588b0
leaq -0x30(%rbp), %rdi
callq 0xac88
xorl %eax, %eax
addq $0x1180, %rsp           # imm = 0x1180
popq %rbp
retq
leaq -0x860(%rbp), %rdi
callq 0xac88
leaq -0x840(%rbp), %rdi
callq 0xac88
leaq -0x818(%rbp), %rdi
callq 0x3dfa0
leaq -0x800(%rbp), %rdi
callq 0x3dfa0
leaq -0x7d0(%rbp), %rdi
callq 0xac88
leaq -0x7a8(%rbp), %rdi
callq 0xac88
leaq -0x780(%rbp), %rdi
callq 0xf57d0
leaq -0x760(%rbp), %rdi
callq 0xf57d0
leaq -0x740(%rbp), %rdi
callq 0x65200
leaq -0x718(%rbp), %rdi
callq 0x65200
leaq -0x6f8(%rbp), %rdi
callq 0x65200
leaq -0x6b8(%rbp), %rdi
callq 0x108520
leaq -0x660(%rbp), %rdi
callq 0x100760
leaq -0x640(%rbp), %rdi
callq 0x100760
leaq -0x618(%rbp), %rdi
callq 0x100690
leaq -0x308(%rbp), %rdi
callq 0x3dfa0
leaq -0x2f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x2c0(%rbp), %rdi
callq 0x95b50
leaq -0x290(%rbp), %rdi
callq 0x95b70
leaq -0x260(%rbp), %rdi
callq 0x58620
leaq -0x230(%rbp), %rdi
callq 0x58f00
leaq -0xf0(%rbp), %rdi
callq 0x588b0
leaq -0x30(%rbp), %rdi
callq 0xac88
movq -0xf8(%rbp), %rdi
callq 0xab50
nopl (%rax)