// File: /workspace/github_cpp_makefile_star2_O2/millanek[P]evo/process_vcf_linkGeneNames.cpp
// Function: linkGNMain(int, char**)
int linkGNMain(int argc, char** argv) {
    linkGNOptions(argc, argv);
    string gpFileRoot = stripExtension(opt::gpFile);
    std::ofstream* gpOutFile;
    std::ofstream* refLinkFile;
    std::ofstream* goBedFile;
    std::ofstream* fullBedFile;
    
    if (opt::NtoN) {
        goBedFile = new std::ofstream(gpFileRoot + opt::out + "_NtoN_GOBed.txt");
        fullBedFile = new std::ofstream(gpFileRoot + opt::out + "_NtoN_FullBed.txt");
        gpOutFile = new std::ofstream(gpFileRoot + opt::out + "_NtoN_RefGene.gp");
        refLinkFile = new std::ofstream(gpFileRoot + opt::out + "_NtoN_RefLink.gp");
    } else {
        goBedFile = new std::ofstream(gpFileRoot + opt::out + "_GOBed.txt");
        fullBedFile = new std::ofstream(gpFileRoot + opt::out + "_FullBed.txt");
        gpOutFile = new std::ofstream(gpFileRoot + opt::out + "_RefGene.gp");
        refLinkFile = new std::ofstream(gpFileRoot + opt::out + "_RefLink.gp");
    }
    
    string line;
    int geneNum = 1;
    
    // Load David Brawand's assignment of orthologs
    // Mapping from cichlid IDs to a zebrafish homolog (or medaka
    // stickleback, tetraodon, if zebrafish not available)
    std::map<string,string> cichlidHomolog;
    
    std::map<string,string> cichlidDanRerCopyNum;
    if (opt::v2orthologsFile != "") {
        std::cerr << "Reading the v2 full orthologs file:" << std::endl;
        std::ifstream* ocFile = new std::ifstream(opt::v2orthologsFile);
        while (getline(*ocFile, line)) {
            std::vector<string> orthVec = split(line, '\t');
            int c = getSpeciesColumn(opt::species);
            if (orthVec[c] != "NA") {
                if (orthVec[8] != "NA") { cichlidHomolog[orthVec[c]] = orthVec[8]; cichlidDanRerCopyNum[orthVec[c]] = "1-1"; } // Zebrafish
                else if (orthVec[5] != "NA") { cichlidHomolog[orthVec[c]] = orthVec[5]; } // Medaka
                else if (orthVec[7] != "NA") { cichlidHomolog[orthVec[c]] = orthVec[7]; } // Stickleback
                else if (orthVec[6] != "NA") { cichlidHomolog[orthVec[c]] = orthVec[6]; } // Tetraodon
                else { cichlidHomolog[orthVec[c]] = "novelCichlidGene"; }
            } else { continue; }
        } ocFile->close();
    }
    
    
    if (opt::v1orthologousClustersFile != "") {
        int copiesInCichlid = 0; int copiesInDanRer = 0;
        string cichlidGene = ""; string homologGene = "";
        
        std::cerr << "Reading the v1 orthologous cluster file: " << std::endl;
        std::ifstream* ocFile = new std::ifstream(opt::v1orthologousClustersFile);
        while (getline(*ocFile, line)) {
            std::vector<string> idAndNum = split(line, '\t');
            string thisLineGeneID = idAndNum[0];  int thisLineGeneClusterNumber = atoi(idAndNum[1].c_str());
            // Another line for the same cluster
            if (thisLineGeneClusterNumber == geneNum) {
                if (thisLineGeneID.substr(0,2) == opt::species) {
                    if (cichlidGene == "") {            // First copy in the cichlid species (e.g. mz)
                        cichlidGene = thisLineGeneID;
                    } else {                            // There is more than one copy in the cichlid
                        if (homologGene != "") {
                            if (copiesInDanRer <= 1 || opt::NtoN) {
                                attemptMappingUpdate(cichlidHomolog, cichlidGene, homologGene + "/" + numToString(copiesInCichlid));
                                if (copiesInDanRer == 1)
                                    cichlidDanRerCopyNum[cichlidGene] = "N-1";
                                else if (copiesInDanRer > 1)
                                    cichlidDanRerCopyNum[cichlidGene] = "N-N";
                            }
                            cichlidGene = thisLineGeneID;
                        }
                    }
                    copiesInCichlid++;
                } else if (thisLineGeneID.substr(0,6) == "ENSDAR") {
                    copiesInDanRer++;
                    if (homologGene == "") { homologGene = thisLineGeneID; }
                    else {
                        if (rand() < 0.5) homologGene = thisLineGeneID;  // 50% chance of using this zfish copy (hacky!!!)
                    }
                } else if (thisLineGeneID.substr(0,6) == "ENSGAC") {
                    if (homologGene == "") { homologGene = thisLineGeneID; }
                } else if (thisLineGeneID.substr(0,6) == "ENSORL") {
                    if (homologGene == "" || homologGene.substr(0,6) == "ENSGAC") { homologGene = thisLineGeneID; }
                } else if (thisLineGeneID.substr(0,6) == "ENSTNI") {
                    if (homologGene == "") { homologGene = thisLineGeneID; }
                }
                // std::cerr << atoi(idAndNum[1].c_str()) << "\t" << geneNum << std::endl;
            } else { // First line for a new cluster read
                // so first add the mapping for the previous cluster
                if (cichlidGene != "" && homologGene != "") {
                    assert(copiesInCichlid > 0);
                    if (copiesInDanRer == 1) {
                        if (copiesInCichlid == 1) {
                            cichlidDanRerCopyNum[cichlidGene] = "1-1";
                            attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene);
                        } else if (copiesInCichlid > 1) {
                            cichlidDanRerCopyNum[cichlidGene] = "N-1";
                            attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene + "/" + numToString(copiesInCichlid));
                        }
                    } else if (copiesInDanRer > 1) {
                        if (copiesInCichlid == 1) {
                            cichlidDanRerCopyNum[cichlidGene] = "1-N";
                            if (opt::NtoN)
                                attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene);
                        } else if (copiesInCichlid > 1) {
                            cichlidDanRerCopyNum[cichlidGene] = "N-N";
                            if (opt::NtoN)
                                attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene + "/" + numToString(copiesInCichlid));
                        }
                    } else {
                        if (copiesInCichlid == 1) {
                            attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene);
                        } else if (copiesInCichlid > 1) {
                            attemptMappingUpdate(cichlidHomolog, cichlidGene,homologGene + "/" + numToString(copiesInCichlid));
                        }
                    }
                }
                
                // then start looking through the next cluster
                cichlidGene = ""; homologGene = ""; copiesInDanRer = 0; copiesInCichlid = 0;
                geneNum = thisLineGeneClusterNumber;
                if (thisLineGeneID.substr(0,2) == opt::species) {
                    cichlidGene = thisLineGeneID;
                } else if (thisLineGeneID.substr(0,6) == "ENSDAR") {
                    copiesInDanRer++; homologGene = thisLineGeneID;
                } else if (thisLineGeneID.substr(0,6) == "ENSGAC") {
                    homologGene = thisLineGeneID;
                } else if (thisLineGeneID.substr(0,6) == "ENSORL") {
                    homologGene = thisLineGeneID;
                } else if (thisLineGeneID.substr(0,6) == "ENSTNI") {
                    homologGene = thisLineGeneID;
                }
            }
        } ocFile->close();
    }
    
    if (opt::sepByCopyNumberPrefix != "") {
        std::ofstream* OneOneFile = new std::ofstream(opt::sepByCopyNumberPrefix + "_1-1.txt");
        std::ofstream* NOneFile = new std::ofstream(opt::sepByCopyNumberPrefix + "_N-1.txt");
        std::ofstream* OneNFile = new std::ofstream(opt::sepByCopyNumberPrefix + "_1-N.txt");
        std::ofstream* NNFile = new std::ofstream(opt::sepByCopyNumberPrefix + "_N-N.txt");
        
        for (std::map<string, string>::iterator it = cichlidDanRerCopyNum.begin(); it != cichlidDanRerCopyNum.end(); it++) {
            if (it->second == "1-1") {
                *OneOneFile << it->first << std::endl;
            } else if (it->second == "N-1") {
                *NOneFile << it->first << std::endl;
            } else if (it->second == "1-N") {
                *OneNFile << it->first << std::endl;
            } else if (it->second == "N-N") {
                *NNFile << it->first << std::endl;
            }
        }
    
    }
    
    
    // Load gene names and descriptions from ENSEMBL
    std::map<string,string> ensGeneMap;
    std::map<string,string> ensGeneDescriptionMap;
    std::map<string,string> ensEntrezMap;
    if (!opt::ensGeneFile.empty()) {
        std::ifstream* egFile = new std::ifstream(opt::ensGeneFile);
        while (getline(*egFile, line)) {
            std::vector<string> ensGene = split(line, '\t');
            if (ensGene.size() == 4) {
                ensGeneMap[ensGene[0]] = ensGene[3];
                ensGeneDescriptionMap[ensGene[0]] = ensGene[2];
                // Sometimes there are two Entrez records for one Ensembl gene, the first Entrez record tends to be the more informative one
                if ( ensEntrezMap.find(ensGene[0]) == ensEntrezMap.end() ) {
                    if (ensGene[1] != "") {ensEntrezMap[ensGene[0]] = ensGene[1]; }
                    else { ensEntrezMap[ensGene[0]] = "0"; }
                }
            } else if (ensGene.size() == 3) {
                ensGeneMap[ensGene[0]] = "NA";
                if (ensGene[2] != "") { ensGeneDescriptionMap[ensGene[0]] = ensGene[2]; }
                else { ensGeneDescriptionMap[ensGene[0]] = "no description: " + ensGene[0]; }
                // Sometimes there are two Entrez records for one Ensembl gene, the first Entrez record tends to be the more informative one
                if ( ensEntrezMap.find(ensGene[0]) == ensEntrezMap.end() ) {
                    if (ensGene[1] != "") {ensEntrezMap[ensGene[0]] = ensGene[1]; }
                    else { ensEntrezMap[ensGene[0]] = "0"; }
                }
            } else {
                //std::cerr << ensGene.size() << std::endl;
                print_vector(ensGene, std::cerr);
            }
           // std::cout << ensGene[0] << "\t" << ensGene[2] << std::endl;
        }
    }
    
  
    
    // Go through the gene prediction file and generate the final outputs
    std::ifstream* gpFile = new std::ifstream(opt::gpFile);
    int countNovel = 1; int countUnknown = 1; int countNotInEnsembl = 1;
    while (getline(*gpFile, line)) {
        std::vector<string> gpVec = split(line, '\t');
        if ( cichlidHomolog.count(gpVec[0]) == 1) {
            std::vector<string> ensembl = split(cichlidHomolog[gpVec[0]], '/');
            std::vector<string> myNameVec = split(gpVec[0], '.');
            std::string nameWdots = gpVec[0];
            gpVec[0] = myNameVec[0] + "_" + myNameVec[1] + "_" + myNameVec[2] + "_" + myNameVec[3];
            
            if ( ensGeneMap.find(ensembl[0]) != ensGeneMap.end() ) {
                if (ensembl.size() == 1) {
                    std::cout << nameWdots << "\t" << ensembl[0] << "\t" << ensEntrezMap[ensembl[0]] << "\t" << ensGeneMap[ensembl[0]] << std::endl;
                    gpVec[11] = ensGeneMap[ensembl[0]];
                    print_vector(gpVec, *gpOutFile);
                    *refLinkFile << ensGeneMap[ensembl[0]] << "\t" << ensGeneDescriptionMap[ensembl[0]] << "\t" << gpVec[0] << "\tNP_X\t77\t88\t" << ensEntrezMap[ensembl[0]] << "\t0" << std::endl;
                    *fullBedFile << gpVec[1] << "\t" << gpVec[3] << "\t" << gpVec[4] << "\t" << ensEntrezMap[ensembl[0]] << "\t0\t" << gpVec[2] << std::endl;
                    if (ensEntrezMap[ensembl[0]] != "0") {
                        *goBedFile << gpVec[1] << "\t" << gpVec[3] << "\t" << gpVec[4] << "\t" << ensEntrezMap[ensembl[0]] << "\t0\t" << gpVec[2] << std::endl;
                    }
                } else {
                    std::cout << nameWdots << "\t" << ensembl[0] << "\t" << ensEntrezMap[ensembl[0]] << "\t" << ensGeneMap[ensembl[0]] << "/" << ensembl[1] << std::endl;
                    gpVec[11] = ensGeneMap[ensembl[0]]+"/"+ensembl[1];
                    print_vector(gpVec, *gpOutFile);
                    *refLinkFile << ensGeneMap[ensembl[0]] << "/" << ensembl[1] << "\t" << ensGeneDescriptionMap[ensembl[0]] << "\t" << gpVec[0] << "\tNP_X\t77\t88\t" << ensEntrezMap[ensembl[0]] << "\t0" << std::endl;
                    *fullBedFile << gpVec[1] << "\t" << gpVec[3] << "\t" << gpVec[4] << "\t" << ensEntrezMap[ensembl[0]] << "\t0\t" << gpVec[2] << std::endl;
                    if (ensEntrezMap[ensembl[0]] != "0") {
                        *goBedFile << gpVec[1] << "\t" << gpVec[3] << "\t" << gpVec[4] << "\t" << ensEntrezMap[ensembl[0]] << "\t0\t" << gpVec[2] << std::endl;
                    }
                }
            } else if (ensembl[0] == "novelCichlidGene") {
                std::cout << nameWdots << "\t" << ensembl[0] << "\t0" << "\t" << opt::species + ".novel." + numToString(countNovel) << std::endl;
                gpVec[11] = opt::species + ".novel." + numToString(countNovel);
                countNovel++;
                print_vector(gpVec, *gpOutFile);
                *refLinkFile << opt::species + ".novel." + numToString(countNovel) << "\t" << "novel gene found only in cichlids" << "\t" << gpVec[0] << "\tNP_X\t77\t88\t" << "0" << "\t0" << std::endl;
            } else {
                std::cout << nameWdots << "\t" << "noOrthologAssigned" << "\t" << "0" << "\t" << opt::species + ".orthologNotInEnsembl." + numToString(countNotInEnsembl) << std::endl;
                *refLinkFile << opt::species + ".orthologNotInEnsembl." + numToString(countUnknown) << "\t" << "ortholog from Brawand data not foud in Ensembl v75" << "\t" << gpVec[0] << "\tNP_X\t77\t88\t" << "0" << "\t0" << std::endl;
                gpVec[11] = opt::species + ".orthologNotInEnsembl." + numToString(countNotInEnsembl);
                print_vector(gpVec, *gpOutFile);
                //std::cerr << ensembl[0] << std::endl;
            }
            //std::cout << "hello" << std::endl;
        } else {
            std::vector<string> myNameVec = split(gpVec[0], '.');
            std::string nameWdots = gpVec[0] + ".1";
            gpVec[0] = myNameVec[0] + "_" + myNameVec[1] + "_" + myNameVec[2] + "_" + myNameVec[3];
            std::cout << nameWdots << "\t" << "noOrthologAssigned" << "\t" << "0" << "\t" << opt::species + ".unknown." + numToString(countUnknown) << std::endl;
            *refLinkFile << opt::species + ".unknown." + numToString(countUnknown) << "\t" << "unknown - no ortholog from Brawand data" << "\t" << gpVec[0] << "\tNP_X\t77\t88\t" << "0" << "\t0" << std::endl;
            gpVec[11] = opt::species + ".unknown." + numToString(countUnknown);
            print_vector(gpVec, *gpOutFile);
            countUnknown++;
        }
    }
    
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x328, %rsp            # imm = 0x328
callq 0x7634e
leaq 0x6b1af(%rip), %rsi     # 0xdebd0
leaq 0x1e0(%rsp), %rdi
callq 0x404d7
cmpb $0x1, 0x6b29b(%rip)     # 0xdecd0
jne 0x73c0a
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0xa8(%rsp)
leaq 0x6b1fc(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x39293(%rip), %rdx     # 0xacd03
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0xa8(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0xb0(%rsp)
leaq 0x6b180(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x39227(%rip), %rdx     # 0xacd13
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0xb0(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x40(%rsp)
leaq 0x6b107(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x391c0(%rip), %rdx     # 0xacd25
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x40(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x48(%rsp)
leaq 0x6b091(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x3915b(%rip), %rdx     # 0xacd36
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x48(%rsp), %rdi
callq 0x8900
jmp 0x73dd4
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0xa8(%rsp)
leaq 0x6b02d(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x390c9(%rip), %rdx     # 0xacd08
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0xa8(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0xb0(%rsp)
leaq 0x6afb1(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x3905d(%rip), %rdx     # 0xacd18
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0xb0(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x40(%rsp)
leaq 0x6af38(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x38ff6(%rip), %rdx     # 0xacd2a
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x40(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x48(%rsp)
leaq 0x6aec2(%rip), %rdx     # 0xdec50
leaq 0xe8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x28b6d
leaq 0x38f91(%rip), %rdx     # 0xacd3b
leaq 0xb8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x28a29
leaq 0xb8(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x48(%rsp), %rdi
callq 0x8900
leaq 0xb8(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
leaq 0x228(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0xc0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0xf0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x6ae2d(%rip), %rdi     # 0xdec70
leaq 0x25fd5(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x74044
movq 0x6918a(%rip), %rdi     # 0xdcfe8
leaq 0x38ee2(%rip), %rsi     # 0xacd47
callq 0x8480
movq %rax, %rdi
callq 0x8230
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
leaq 0x6adea(%rip), %rsi     # 0xdec70
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8760
leaq 0x218(%rsp), %rbx
leaq 0x58(%rsp), %r15
leaq 0x1e89f(%rip), %r13     # 0x92744
movq %r14, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7403c
movq %r15, %rdi
movq %rbx, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x6adb9(%rip), %rdi     # 0xdec90
callq 0x765f5
movslq %eax, %rbp
shlq $0x5, %rbp
movq 0x58(%rsp), %rdi
addq %rbp, %rdi
movq %r13, %rsi
callq 0x2ea9b
testb %al, %al
je 0x74013
movq 0x58(%rsp), %rdi
movl $0x100, %eax            # imm = 0x100
addq %rax, %rdi
movq %r13, %rsi
callq 0x2ea9b
movq 0x58(%rsp), %r12
testb %al, %al
je 0x73f65
leaq (%r12,%rbp), %rsi
leaq 0xb8(%rsp), %rdi
callq 0x3210e
addq $0x100, %r12            # imm = 0x100
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
addq 0x58(%rsp), %rbp
leaq 0xe8(%rsp), %rdi
movq %rbp, %rsi
callq 0x3210e
leaq 0x38e13(%rip), %rsi     # 0xacd6b
movq %rax, %rdi
callq 0x88f0
jmp 0x74013
addq $0xa0, %r12
movq %r12, %rdi
movq %r13, %rsi
callq 0x2ea9b
movq 0x58(%rsp), %r12
testb %al, %al
je 0x73f9c
addq %r12, %rbp
leaq 0xb8(%rsp), %rdi
movq %rbp, %rsi
callq 0x3210e
addq $0xa0, %r12
jmp 0x74008
addq $0xe0, %r12
movq %r12, %rdi
movq %r13, %rsi
callq 0x2ea9b
movq 0x58(%rsp), %r12
testb %al, %al
je 0x73fd3
addq %r12, %rbp
leaq 0xb8(%rsp), %rdi
movq %rbp, %rsi
callq 0x3210e
addq $0xe0, %r12
jmp 0x74008
addq $0xc0, %r12
movq %r12, %rdi
movq %r13, %rsi
callq 0x2ea9b
movq 0x58(%rsp), %r12
addq %r12, %rbp
testb %al, %al
je 0x74020
leaq 0xb8(%rsp), %rdi
movq %rbp, %rsi
callq 0x3210e
addq $0xc0, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
movq %r15, %rdi
callq 0x28a08
jmp 0x73ea5
leaq 0xb8(%rsp), %rdi
movq %rbp, %rsi
callq 0x3210e
leaq 0x38d38(%rip), %rsi     # 0xacd6f
jmp 0x73f58
movq %r14, %rdi
callq 0x80e0
leaq 0x6aba5(%rip), %rdi     # 0xdebf0
leaq 0x25dcd(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x74868
leaq 0x25db9(%rip), %rsi     # 0x99e1f
leaq 0x58(%rsp), %rdi
leaq 0x150(%rsp), %rdx
callq 0x21904
leaq 0x25da0(%rip), %rsi     # 0x99e1f
leaq 0x150(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0x21904
movq 0x68f4d(%rip), %rdi     # 0xdcfe8
leaq 0x38cde(%rip), %rsi     # 0xacd80
callq 0x8480
movq %rax, %rdi
callq 0x8230
movl $0x208, %edi            # imm = 0x208
callq 0x8490
leaq 0x6ab30(%rip), %rsi     # 0xdebf0
pushq $0x8
popq %rdx
movq %rax, 0x8(%rsp)
movq %rax, %rdi
callq 0x8760
xorl %r12d, %r12d
pushq $0x1
popq %r13
leaq 0x180(%rsp), %r14
leaq 0x1a0(%rsp), %rbp
xorl %r15d, %r15d
movq 0x8(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x74847
leaq 0x1c0(%rsp), %rdi
leaq 0x218(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x1c0(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x8600
movq 0x1c0(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x86f0
cmpl %r13d, %eax
jne 0x7426a
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x2
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x6ab1c(%rip), %rsi     # 0xdec90
callq 0x26b06
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
je 0x742e4
leaq 0x58(%rsp), %rdi
leaq 0x25c88(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
jne 0x7458f
leaq 0x150(%rsp), %rdi
leaq 0x25c6c(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x745a1
cmpl $0x2, %r15d
jl 0x741d3
cmpb $0x1, 0x6ab03(%rip)     # 0xdecd0
jne 0x7458f
leaq 0x88(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x2e330(%rip), %rdx     # 0xa251a
callq 0x28806
movq %rbp, %rbx
movq %rbp, %rdi
movl %r12d, %esi
callq 0x28ad3
movq %r14, %rdi
leaq 0x88(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0xb8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movq %r14, %rdx
callq 0x7666c
movq %r14, %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8978
leaq 0x88(%rsp), %rdi
callq 0x8978
cmpl $0x1, %r15d
jne 0x7456c
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
leaq 0x38b45(%rip), %rsi     # 0xacdaa
jmp 0x74587
movl %eax, %ebx
leaq 0x58(%rsp), %rdi
leaq 0x25ba7(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x7469a
leaq 0x150(%rsp), %rdi
leaq 0x25b8b(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x7469a
testl %r12d, %r12d
jle 0x75d0b
cmpl $0x1, %r15d
jne 0x743ae
cmpl $0x1, %r12d
jne 0x74490
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x38a91(%rip), %rsi     # 0xacd6b
callq 0x88f0
jmp 0x74512
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x38aaf(%rip), %rsi     # 0xacdb2
callq 0x2193f
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
je 0x74358
incl %r15d
leaq 0x150(%rsp), %rdi
leaq 0x25af7(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
jne 0x7433e
callq 0x8160
testl %eax, %eax
jg 0x74763
leaq 0x150(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x82a0
jmp 0x74763
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x38a42(%rip), %rsi     # 0xacdb9
callq 0x2193f
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
je 0x743f1
leaq 0x150(%rsp), %rbx
movq %rbx, %rdi
leaq 0x25a83(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
jne 0x7447b
jmp 0x74763
jle 0x74508
cmpl $0x1, %r12d
jne 0x745a9
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x38a43(%rip), %rsi     # 0xace1d
callq 0x88f0
cmpb $0x0, 0x6a8ea(%rip)     # 0xdecd0
jne 0x74512
jmp 0x7469a
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x389b0(%rip), %rsi     # 0xacdc0
callq 0x2193f
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
je 0x74531
leaq 0x150(%rsp), %rbx
movq %rbx, %rdi
leaq 0x259e6(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
jne 0x7447b
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x3895d(%rip), %rsi     # 0xacdb9
callq 0x2193f
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
leaq 0x150(%rsp), %rbx
je 0x74763
movq %rbx, %rdi
leaq 0x120(%rsp), %rsi
callq 0x82a0
jmp 0x74763
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x388fe(%rip), %rsi     # 0xacdaa
callq 0x88f0
leaq 0x88(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x2e052(%rip), %rdx     # 0xa251a
callq 0x28806
movq %rbp, %r15
movq %rbp, %rdi
movl %r12d, %esi
callq 0x28ad3
movq %r14, %rdi
leaq 0x88(%rsp), %rsi
movq %r15, %rdx
callq 0x28a48
leaq 0xb8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movq %r14, %rdx
callq 0x7666c
jmp 0x7467d
cmpl $0x1, %r12d
jne 0x7462b
leaq 0xb8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
leaq 0x150(%rsp), %rdx
callq 0x7666c
jmp 0x7469a
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x38877(%rip), %rsi     # 0xacdc7
callq 0x2193f
movl %eax, %ebx
movq %r14, %rdi
callq 0x8978
testb %bl, %bl
jne 0x7438a
jmp 0x74763
jle 0x7458f
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
leaq 0x38827(%rip), %rsi     # 0xacdae
movq %rax, %rdi
callq 0x88f0
leaq 0x58(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x82a0
incl %r12d
jmp 0x74763
leaq 0xe8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x387e9(%rip), %rsi     # 0xacdae
callq 0x88f0
cmpb $0x1, 0x6a6ff(%rip)     # 0xdecd0
jne 0x7469a
leaq 0x88(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x2df2c(%rip), %rdx     # 0xa251a
callq 0x28806
movq %rbp, %r15
movq %rbp, %rdi
movl %r12d, %esi
callq 0x28ad3
movq %r14, %rdi
leaq 0x88(%rsp), %rsi
movq %r15, %rdx
callq 0x28a48
leaq 0xb8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movq %r14, %rdx
callq 0x7666c
jmp 0x7467d
leaq 0x88(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x2ded8(%rip), %rdx     # 0xa251a
callq 0x28806
movq %rbp, %r15
movq %rbp, %rdi
movl %r12d, %esi
callq 0x28ad3
movq %r14, %rdi
leaq 0x88(%rsp), %rsi
movq %r15, %rdx
callq 0x28a48
leaq 0xb8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movq %r14, %rdx
callq 0x7666c
movq %r14, %rdi
callq 0x8978
movq %rbp, %rdi
callq 0x8978
leaq 0x88(%rsp), %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
leaq 0x25779(%rip), %rsi     # 0x99e1f
callq 0x88f0
leaq 0x150(%rsp), %rdi
leaq 0x25765(%rip), %rsi     # 0x99e1f
callq 0x88f0
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x2
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x6a5b2(%rip), %rsi     # 0xdec90
callq 0x26b06
movl %eax, %r12d
movq %r14, %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
testb %r12b, %r12b
je 0x74710
leaq 0x120(%rsp), %rsi
callq 0x82a0
xorl %r12d, %r12d
movl %ebx, %r13d
xorl %r15d, %r15d
jmp 0x74763
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x38683(%rip), %rsi     # 0xacdb2
callq 0x2193f
movl %eax, %r12d
movq %r14, %rdi
callq 0x8978
testb %r12b, %r12b
je 0x74782
leaq 0x150(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x82a0
xorl %r12d, %r12d
movl %ebx, %r13d
pushq $0x1
popq %r15
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x28a08
jmp 0x740ea
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x38618(%rip), %rsi     # 0xacdb9
callq 0x2193f
movl %eax, %r12d
movq %r14, %rdi
callq 0x8978
leaq 0x150(%rsp), %rdi
testb %r12b, %r12b
jne 0x746f8
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x385df(%rip), %rsi     # 0xacdc0
callq 0x2193f
movl %eax, %r12d
movq %r14, %rdi
callq 0x8978
leaq 0x150(%rsp), %rdi
testb %r12b, %r12b
jne 0x746f8
movq %r14, %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
pushq $0x6
popq %rcx
callq 0x84b0
movq %r14, %rdi
leaq 0x385a6(%rip), %rsi     # 0xacdc7
callq 0x2193f
movl %eax, %r12d
movq %r14, %rdi
callq 0x8978
leaq 0x150(%rsp), %rdi
testb %r12b, %r12b
jne 0x746f8
jmp 0x74705
movq 0x8(%rsp), %rdi
callq 0x80e0
leaq 0x150(%rsp), %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
callq 0x8978
leaq 0x6a441(%rip), %rdi     # 0xdecb0
leaq 0x255a9(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x74a2c
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %r14
leaq 0x6a419(%rip), %rsi     # 0xdecb0
leaq 0x38583(%rip), %rdx     # 0xace21
leaq 0x58(%rsp), %rdi
callq 0x28806
leaq 0x58(%rsp), %rsi
pushq $0x10
popq %rdx
movq %r14, %rdi
callq 0x8900
leaq 0x58(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %r15
leaq 0x6a3da(%rip), %rsi     # 0xdecb0
leaq 0x3854d(%rip), %rdx     # 0xace2a
leaq 0x58(%rsp), %rdi
callq 0x28806
leaq 0x58(%rsp), %rsi
pushq $0x10
popq %rdx
movq %r15, %rdi
callq 0x8900
leaq 0x58(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x8(%rsp)
leaq 0x6a399(%rip), %rsi     # 0xdecb0
leaq 0x38515(%rip), %rdx     # 0xace33
leaq 0x58(%rsp), %rdi
callq 0x28806
leaq 0x58(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x8(%rsp), %rdi
callq 0x8900
leaq 0x58(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x118(%rsp)
leaq 0x6a353(%rip), %rsi     # 0xdecb0
leaq 0x384d8(%rip), %rdx     # 0xace3c
leaq 0x58(%rsp), %rdi
callq 0x28806
leaq 0x58(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x118(%rsp), %rdi
callq 0x8900
leaq 0x58(%rsp), %rdi
callq 0x8978
movq 0x100(%rsp), %r13
leaq 0x383cf(%rip), %rbx     # 0xacd6b
leaq 0x38407(%rip), %rbp     # 0xacdaa
leaq 0xf0(%rsp), %rax
cmpq %rax, %r13
je 0x74a2c
leaq 0x40(%r13), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2193f
movq %r14, %rdi
testb %al, %al
jne 0x74a0b
movq %r12, %rdi
movq %rbp, %rsi
callq 0x2193f
movq %r15, %rdi
testb %al, %al
jne 0x74a0b
movq %r12, %rdi
leaq 0x3843b(%rip), %rsi     # 0xace1d
callq 0x2193f
movq 0x8(%rsp), %rdi
testb %al, %al
jne 0x74a0b
movq %r12, %rdi
leaq 0x383b4(%rip), %rsi     # 0xacdae
callq 0x2193f
movq 0x118(%rsp), %rdi
testb %al, %al
je 0x74a1c
leaq 0x20(%r13), %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq %r13, %rdi
callq 0x8340
movq %rax, %r13
jmp 0x749a3
leaq 0x60(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x158(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x128(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
xorl %eax, %eax
cmpq %rax, 0x6a18f(%rip)     # 0xdec18
je 0x74d30
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
leaq 0x6a16d(%rip), %rsi     # 0xdec10
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8760
leaq 0x218(%rsp), %rbx
leaq 0x88(%rsp), %r15
pushq $0x9
popq %rbp
leaq 0x310(%rsp), %r13
movq %r14, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x74d30
movq %r15, %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x40349
movq 0x88(%rsp), %r12
movq 0x90(%rsp), %rax
subq %r12, %rax
sarq $0x5, %rax
cmpq $0x3, %rax
je 0x74bc4
cmpq $0x4, %rax
jne 0x74c25
leaq 0x58(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
addq $0x60, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
movq 0x88(%rsp), %r12
leaq 0x150(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
addq $0x40, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
movq 0x88(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3f866
leaq 0x128(%rsp), %rcx
cmpq %rcx, %rax
jne 0x74d23
movq 0x88(%rsp), %rdi
addq $0x20, %rdi
leaq 0x25285(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
movq 0x88(%rsp), %r12
testb %al, %al
je 0x74d04
leaq 0x120(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
jmp 0x74cf3
leaq 0x58(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x1db69(%rip), %rsi     # 0x92744
callq 0x88f0
movq 0x88(%rsp), %rdi
addq $0x40, %rdi
leaq 0x2522c(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x74c51
movq 0x88(%rsp), %r12
leaq 0x150(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
addq $0x40, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
jmp 0x74c9d
movq %r13, %rdi
movq %r15, %rsi
callq 0x297dc
movq %r13, %rdi
movq 0x683ae(%rip), %rsi     # 0xdcfe8
movl %ebp, %edx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %r13, %rdi
callq 0x28a08
jmp 0x74d23
movq 0x88(%rsp), %rdx
leaq 0x180(%rsp), %rdi
leaq 0x381dd(%rip), %rsi     # 0xace45
callq 0x5b784
movq 0x88(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x3210e
movq %rax, %rdi
leaq 0x180(%rsp), %r12
movq %r12, %rsi
callq 0x8550
movq %r12, %rdi
callq 0x8978
movq 0x88(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3f866
leaq 0x128(%rsp), %rcx
cmpq %rcx, %rax
jne 0x74d23
movq 0x88(%rsp), %rdi
addq $0x20, %rdi
leaq 0x2514d(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
movq 0x88(%rsp), %r12
testb %al, %al
je 0x74d04
leaq 0x120(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
addq $0x20, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x82a0
jmp 0x74d23
leaq 0x120(%rsp), %rdi
movq %r12, %rsi
callq 0x3210e
movq %rax, %rdi
leaq 0x22907(%rip), %rsi     # 0x97625
callq 0x88f0
movq %r15, %rdi
callq 0x28a08
jmp 0x74ac9
movl $0x208, %edi            # imm = 0x208
callq 0x8490
leaq 0x69e8f(%rip), %rsi     # 0xdebd0
pushq $0x8
popq %rdx
movq %rax, 0x118(%rsp)
movq %rax, %rdi
callq 0x8760
pushq $0x1
popq %rbx
leaq 0x1c0(%rsp), %r14
leaq 0x1a0(%rsp), %r12
leaq 0x88(%rsp), %r15
leaq 0x250a8(%rip), %rbp     # 0x99e1e
movl %ebx, 0x54(%rsp)
movl %ebx, 0x8(%rsp)
movq 0x118(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x75c9f
leaq 0x10(%rsp), %rdi
leaq 0x218(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x10(%rsp), %rsi
leaq 0xb8(%rsp), %rdi
callq 0x321a0
cmpq $0x1, %rax
jne 0x751f8
movq 0x10(%rsp), %rsi
leaq 0xb8(%rsp), %rdi
callq 0x3210e
leaq 0x28(%rsp), %rdi
movq %rax, %rsi
pushq $0x2f
popq %rdx
callq 0x40349
movq 0x10(%rsp), %rsi
leaq 0x200(%rsp), %rdi
pushq $0x2e
popq %rdx
callq 0x40349
movq 0x10(%rsp), %rsi
leaq 0x180(%rsp), %rdi
callq 0x8600
movq 0x200(%rsp), %rsi
leaq 0x238(%rsp), %r13
movq %r13, %rdi
leaq 0x2e983(%rip), %rdx     # 0xa37bc
callq 0x28806
movq 0x200(%rsp), %rdx
addq $0x20, %rdx
leaq 0x258(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x287e7
leaq 0x2f0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x2e94a(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x200(%rsp), %rdx
addq $0x40, %rdx
movq %r14, %rdi
movq %r13, %rsi
callq 0x287e7
movq %r12, %rdi
movq %r14, %rsi
leaq 0x2e921(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x200(%rsp), %rdx
addq $0x60, %rdx
movq %r15, %rdi
movq %r12, %rsi
callq 0x287e7
movq 0x10(%rsp), %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x238(%rsp), %rdi
callq 0x8978
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3f866
leaq 0x60(%rsp), %rcx
cmpq %rcx, %rax
leaq 0x69d74(%rip), %rbx     # 0xdec90
je 0x75506
movq 0x30(%rsp), %rax
subq 0x28(%rsp), %rax
cmpq $0x20, %rax
jne 0x75710
movq 0x6807b(%rip), %rdi     # 0xdcfb8
leaq 0x180(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq 0x10(%rsp), %rdi
movl $0x160, %ecx            # imm = 0x160
addq %rcx, %rdi
movq %rax, %rsi
callq 0x82a0
leaq 0x2d8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x297dc
leaq 0x2d8(%rsp), %rbx
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x37dd7(%rip), %rsi     # 0xace56
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x22576(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq 0xb0(%rsp), %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x60, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
subq $-0x80, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x37d25(%rip), %rsi     # 0xace63
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %rax, %rdi
leaq 0x224ad(%rip), %rsi     # 0x97625
callq 0x2ea9b
testb %al, %al
je 0x75c6c
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq 0xa8(%rsp), %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x60, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
subq $-0x80, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
jmp 0x75a43
movq 0x10(%rsp), %rsi
leaq 0x28(%rsp), %rdi
pushq $0x2e
popq %rdx
callq 0x40349
movq 0x10(%rsp), %rsi
leaq 0x180(%rsp), %rdi
leaq 0x37cd0(%rip), %rdx     # 0xaceee
callq 0x28806
movq 0x28(%rsp), %rsi
leaq 0x238(%rsp), %r13
movq %r13, %rdi
leaq 0x2e582(%rip), %rdx     # 0xa37bc
callq 0x28806
movq 0x28(%rsp), %rdx
addq $0x20, %rdx
leaq 0x258(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x287e7
leaq 0x2f0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x2e54c(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x28(%rsp), %rdx
addq $0x40, %rdx
movq %r14, %rdi
movq %r13, %rsi
callq 0x287e7
movq %r12, %rdi
movq %r14, %rsi
leaq 0x2e526(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x28(%rsp), %rdx
addq $0x60, %rdx
movq %r15, %rdi
movq %r12, %rsi
callq 0x287e7
movq 0x10(%rsp), %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x238(%rsp), %rdi
callq 0x8978
movq 0x67cbb(%rip), %rdi     # 0xdcfb8
leaq 0x180(%rsp), %rsi
callq 0x8430
leaq 0x6997f(%rip), %rbx     # 0xdec90
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x37b6b(%rip), %rsi     # 0xace91
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x222e5(%rip), %rsi     # 0x97625
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x37b91(%rip), %rdx     # 0xacef1
callq 0x28806
movq %r14, %rdi
movl 0x8(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq %r13, %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x37b3a(%rip), %rdx     # 0xacef1
callq 0x28806
movq %r14, %rdi
movl 0x8(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x37b03(%rip), %rsi     # 0xacefb
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x37a37(%rip), %rsi     # 0xace56
callq 0x8480
movq %rax, %rdi
leaq 0x221f7(%rip), %rsi     # 0x97625
callq 0x8480
movq %rax, %rdi
leaq 0x221e7(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x37a82(%rip), %rdx     # 0xacef1
callq 0x28806
movq %r14, %rdi
movl 0x8(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x10(%rsp), %rdi
movl $0x160, %eax            # imm = 0x160
addq %rax, %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x278(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x297dc
leaq 0x278(%rsp), %rbx
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
incl 0x8(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x8978
jmp 0x75c86
movq 0x28(%rsp), %rdi
leaq 0x3785d(%rip), %rsi     # 0xacd6f
callq 0x2193f
testb %al, %al
je 0x75a7b
movq 0x67a92(%rip), %rdi     # 0xdcfb8
leaq 0x180(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x220cf(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x378f2(%rip), %rdx     # 0xace67
callq 0x28806
movq %r14, %rdi
movl 0x54(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq %r13, %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x3789b(%rip), %rdx     # 0xace67
callq 0x28806
movq %r14, %rdi
movl 0x54(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x10(%rsp), %rdi
movl $0x160, %eax            # imm = 0x160
addq %rax, %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x2a8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x297dc
leaq 0x2a8(%rsp), %r13
movq %r13, %rdi
movq 0x40(%rsp), %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %r13, %rdi
callq 0x28a08
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x3780d(%rip), %rdx     # 0xace67
callq 0x28806
movl 0x54(%rsp), %esi
incl %esi
movq %r14, %rdi
movl %esi, 0x54(%rsp)
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x377ce(%rip), %rsi     # 0xace6f
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x3778e(%rip), %rsi     # 0xace56
callq 0x8480
movq %rax, %rdi
leaq 0x21f4e(%rip), %rsi     # 0x97625
callq 0x8480
movq %rax, %rdi
leaq 0x21f3e(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
jmp 0x75c6c
movq 0x678a1(%rip), %rdi     # 0xdcfb8
leaq 0x180(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x2cd81(%rip), %rsi     # 0xa251a
callq 0x8480
movq 0x28(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq %r12, %rdi
movq %rax, %rsi
leaq 0x2cd47(%rip), %rdx     # 0xa251a
callq 0x28806
movq 0x28(%rsp), %rdx
addq $0x20, %rdx
movq %r15, %rdi
movq %r12, %rsi
callq 0x287e7
movq 0x10(%rsp), %rdi
movl $0x160, %eax            # imm = 0x160
addq %rax, %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x2c0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x297dc
leaq 0x2c0(%rsp), %rbx
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
movq 0x28(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3210e
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x2ccae(%rip), %rsi     # 0xa251a
callq 0x8480
movq 0x28(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x37587(%rip), %rsi     # 0xace56
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x21d26(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq 0xb0(%rsp), %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x60, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
subq $-0x80, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x374d5(%rip), %rsi     # 0xace63
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %rax, %rdi
leaq 0x21c5d(%rip), %rsi     # 0x97625
callq 0x2ea9b
testb %al, %al
je 0x75c6c
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq 0xa8(%rsp), %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x60, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
subq $-0x80, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq 0x28(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x3210e
movq %r13, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x3740b(%rip), %rsi     # 0xace63
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
jmp 0x75c6c
movq 0x67536(%rip), %rdi     # 0xdcfb8
leaq 0x180(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x373ed(%rip), %rsi     # 0xace91
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x21b67(%rip), %rsi     # 0x97625
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %r13
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x373c6(%rip), %rdx     # 0xacea4
callq 0x28806
movq %r14, %rdi
pushq $0x1
popq %rsi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq %r13, %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x37370(%rip), %rdx     # 0xacea4
callq 0x28806
movq %r14, %rdi
movl 0x8(%rsp), %esi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x37346(%rip), %rsi     # 0xacebb
callq 0x8480
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x372ba(%rip), %rsi     # 0xace56
callq 0x8480
movq %rax, %rdi
leaq 0x21a7a(%rip), %rsi     # 0x97625
callq 0x8480
movq %rax, %rdi
leaq 0x21a6a(%rip), %rsi     # 0x97624
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x372b8(%rip), %rdx     # 0xacea4
callq 0x28806
movq %r14, %rdi
pushq $0x1
popq %rsi
callq 0x28ad3
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x28a48
movq 0x10(%rsp), %rdi
movl $0x160, %eax            # imm = 0x160
addq %rax, %rdi
movq %r15, %rsi
callq 0x8550
movq %r15, %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x290(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x297dc
leaq 0x290(%rsp), %rbx
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
leaq 0x180(%rsp), %rdi
callq 0x8978
leaq 0x200(%rsp), %rdi
callq 0x28a08
leaq 0x28(%rsp), %rdi
callq 0x28a08
leaq 0x10(%rsp), %rdi
callq 0x28a08
jmp 0x74d7e
leaq 0x120(%rsp), %rdi
callq 0x33008
leaq 0x150(%rsp), %rdi
callq 0x33008
leaq 0x58(%rsp), %rdi
callq 0x33008
leaq 0xe8(%rsp), %rdi
callq 0x33008
leaq 0xb8(%rsp), %rdi
callq 0x33008
leaq 0x218(%rsp), %rdi
callq 0x8978
leaq 0x1e0(%rsp), %rdi
callq 0x8978
xorl %eax, %eax
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x370bc(%rip), %rdi     # 0xacdce
leaq 0x370c9(%rip), %rsi     # 0xacde2
leaq 0x370e0(%rip), %rcx     # 0xace00
movl $0xb1, %edx
callq 0x82f0
jmp 0x75f4f
jmp 0x76227
jmp 0x75f45
jmp 0x75f40
jmp 0x76227
jmp 0x75f45
jmp 0x76227
jmp 0x75f4f
jmp 0x75f40
jmp 0x75f40
jmp 0x76227
jmp 0x75f4f
jmp 0x76227
jmp 0x75f45
jmp 0x76227
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x75d87
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x118(%rsp), %rdi
jmp 0x75e2f
jmp 0x76209
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x75db0
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x8(%rsp), %rdi
jmp 0x75e2f
jmp 0x76209
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x75dd3
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq %r15, %rdi
jmp 0x75e2f
jmp 0x76209
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x75df4
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
jmp 0x75e2c
jmp 0x76209
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq 0x8(%rsp), %rdi
callq 0x84a0
jmp 0x76244
movq %rax, %rbx
jmp 0x76251
jmp 0x76209
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
callq 0x84a0
jmp 0x76312
jmp 0x75e3b
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x8978
jmp 0x75e52
jmp 0x75e4f
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x8978
jmp 0x75e66
jmp 0x75e63
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x48(%rsp), %rdi
jmp 0x75f24
jmp 0x75e77
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x8978
jmp 0x75e8e
jmp 0x75e8b
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x8978
jmp 0x75ea2
jmp 0x75e9f
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x40(%rsp), %rdi
jmp 0x75f24
jmp 0x75eb0
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x8978
jmp 0x75ec7
jmp 0x75ec4
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x8978
jmp 0x75edb
jmp 0x75ed8
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0xb0(%rsp), %rdi
jmp 0x75f24
jmp 0x75eec
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x8978
jmp 0x75f03
jmp 0x75f00
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x8978
jmp 0x75f17
jmp 0x75f14
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0xa8(%rsp), %rdi
callq 0x84a0
jmp 0x76339
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
jmp 0x75f98
jmp 0x7621f
movq %rax, %rbx
jmp 0x75f6c
movq %rax, %rbx
jmp 0x75f5f
jmp 0x76227
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x8978
leaq 0x1a0(%rsp), %rdi
callq 0x8978
leaq 0x88(%rsp), %rdi
callq 0x8978
jmp 0x7622a
jmp 0x76227
jmp 0x76227
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq 0x118(%rsp), %rdi
callq 0x84a0
jmp 0x762ee
jmp 0x7621f
jmp 0x761cd
jmp 0x761cd
jmp 0x76209
jmp 0x76209
jmp 0x76227
jmp 0x76227
jmp 0x7604a
jmp 0x762bd
jmp 0x7604a
jmp 0x75ff9
jmp 0x75ff9
jmp 0x75ff9
jmp 0x75ff9
jmp 0x7604a
jmp 0x762bd
jmp 0x762bd
movq %rax, %rbx
leaq 0x2a8(%rsp), %rdi
jmp 0x7606a
jmp 0x75ff9
jmp 0x762bd
movq %rax, %rbx
jmp 0x761ea
jmp 0x7604a
jmp 0x762bd
jmp 0x7604a
jmp 0x7604a
jmp 0x762bd
movq %rax, %rbx
leaq 0x290(%rsp), %rdi
jmp 0x7606a
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x8978
jmp 0x76275
jmp 0x76272
jmp 0x76227
jmp 0x76227
movq %rax, %rbx
jmp 0x76339
movq %rax, %rbx
jmp 0x761f7
movq %rax, %rbx
leaq 0x2c0(%rsp), %rdi
jmp 0x7606a
movq %rax, %rbx
leaq 0x2d8(%rsp), %rdi
callq 0x28a08
jmp 0x762c0
jmp 0x761da
jmp 0x761da
jmp 0x76272
movq %rax, %rbx
leaq 0x310(%rsp), %rdi
callq 0x28a08
jmp 0x76275
jmp 0x76272
jmp 0x76227
jmp 0x76227
jmp 0x762bd
jmp 0x7627f
movq %rax, %rbx
leaq 0x278(%rsp), %rdi
callq 0x28a08
jmp 0x762ae
jmp 0x761b4
jmp 0x76155
jmp 0x762bd
jmp 0x7627f
movq %rax, %rbx
jmp 0x761aa
movq %rax, %rbx
jmp 0x7613b
jmp 0x76148
jmp 0x76155
movq %rax, %rbx
jmp 0x76121
movq %rax, %rbx
jmp 0x7612e
movq %rax, %rbx
jmp 0x76179
movq %rax, %rbx
jmp 0x76114
jmp 0x762bd
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x8978
leaq 0x2f0(%rsp), %rdi
callq 0x8978
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x238(%rsp), %rdi
jmp 0x762a9
movq %rax, %rbx
jmp 0x762da
jmp 0x76215
movq %rax, %rbx
jmp 0x762a1
jmp 0x761b4
jmp 0x7627f
jmp 0x7627f
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x8978
jmp 0x76190
movq %rax, %rbx
jmp 0x7619d
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x8978
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x238(%rsp), %rdi
jmp 0x761ff
movq %rax, %rbx
jmp 0x76294
movq %rax, %rbx
jmp 0x762cd
movq %rax, %rbx
jmp 0x76237
jmp 0x761cd
jmp 0x76209
movq %rax, %rbx
jmp 0x76244
jmp 0x76209
jmp 0x7621f
jmp 0x7621f
jmp 0x761da
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x8978
leaq 0x1a0(%rsp), %rdi
callq 0x8978
jmp 0x762c0
movq %rax, %rbx
jmp 0x76312
jmp 0x76284
jmp 0x76215
movq %rax, %rbx
jmp 0x762e4
jmp 0x7621f
movq %rax, %rbx
jmp 0x762ee
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x28a08
leaq 0x150(%rsp), %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x76312
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x28a08
jmp 0x76312
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
jmp 0x762e9
movq %rax, %rbx
jmp 0x762ae
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x8978
leaq 0x1c0(%rsp), %rdi
callq 0x8978
leaq 0x1a0(%rsp), %rdi
callq 0x8978
leaq 0x180(%rsp), %rdi
callq 0x8978
jmp 0x762da
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x8978
leaq 0x200(%rsp), %rdi
callq 0x28a08
leaq 0x28(%rsp), %rdi
callq 0x28a08
leaq 0x10(%rsp), %rdi
callq 0x28a08
leaq 0x120(%rsp), %rdi
callq 0x33008
leaq 0x150(%rsp), %rdi
callq 0x33008
leaq 0x58(%rsp), %rdi
callq 0x33008
leaq 0xe8(%rsp), %rdi
callq 0x33008
leaq 0xb8(%rsp), %rdi
callq 0x33008
leaq 0x218(%rsp), %rdi
callq 0x8978
leaq 0x1e0(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8870