// File: schneebergerlab[P]DrLink/analyze_molecule.cpp
// Function: analyze_molecule(int, char**)
bool analyze_molecule(int argc, char* argv[])
{
    if(argc != 6)
    {
        cout << "\n   Usage: DrLink molecule preprocessed_bamInfo.gz max_inter_read_dist min_molecule_size out_prefix_str "               << endl;
        cout << "     max_inter_read_dist\tINT\tbp: reads with same barcode but distance >= value will be separated into sub-molecules. " << endl;
        cout << "                             \tThis depends on sequencing library design: if expected mean size of molecules is EXP kp, we can use 1.5*EXP bp." << endl;   
        cout << "     min_molecule_size\tINT\tbp: size of molecules <= value will not contribute to final statistics, e.g., 1000 bp. "    << endl;
        return false;
    }
    clock_t tbeg;
    tbeg = clock();
    bool verbose = true;            // TODO: add option
    unsigned long winsize = 100000; // same barcode in chr with distance>100kb => two molecules; note this depends on sequencing library design
    // input file
    string procbamfile("");    
    int minMoleSize = 1000;
    std::stringstream minMsize;
    minMsize.str("");
    minMsize << minMoleSize;    
    string out_prefix("");
    if(argc == 6)
    {
        procbamfile = (string)argv[2];
        winsize     = strtoul(argv[3], NULL, 0); 
        minMoleSize = atoi(argv[4]);
        out_prefix  = (string)argv[5]; 
        minMsize.str("");
        minMsize << minMoleSize;       
    }
    // step 1. read chr size info
    /*
    map<string, string> chrSizes;
    if(!read_chrsize(chrsizefile.c_str(), &chrSizes))
    {
        cout << "   Error: reading chr size failed (analyze_molecule.cpp). " << endl;
        return false;
    }
    */
    // step 2.
    cout << "   Info: analyzing molecules started..." << endl;
    // open converted file.gz.
    if(procbamfile.find(".gz")==std::string::npos)
    {
        cout << "   Error: current version only supported gzipped file. " << endl;
        return false;
    }
    igzstream alifp;
    alifp.open(procbamfile.c_str());
    if(!alifp.good())
    {
        cout << "   Error: cannot open " << procbamfile << endl;
        return false;
    }
    // 2.1 prepare variable for analyzing/outputing alignments/clusters
    string ofilename = out_prefix + "_min" + minMsize.str() + "bp_molecule_table_trashme.txt.gz";
    ogzstream moutfp;
    moutfp.open(ofilename.c_str(), ios::out);
    if(!moutfp)
    {
        cout << "    Error: cannot open file " << ofilename << " for writing. " << endl;
        return false;
    }
    moutfp << "#chr#barcode\tfirst_aligned\tlast_aligned\tmolecule_len\tmolecule_cov\tread_num\tUni_flag\tlast_aligned_end\treads_region\tR1R2\treads_id" << endl;
    map<string,  unsigned long> molecule_cov;          // key: 0.01x, 0.02x,0.03x, ...,    val: number of molecules
    map<int,     unsigned long> molecule_len;          // key: 0kb, 1kb, 2kb,...           val: number of molecules.
    map<int,     unsigned long> molecule_len_sum;      // key: 0kb, 1kb, 2kb,...           val: total length of molecules in bin 
    map<int,     unsigned long> molecule_read_num;     // key: 1,2,3...                    val: number of molecules
    map<int,     unsigned long> molecule_read_num_sum; // key: 1,2,3...                    val: total length of reads in bin
    // note that below is a statistic of the read-distances within the same chr#barcode (but possibly several molecules).
    map<int,     unsigned long> molecule_read_interval;// key: 200,201,...                 val: total number of cases with that inter-read-distance-given-by-key
    map<string,            int> barcode_molecule_cnt;  // key: barcode1, barcode2,...      val: number of molecules
    multimap<string, ALIGNINFO> bcPosQueue; // from barcode find read-aligning (sta, end)-positions
    // 2.2 cluster existing alignments in queue and output molecule info -- caution in RAM
    string lastChr("");
    string currentChr("");
    unsigned long lineNum = 0;
    while(alifp.good())
    {
        string line("");
        getline(alifp, line);
        if(line.size()==0 || line[0]=='#' || line[0]=='*') continue;
        
        lineNum ++;
        if(lineNum%10000000 == 0) cout << "    " << lineNum << "th aligm..." << endl;
        
        // chr pos inbamCIGAR barcode MI read-ordering:inbamFLAG reversed-align read-id
        // 1	125	128M	TTTCCTCAGGGTTTCT	0	R1:99 rc        idddddd
        vector<string> lineinfo = split_string(line, '\t');
        if(lineinfo.size() < 6) continue;        
        if(lastChr.size() == 0)
        {
            lastChr    = lineinfo[0];
        }
        currentChr = lineinfo[0];        
        
        if(currentChr.compare(lastChr)!=0 && bcPosQueue.size()>0)
        {
            // output alignments for last chr and record statistics
            write_chr_alignment(moutfp,
                                &bcPosQueue, 
                                &molecule_cov,
                                &molecule_len,
                                &molecule_len_sum,
                                &molecule_read_num,
                                &molecule_read_num_sum,
                                &molecule_read_interval,
                                &barcode_molecule_cnt,
                                lastChr,
                                winsize,
                                minMoleSize);
            // clean info for last Chr
            bcPosQueue.clear();
            lastChr = currentChr;
        }
        unsigned long stapos = strtoul(lineinfo[1].c_str(), NULL, 0); // alignment start position
        int covlen = 0;
        covlen = decipher_cigar(lineinfo[2]);                         // covered len by alignment
        string key("");
        key    = lineinfo[0] + "#" + lineinfo[3];                     // chr+"#"+barcode            
        ALIGNINFO span;
        span.first  = stapos;
        span.second = stapos+covlen-1;                                //
        if(lineinfo[5].find("R1") != std::string::npos)
        {
            span.rorder = "1";
        }
        else
        if(lineinfo[5].find("R2") != std::string::npos)
        {
            span.rorder = "2";
        }  
        else
        {
            span.rorder = "x";
        }      
        span.readid = lineinfo[7];
        span.rcigar = lineinfo[2];
        // chr+"#"+barcode => (sta, end) : allow multi-aligns with the same barcode.
        bcPosQueue.insert(std::pair<string, ALIGNINFO>(key, span));
    }
    // output alignments for last chr record statistics
    if(bcPosQueue.size()>0)
    {
        // output alignments for last chr and record statistics
        write_chr_alignment(moutfp,
                            &bcPosQueue, 
                            &molecule_cov,
                            &molecule_len,
                            &molecule_len_sum,
                            &molecule_read_num,       
                            &molecule_read_num_sum, 
                            &molecule_read_interval,                    
                            &barcode_molecule_cnt,
                            lastChr,
                            winsize,
                            minMoleSize);
        // clean info for last Chr
        bcPosQueue.clear();
    }
    //
    alifp.close();
    moutfp.close();    
    // output statistics
    if(!write_molecule_stat(molecule_cov, 
                            molecule_len, 
                            molecule_len_sum,
                            molecule_read_num,
                            molecule_read_num_sum,
                            molecule_read_interval,
                            barcode_molecule_cnt, 
                            out_prefix, 
                            minMoleSize))
    {
        return false;
    }
    //
    cout << "   Info: molecule raw info    collected in " << ofilename << endl;
    cout << "   Info: molecule coverage    collected in"  << out_prefix + "_min" + minMsize.str() + "bp_moleCov_stat.txt" << endl;
    cout << "   Info: molecule length      collected in"  << out_prefix + "_min" + minMsize.str() + "bp_moleLen_stat.txt" << endl;  
    cout << "   Info: molecule read number collected in"  << out_prefix + "_min" + minMsize.str() + "bp_readNum_stat.txt" << endl;  
    cout << "   Info: reads' distances     collected in " << out_prefix + "_min" + minMsize.str() + "bp_readDist_stat.txt" << endl;
    cout << "   Info: time on analyzing molecules: "      << (float)(clock()-tbeg)/CLOCKS_PER_SEC << " seconds.\n" << endl;        
    return true;
}

// Assembly:
subq $0x1188, %rsp           # imm = 0x1188
movl %edi, 0x1180(%rsp)
movq %rsi, 0x1178(%rsp)
cmpl $0x6, 0x1180(%rsp)
je 0x8e99
movq 0x7c1bd(%rip), %rdi     # 0x84fc8
leaq 0x5dac6(%rip), %rsi     # 0x668d8
callq 0x5460
movq %rax, %rdi
movq 0x7c18f(%rip), %rsi     # 0x84fb0
callq 0x54b0
movq 0x7c19b(%rip), %rdi     # 0x84fc8
leaq 0x5db0d(%rip), %rsi     # 0x66941
callq 0x5460
movq %rax, %rdi
movq 0x7c16d(%rip), %rsi     # 0x84fb0
callq 0x54b0
movq 0x7c179(%rip), %rdi     # 0x84fc8
leaq 0x5db61(%rip), %rsi     # 0x669b7
callq 0x5460
movq %rax, %rdi
movq 0x7c14b(%rip), %rsi     # 0x84fb0
callq 0x54b0
movq 0x7c157(%rip), %rdi     # 0x84fc8
leaq 0x5dbcd(%rip), %rsi     # 0x66a45
callq 0x5460
movq %rax, %rdi
movq 0x7c129(%rip), %rsi     # 0x84fb0
callq 0x54b0
movb $0x0, 0x1187(%rsp)
jmp 0xacb7
callq 0x52e0
movq %rax, 0x1170(%rsp)
movb $0x1, 0x116f(%rsp)
movq $0x186a0, 0x1160(%rsp) # imm = 0x186A0
leaq 0x113f(%rsp), %rdi
movq %rdi, 0x1a8(%rsp)
callq 0x57c0
movq 0x1a8(%rsp), %rdx
leaq 0x61cb6(%rip), %rsi     # 0x6ab94
leaq 0x1140(%rsp), %rdi
callq 0x6880
jmp 0x8eed
leaq 0x113f(%rsp), %rdi
callq 0x54d0
movl $0x3e8, 0x1128(%rsp) # imm = 0x3E8
leaq 0xfa0(%rsp), %rdi
callq 0x5320
jmp 0x8f14
leaq 0xf7f(%rsp), %rdi
movq %rdi, 0x1a0(%rsp)
callq 0x57c0
movq 0x1a0(%rsp), %rdx
leaq 0x61c5c(%rip), %rsi     # 0x6ab94
leaq 0xf80(%rsp), %rdi
callq 0x6880
jmp 0x8f47
leaq 0xfa0(%rsp), %rdi
leaq 0xf80(%rsp), %rsi
callq 0x5510
jmp 0x8f5e
leaq 0xf80(%rsp), %rdi
callq 0x58b8
leaq 0xf7f(%rsp), %rdi
callq 0x54d0
leaq 0xfb0(%rsp), %rdi
movl 0x1128(%rsp), %esi
callq 0x5790
jmp 0x8f8e
leaq 0xf57(%rsp), %rdi
movq %rdi, 0x198(%rsp)
callq 0x57c0
movq 0x198(%rsp), %rdx
leaq 0x61be2(%rip), %rsi     # 0x6ab94
leaq 0xf58(%rsp), %rdi
callq 0x6880
jmp 0x8fc1
leaq 0xf57(%rsp), %rdi
callq 0x54d0
cmpl $0x6, 0x1180(%rsp)
jne 0x9303
movq 0x1178(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x188(%rsp)
leaq 0xf2f(%rsp), %rdi
movq %rdi, 0x190(%rsp)
callq 0x57c0
movq 0x188(%rsp), %rsi
movq 0x190(%rsp), %rdx
leaq 0xf30(%rsp), %rdi
callq 0x6880
jmp 0x9024
leaq 0x1140(%rsp), %rdi
leaq 0xf30(%rsp), %rsi
movq %rsi, 0x170(%rsp)
callq 0x5550
movq 0x170(%rsp), %rdi
callq 0x58b8
leaq 0xf2f(%rsp), %rdi
callq 0x54d0
movq 0x1178(%rsp), %rax
movq 0x18(%rax), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x5160
movq %rax, 0x1160(%rsp)
movq 0x1178(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x56a0
movl %eax, 0x1128(%rsp)
movq 0x1178(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, 0x178(%rsp)
leaq 0xf07(%rsp), %rdi
movq %rdi, 0x180(%rsp)
callq 0x57c0
movq 0x178(%rsp), %rsi
movq 0x180(%rsp), %rdx
leaq 0xf08(%rsp), %rdi
callq 0x6880
jmp 0x90d8
leaq 0xf58(%rsp), %rdi
leaq 0xf08(%rsp), %rsi
movq %rsi, 0x160(%rsp)
callq 0x5550
movq 0x160(%rsp), %rdi
callq 0x58b8
leaq 0xf07(%rsp), %rdi
callq 0x54d0
leaq 0xedf(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x57c0
movq 0x168(%rsp), %rdx
leaq 0x61a61(%rip), %rsi     # 0x6ab94
leaq 0xee0(%rsp), %rdi
callq 0x6880
jmp 0x9142
leaq 0xfa0(%rsp), %rdi
leaq 0xee0(%rsp), %rsi
callq 0x5510
jmp 0x9159
leaq 0xee0(%rsp), %rdi
callq 0x58b8
leaq 0xedf(%rsp), %rdi
callq 0x54d0
leaq 0xfb0(%rsp), %rdi
movl 0x1128(%rsp), %esi
callq 0x5790
jmp 0x9189
jmp 0x9303
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x113f(%rsp), %rdi
callq 0x54d0
jmp 0xacc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaca8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0x9204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xf80(%rsp), %rdi
callq 0x58b8
leaq 0xf7f(%rsp), %rdi
callq 0x54d0
jmp 0xac9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xac9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xf57(%rsp), %rdi
callq 0x54d0
jmp 0xac9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xf2f(%rsp), %rdi
callq 0x54d0
jmp 0xac8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xf07(%rsp), %rdi
callq 0x54d0
jmp 0xac8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0x92d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xee0(%rsp), %rdi
callq 0x58b8
leaq 0xedf(%rsp), %rdi
callq 0x54d0
jmp 0xac8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xac8e
movq 0x7bcbe(%rip), %rdi     # 0x84fc8
leaq 0x5d7a7(%rip), %rsi     # 0x66ab8
callq 0x5460
movq %rax, 0x158(%rsp)
jmp 0x9320
movq 0x158(%rsp), %rdi
movq 0x7bc81(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x9336
leaq 0x1140(%rsp), %rdi
leaq 0x5d0f2(%rip), %rsi     # 0x66437
xorl %eax, %eax
movl %eax, %edx
callq 0x5870
cmpq $-0x1, %rax
jne 0x939f
movq 0x7bc6d(%rip), %rdi     # 0x84fc8
leaq 0x5d77e(%rip), %rsi     # 0x66ae0
callq 0x5460
movq %rax, 0x150(%rsp)
jmp 0x9371
movq 0x150(%rsp), %rdi
movq 0x7bc30(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x9387
movb $0x0, 0x1187(%rsp)
movl $0x1, 0xed8(%rsp)
jmp 0xac65
leaq 0xc38(%rsp), %rdi
callq 0xf8b0
jmp 0x93ae
leaq 0x1140(%rsp), %rdi
callq 0x51d0
movq %rax, %rsi
leaq 0xc38(%rsp), %rdi
movl $0x8, %edx
callq 0xf9c0
jmp 0x93d2
movq 0xc38(%rsp), %rax
movq -0x18(%rax), %rax
leaq 0xc38(%rsp,%rax), %rdi
callq 0x5760
movb %al, 0x14f(%rsp)
jmp 0x93f4
movb 0x14f(%rsp), %al
testb $0x1, %al
jne 0x9488
jmp 0x9405
movq 0x7bbbc(%rip), %rdi     # 0x84fc8
leaq 0x5d705(%rip), %rsi     # 0x66b18
callq 0x5460
movq %rax, 0x140(%rsp)
jmp 0x9422
movq 0x140(%rsp), %rdi
leaq 0x1140(%rsp), %rsi
callq 0x53e0
movq %rax, 0x138(%rsp)
jmp 0x9441
movq 0x138(%rsp), %rdi
movq 0x7bb60(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x9457
movb $0x0, 0x1187(%rsp)
movl $0x1, 0xed8(%rsp)
jmp 0xac47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xac56
leaq 0x5d6a0(%rip), %rdx     # 0x66b2f
leaq 0xbd8(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0xfae0
jmp 0x94a6
leaq 0xbb8(%rsp), %rdi
leaq 0xfa0(%rsp), %rsi
callq 0x5440
jmp 0x94bd
leaq 0xbf8(%rsp), %rdi
leaq 0xbd8(%rsp), %rsi
leaq 0xbb8(%rsp), %rdx
callq 0xf9f0
jmp 0x94dc
leaq 0x5d651(%rip), %rdx     # 0x66b34
leaq 0xc18(%rsp), %rdi
leaq 0xbf8(%rsp), %rsi
callq 0x8760
jmp 0x94fa
leaq 0xbf8(%rsp), %rdi
callq 0x58b8
leaq 0xbb8(%rsp), %rdi
callq 0x58b8
leaq 0xbd8(%rsp), %rdi
callq 0x58b8
leaq 0x920(%rsp), %rdi
callq 0x87b0
jmp 0x9530
leaq 0xc18(%rsp), %rdi
callq 0x51d0
movq %rax, %rsi
leaq 0x920(%rsp), %rdi
movl $0x10, %edx
callq 0x88c0
jmp 0x9554
movq 0x920(%rsp), %rax
movq -0x18(%rax), %rax
leaq 0x920(%rsp,%rax), %rdi
callq 0x5220
movb %al, 0x137(%rsp)
jmp 0x9576
movb 0x137(%rsp), %al
testb $0x1, %al
jne 0x9586
jmp 0x96ac
movq 0x7ba3b(%rip), %rdi     # 0x84fc8
leaq 0x5d5c1(%rip), %rsi     # 0x66b55
callq 0x5460
movq %rax, 0x128(%rsp)
jmp 0x95a3
movq 0x128(%rsp), %rdi
leaq 0xc18(%rsp), %rsi
callq 0x53e0
movq %rax, 0x120(%rsp)
jmp 0x95c2
movq 0x120(%rsp), %rdi
leaq 0x5d5a1(%rip), %rsi     # 0x66b72
callq 0x5460
movq %rax, 0x118(%rsp)
jmp 0x95e0
movq 0x118(%rsp), %rdi
movq 0x7b9c1(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x95f6
movb $0x0, 0x1187(%rsp)
movl $0x1, 0xed8(%rsp)
jmp 0xac0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0x9668
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0x965b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0xbf8(%rsp), %rdi
callq 0x58b8
leaq 0xbb8(%rsp), %rdi
callq 0x58b8
leaq 0xbd8(%rsp), %rdi
callq 0x58b8
jmp 0xac56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xac38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xac2b
leaq 0xaa8(%rsp), %rdi
leaq 0x5d4c6(%rip), %rsi     # 0x66b81
callq 0x5460
movq %rax, 0x110(%rsp)
jmp 0x96ca
movq 0x110(%rsp), %rdi
movq 0x7b8d7(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x96e0
leaq 0x8f0(%rsp), %rdi
callq 0xfb70
leaq 0x8c0(%rsp), %rdi
callq 0xfb80
leaq 0x890(%rsp), %rdi
callq 0xfb80
leaq 0x860(%rsp), %rdi
callq 0xfb80
leaq 0x830(%rsp), %rdi
callq 0xfb80
leaq 0x800(%rsp), %rdi
callq 0xfb80
leaq 0x7d0(%rsp), %rdi
callq 0xfb90
leaq 0x7a0(%rsp), %rdi
callq 0xfba0
leaq 0x77f(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x57c0
movq 0x108(%rsp), %rdx
leaq 0x61428(%rip), %rsi     # 0x6ab94
leaq 0x780(%rsp), %rdi
callq 0x6880
jmp 0x977b
leaq 0x77f(%rsp), %rdi
callq 0x54d0
leaq 0x757(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x57c0
movq 0x100(%rsp), %rdx
leaq 0x613e8(%rip), %rsi     # 0x6ab94
leaq 0x758(%rsp), %rdi
callq 0x6880
jmp 0x97bb
leaq 0x757(%rsp), %rdi
callq 0x54d0
movq $0x0, 0x748(%rsp)
movq 0xc38(%rsp), %rax
movq -0x18(%rax), %rax
leaq 0xc38(%rsp,%rax), %rdi
callq 0x5760
movb %al, 0xff(%rsp)
jmp 0x97f6
movb 0xff(%rsp), %al
testb $0x1, %al
jne 0x9806
jmp 0xa043
leaq 0x727(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x57c0
movq 0xf0(%rsp), %rdx
leaq 0x6136a(%rip), %rsi     # 0x6ab94
leaq 0x728(%rsp), %rdi
callq 0x6880
jmp 0x9839
leaq 0x727(%rsp), %rdi
callq 0x54d0
leaq 0xdc0(%rsp), %rdi
leaq 0x728(%rsp), %rsi
callq 0x50c0
jmp 0x985d
leaq 0x728(%rsp), %rdi
callq 0x5310
cmpq $0x0, %rax
je 0x98ca
xorl %eax, %eax
movl %eax, %esi
leaq 0x728(%rsp), %rdi
callq 0x5880
movq %rax, 0xe8(%rsp)
jmp 0x988b
movq 0xe8(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0x98ca
xorl %eax, %eax
movl %eax, %esi
leaq 0x728(%rsp), %rdi
callq 0x5880
movq %rax, 0xe0(%rsp)
jmp 0x98b6
movq 0xe0(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x2a, %eax
jne 0x997e
movl $0x2, 0xed8(%rsp)
jmp 0x9fc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x77f(%rsp), %rdi
callq 0x54d0
jmp 0xaba5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x757(%rsp), %rdi
callq 0x54d0
jmp 0xab98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xab8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x727(%rsp), %rdi
callq 0x54d0
jmp 0xab8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa031
movq 0x748(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x748(%rsp)
movq 0x748(%rsp), %rax
movl $0x989680, %ecx         # imm = 0x989680
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0x9a1c
movq 0x7b617(%rip), %rdi     # 0x84fc8
leaq 0x5ea68(%rip), %rsi     # 0x68420
callq 0x5460
movq %rax, 0xd8(%rsp)
jmp 0x99c7
movq 0xd8(%rsp), %rdi
movq 0x748(%rsp), %rsi
callq 0x50f0
movq %rax, 0xd0(%rsp)
jmp 0x99e6
movq 0xd0(%rsp), %rdi
leaq 0x5cacc(%rip), %rsi     # 0x664c1
callq 0x5460
movq %rax, 0xc8(%rsp)
jmp 0x9a04
movq 0xc8(%rsp), %rdi
movq 0x7b59d(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0x9a1a
jmp 0x9a1c
movb $0x9, 0x707(%rsp)
leaq 0x708(%rsp), %rdi
leaq 0x728(%rsp), %rsi
leaq 0x707(%rsp), %rdx
callq 0x60790
jmp 0x9a43
leaq 0x708(%rsp), %rdi
callq 0xfbb0
cmpq $0x6, %rax
jae 0x9a66
movl $0x2, 0xed8(%rsp)
jmp 0x9fb8
leaq 0x780(%rsp), %rdi
callq 0x5310
cmpq $0x0, %rax
jne 0x9ab7
xorl %eax, %eax
movl %eax, %esi
leaq 0x708(%rsp), %rdi
callq 0x88f0
movq %rax, %rsi
leaq 0x780(%rsp), %rdi
callq 0x5050
jmp 0x9a9c
jmp 0x9ab7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa024
xorl %eax, %eax
movl %eax, %esi
leaq 0x708(%rsp), %rdi
callq 0x88f0
movq %rax, %rsi
leaq 0x758(%rsp), %rdi
callq 0x5050
jmp 0x9ada
leaq 0x758(%rsp), %rdi
leaq 0x780(%rsp), %rsi
callq 0x5040
movl %eax, 0xc4(%rsp)
jmp 0x9af8
movl 0xc4(%rsp), %eax
cmpl $0x0, %eax
je 0x9c0e
leaq 0x7a0(%rsp), %rdi
callq 0xfbd0
cmpq $0x0, %rax
jbe 0x9c0e
leaq 0x6e0(%rsp), %rdi
leaq 0x780(%rsp), %rsi
callq 0x51f0
jmp 0x9b36
movq 0x1160(%rsp), %rcx
movl 0x1128(%rsp), %edx
movq %rsp, %rax
movl %edx, 0x28(%rax)
movq %rcx, 0x20(%rax)
leaq 0x6e0(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x7d0(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x800(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x830(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x920(%rsp), %rdi
leaq 0x7a0(%rsp), %rsi
leaq 0x8f0(%rsp), %rdx
leaq 0x8c0(%rsp), %rcx
leaq 0x890(%rsp), %r8
leaq 0x860(%rsp), %r9
callq 0xace0
jmp 0x9bb5
leaq 0x6e0(%rsp), %rdi
callq 0x58b8
leaq 0x7a0(%rsp), %rdi
callq 0xfbe0
leaq 0x780(%rsp), %rdi
leaq 0x758(%rsp), %rsi
callq 0x5050
jmp 0x9be6
jmp 0x9c0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x6e0(%rsp), %rdi
callq 0x58b8
jmp 0xa024
leaq 0x708(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
movl $0x1, %esi
callq 0x88f0
movq %rax, %rdi
callq 0x51d0
movq %rax, %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x5160
movq 0xb8(%rsp), %rdi
movq %rax, 0x6d8(%rsp)
movl $0x0, 0x6d4(%rsp)
movl $0x2, %esi
callq 0x88f0
movq %rax, %rsi
leaq 0x6b0(%rsp), %rdi
callq 0x51f0
jmp 0x9c73
leaq 0x6b0(%rsp), %rdi
callq 0xdf90
movl %eax, 0xb4(%rsp)
jmp 0x9c89
movl 0xb4(%rsp), %eax
movl %eax, 0x6d4(%rsp)
leaq 0x6b0(%rsp), %rdi
callq 0x58b8
leaq 0x68f(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x57c0
movq 0xa8(%rsp), %rdx
leaq 0x60ecc(%rip), %rsi     # 0x6ab94
leaq 0x690(%rsp), %rdi
callq 0x6880
jmp 0x9cd7
leaq 0x68f(%rsp), %rdi
callq 0x54d0
xorl %eax, %eax
movl %eax, %esi
leaq 0x708(%rsp), %rdi
callq 0x88f0
movq %rax, %rsi
leaq 0x61363(%rip), %rdx     # 0x6b062
leaq 0x648(%rsp), %rdi
callq 0xfae0
jmp 0x9d0e
leaq 0x708(%rsp), %rdi
movl $0x3, %esi
callq 0x88f0
movq %rax, %rdx
leaq 0x668(%rsp), %rdi
leaq 0x648(%rsp), %rsi
callq 0xfbf0
jmp 0x9d3a
leaq 0x690(%rsp), %rdi
leaq 0x668(%rsp), %rsi
callq 0x5550
leaq 0x668(%rsp), %rdi
callq 0x58b8
leaq 0x648(%rsp), %rdi
callq 0x58b8
leaq 0x5d8(%rsp), %rdi
callq 0xfc40
movq 0x6d8(%rsp), %rax
movq %rax, 0x5d8(%rsp)
movq 0x6d8(%rsp), %rax
movslq 0x6d4(%rsp), %rcx
addq %rcx, %rax
subq $0x1, %rax
movq %rax, 0x5e0(%rsp)
leaq 0x708(%rsp), %rdi
movl $0x5, %esi
callq 0x88f0
movq %rax, %rdi
leaq 0x5c8eb(%rip), %rsi     # 0x666ac
xorl %eax, %eax
movl %eax, %edx
callq 0x5870
cmpq $-0x1, %rax
je 0x9e93
leaq 0x5e8(%rsp), %rdi
leaq 0x5c85e(%rip), %rsi     # 0x66641
callq 0x55d0
jmp 0x9dea
jmp 0x9ef0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x6b0(%rsp), %rdi
callq 0x58b8
jmp 0xa024
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x68f(%rsp), %rdi
callq 0x54d0
jmp 0xa024
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa017
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x648(%rsp), %rdi
callq 0x58b8
jmp 0xa017
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa00a
leaq 0x708(%rsp), %rdi
movl $0x5, %esi
callq 0x88f0
movq %rax, %rdi
leaq 0x5c800(%rip), %rsi     # 0x666af
xorl %eax, %eax
movl %eax, %edx
callq 0x5870
cmpq $-0x1, %rax
je 0x9ed6
leaq 0x5e8(%rsp), %rdi
leaq 0x610c0(%rip), %rsi     # 0x6af8d
callq 0x55d0
jmp 0x9ed4
jmp 0x9eee
leaq 0x5e8(%rsp), %rdi
leaq 0x60e27(%rip), %rsi     # 0x6ad0c
callq 0x55d0
jmp 0x9eec
jmp 0x9eee
jmp 0x9ef0
leaq 0x708(%rsp), %rdi
movl $0x7, %esi
callq 0x88f0
movq %rax, %rsi
leaq 0x608(%rsp), %rdi
callq 0x5050
jmp 0x9f14
leaq 0x708(%rsp), %rdi
movl $0x2, %esi
callq 0x88f0
movq %rax, %rsi
leaq 0x628(%rsp), %rdi
callq 0x5050
jmp 0x9f38
leaq 0x548(%rsp), %rdi
leaq 0x690(%rsp), %rsi
leaq 0x5d8(%rsp), %rdx
callq 0xfcb0
jmp 0x9f57
leaq 0x7a0(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0xfc80
movq %rax, 0xa0(%rsp)
jmp 0x9f76
movq 0xa0(%rsp), %rax
movq %rax, 0x540(%rsp)
leaq 0x548(%rsp), %rdi
callq 0xfd20
leaq 0x5d8(%rsp), %rdi
callq 0xfd50
leaq 0x690(%rsp), %rdi
callq 0x58b8
movl $0x0, 0xed8(%rsp)
leaq 0x708(%rsp), %rdi
callq 0x8910
leaq 0x728(%rsp), %rdi
callq 0x58b8
movl 0xed8(%rsp), %eax
testl %eax, %eax
je 0x9fe4
jmp 0x9fdf
jmp 0x97d4
jmp 0x97d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x548(%rsp), %rdi
callq 0xfd20
leaq 0x5d8(%rsp), %rdi
callq 0xfd50
leaq 0x690(%rsp), %rdi
callq 0x58b8
leaq 0x708(%rsp), %rdi
callq 0x8910
leaq 0x728(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
leaq 0x7a0(%rsp), %rdi
callq 0xfbd0
cmpq $0x0, %rax
jbe 0xa132
leaq 0x520(%rsp), %rdi
leaq 0x780(%rsp), %rsi
callq 0x51f0
jmp 0xa071
movq 0x1160(%rsp), %rcx
movl 0x1128(%rsp), %edx
movq %rsp, %rax
movl %edx, 0x28(%rax)
movq %rcx, 0x20(%rax)
leaq 0x520(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x7d0(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x800(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x830(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x920(%rsp), %rdi
leaq 0x7a0(%rsp), %rsi
leaq 0x8f0(%rsp), %rdx
leaq 0x8c0(%rsp), %rcx
leaq 0x890(%rsp), %r8
leaq 0x860(%rsp), %r9
callq 0xace0
jmp 0xa0f0
leaq 0x520(%rsp), %rdi
callq 0x58b8
leaq 0x7a0(%rsp), %rdi
callq 0xfbe0
jmp 0xa132
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x520(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
leaq 0xc38(%rsp), %rdi
callq 0x65264
jmp 0xa141
leaq 0x920(%rsp), %rdi
callq 0x65264
jmp 0xa150
leaq 0x4f0(%rsp), %rdi
leaq 0x8f0(%rsp), %rsi
callq 0xfd90
jmp 0xa167
leaq 0x4c0(%rsp), %rdi
leaq 0x8c0(%rsp), %rsi
callq 0xfdc0
jmp 0xa17e
leaq 0x490(%rsp), %rdi
leaq 0x890(%rsp), %rsi
callq 0xfdc0
jmp 0xa195
leaq 0x460(%rsp), %rdi
leaq 0x860(%rsp), %rsi
callq 0xfdc0
jmp 0xa1ac
leaq 0x430(%rsp), %rdi
leaq 0x830(%rsp), %rsi
callq 0xfdc0
jmp 0xa1c3
leaq 0x400(%rsp), %rdi
leaq 0x800(%rsp), %rsi
callq 0xfdc0
jmp 0xa1da
leaq 0x3d0(%rsp), %rdi
leaq 0x7d0(%rsp), %rsi
callq 0xfdf0
jmp 0xa1f1
leaq 0x3b0(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0x51f0
jmp 0xa208
movl 0x1128(%rsp), %ecx
movq %rsp, %rax
movl %ecx, 0x10(%rax)
leaq 0x3b0(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x3d0(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x4f0(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
leaq 0x490(%rsp), %rdx
leaq 0x460(%rsp), %rcx
leaq 0x430(%rsp), %r8
leaq 0x400(%rsp), %r9
callq 0xe1a0
movb %al, 0x9f(%rsp)
jmp 0xa26a
movb 0x9f(%rsp), %al
xorb $-0x1, %al
movb %al, 0x9e(%rsp)
leaq 0x3b0(%rsp), %rdi
callq 0x58b8
leaq 0x3d0(%rsp), %rdi
callq 0xfe20
leaq 0x400(%rsp), %rdi
callq 0xfe30
leaq 0x430(%rsp), %rdi
callq 0xfe30
leaq 0x460(%rsp), %rdi
callq 0xfe30
leaq 0x490(%rsp), %rdi
callq 0xfe30
leaq 0x4c0(%rsp), %rdi
callq 0xfe30
leaq 0x4f0(%rsp), %rdi
callq 0xfe40
movb 0x9e(%rsp), %al
testb $0x1, %al
jne 0xa2f2
jmp 0xa431
movb $0x0, 0x1187(%rsp)
movl $0x1, 0xed8(%rsp)
jmp 0xab04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa41f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa412
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa3f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa3eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa3de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa3d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x3b0(%rsp), %rdi
callq 0x58b8
leaq 0x3d0(%rsp), %rdi
callq 0xfe20
leaq 0x400(%rsp), %rdi
callq 0xfe30
leaq 0x430(%rsp), %rdi
callq 0xfe30
leaq 0x460(%rsp), %rdi
callq 0xfe30
leaq 0x490(%rsp), %rdi
callq 0xfe30
leaq 0x4c0(%rsp), %rdi
callq 0xfe30
leaq 0x4f0(%rsp), %rdi
callq 0xfe40
jmp 0xab8b
movq 0x7ab90(%rip), %rdi     # 0x84fc8
leaq 0x5c7c2(%rip), %rsi     # 0x66c01
callq 0x5460
movq %rax, 0x90(%rsp)
jmp 0xa44e
movq 0x90(%rsp), %rdi
leaq 0xc18(%rsp), %rsi
callq 0x53e0
movq %rax, 0x88(%rsp)
jmp 0xa46d
movq 0x88(%rsp), %rdi
movq 0x7ab34(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa483
movq 0x7ab3e(%rip), %rdi     # 0x84fc8
leaq 0x5c79c(%rip), %rsi     # 0x66c2d
callq 0x5460
movq %rax, 0x80(%rsp)
jmp 0xa4a0
leaq 0x5c688(%rip), %rdx     # 0x66b2f
leaq 0x350(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0xfae0
jmp 0xa4be
leaq 0x330(%rsp), %rdi
leaq 0xfa0(%rsp), %rsi
callq 0x5440
jmp 0xa4d5
leaq 0x370(%rsp), %rdi
leaq 0x350(%rsp), %rsi
leaq 0x330(%rsp), %rdx
callq 0xf9f0
jmp 0xa4f4
leaq 0x5c75d(%rip), %rdx     # 0x66c58
leaq 0x390(%rsp), %rdi
leaq 0x370(%rsp), %rsi
callq 0x8760
jmp 0xa512
movq 0x80(%rsp), %rdi
leaq 0x390(%rsp), %rsi
callq 0x53e0
movq %rax, 0x78(%rsp)
jmp 0xa52e
movq 0x78(%rsp), %rdi
movq 0x7aa76(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa541
leaq 0x390(%rsp), %rdi
callq 0x58b8
leaq 0x370(%rsp), %rdi
callq 0x58b8
leaq 0x330(%rsp), %rdi
callq 0x58b8
leaq 0x350(%rsp), %rdi
callq 0x58b8
movq 0x7aa4c(%rip), %rdi     # 0x84fc8
leaq 0x5c6e9(%rip), %rsi     # 0x66c6c
callq 0x5460
movq %rax, 0x70(%rsp)
jmp 0xa58f
leaq 0x5c599(%rip), %rdx     # 0x66b2f
leaq 0x2d0(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0xfae0
jmp 0xa5ad
leaq 0x2b0(%rsp), %rdi
leaq 0xfa0(%rsp), %rsi
callq 0x5440
jmp 0xa5c4
leaq 0x2f0(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
leaq 0x2b0(%rsp), %rdx
callq 0xf9f0
jmp 0xa5e3
leaq 0x5c6ad(%rip), %rdx     # 0x66c97
leaq 0x310(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x8760
jmp 0xa601
movq 0x70(%rsp), %rdi
leaq 0x310(%rsp), %rsi
callq 0x53e0
movq %rax, 0x68(%rsp)
jmp 0xa61a
movq 0x68(%rsp), %rdi
movq 0x7a98a(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa62d
leaq 0x310(%rsp), %rdi
callq 0x58b8
leaq 0x2f0(%rsp), %rdi
callq 0x58b8
leaq 0x2b0(%rsp), %rdi
callq 0x58b8
leaq 0x2d0(%rsp), %rdi
callq 0x58b8
movq 0x7a960(%rip), %rdi     # 0x84fc8
leaq 0x5c63c(%rip), %rsi     # 0x66cab
callq 0x5460
movq %rax, 0x60(%rsp)
jmp 0xa67b
leaq 0x5c4ad(%rip), %rdx     # 0x66b2f
leaq 0x250(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0xfae0
jmp 0xa699
leaq 0x230(%rsp), %rdi
leaq 0xfa0(%rsp), %rsi
callq 0x5440
jmp 0xa6b0
leaq 0x270(%rsp), %rdi
leaq 0x250(%rsp), %rsi
leaq 0x230(%rsp), %rdx
callq 0xf9f0
jmp 0xa6cf
leaq 0x5c600(%rip), %rdx     # 0x66cd6
leaq 0x290(%rsp), %rdi
leaq 0x270(%rsp), %rsi
callq 0x8760
jmp 0xa6ed
movq 0x60(%rsp), %rdi
leaq 0x290(%rsp), %rsi
callq 0x53e0
movq %rax, 0x58(%rsp)
jmp 0xa706
movq 0x58(%rsp), %rdi
movq 0x7a89e(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa719
leaq 0x290(%rsp), %rdi
callq 0x58b8
leaq 0x270(%rsp), %rdi
callq 0x58b8
leaq 0x230(%rsp), %rdi
callq 0x58b8
leaq 0x250(%rsp), %rdi
callq 0x58b8
movq 0x7a874(%rip), %rdi     # 0x84fc8
leaq 0x5c58f(%rip), %rsi     # 0x66cea
callq 0x5460
movq %rax, 0x50(%rsp)
jmp 0xa767
leaq 0x5c3c1(%rip), %rdx     # 0x66b2f
leaq 0x1d0(%rsp), %rdi
leaq 0xf58(%rsp), %rsi
callq 0xfae0
jmp 0xa785
leaq 0x1b0(%rsp), %rdi
leaq 0xfa0(%rsp), %rsi
callq 0x5440
jmp 0xa79c
leaq 0x1f0(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
leaq 0x1b0(%rsp), %rdx
callq 0xf9f0
jmp 0xa7bb
leaq 0x5c554(%rip), %rdx     # 0x66d16
leaq 0x210(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x8760
jmp 0xa7d9
movq 0x50(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x53e0
movq %rax, 0x48(%rsp)
jmp 0xa7f2
movq 0x48(%rsp), %rdi
movq 0x7a7b2(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa805
leaq 0x210(%rsp), %rdi
callq 0x58b8
leaq 0x1f0(%rsp), %rdi
callq 0x58b8
leaq 0x1b0(%rsp), %rdi
callq 0x58b8
leaq 0x1d0(%rsp), %rdi
callq 0x58b8
movq 0x7a788(%rip), %rdi     # 0x84fc8
leaq 0x5c4e4(%rip), %rsi     # 0x66d2b
callq 0x5460
movq %rax, 0x40(%rsp)
jmp 0xa853
callq 0x52e0
movq 0x40(%rsp), %rdi
movq 0x1170(%rsp), %rcx
subq %rcx, %rax
cvtsi2ss %rax, %xmm0
movss 0x5bb17(%rip), %xmm1    # 0x6638c
divss %xmm1, %xmm0
callq 0x5340
movq %rax, 0x38(%rsp)
jmp 0xa885
movq 0x38(%rsp), %rdi
leaq 0x5c026(%rip), %rsi     # 0x668b7
callq 0x5460
movq %rax, 0x30(%rsp)
jmp 0xa89d
movq 0x30(%rsp), %rdi
movq 0x7a707(%rip), %rsi     # 0x84fb0
callq 0x54b0
jmp 0xa8b0
movb $0x1, 0x1187(%rsp)
movl $0x1, 0xed8(%rsp)
jmp 0xab04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa945
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa938
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa92b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x58b8
leaq 0x370(%rsp), %rdi
callq 0x58b8
leaq 0x330(%rsp), %rdi
callq 0x58b8
leaq 0x350(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa9d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa9c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xa9ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x310(%rsp), %rdi
callq 0x58b8
leaq 0x2f0(%rsp), %rdi
callq 0x58b8
leaq 0x2b0(%rsp), %rdi
callq 0x58b8
leaq 0x2d0(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaa63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaa56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaa49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x290(%rsp), %rdi
callq 0x58b8
leaq 0x270(%rsp), %rdi
callq 0x58b8
leaq 0x230(%rsp), %rdi
callq 0x58b8
leaq 0x250(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaaf2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaae5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
jmp 0xaad8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1130(%rsp)
movl %eax, 0x112c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x58b8
leaq 0x1f0(%rsp), %rdi
callq 0x58b8
leaq 0x1b0(%rsp), %rdi
callq 0x58b8
leaq 0x1d0(%rsp), %rdi
callq 0x58b8
jmp 0xab8b
leaq 0x758(%rsp), %rdi
callq 0x58b8
leaq 0x780(%rsp), %rdi
callq 0x58b8
leaq 0x7a0(%rsp), %rdi
callq 0xfe50
leaq 0x7d0(%rsp), %rdi
callq 0xfe20
leaq 0x800(%rsp), %rdi
callq 0xfe30
leaq 0x830(%rsp), %rdi
callq 0xfe30
leaq 0x860(%rsp), %rdi
callq 0xfe30
leaq 0x890(%rsp), %rdi
callq 0xfe30
leaq 0x8c0(%rsp), %rdi
callq 0xfe30
leaq 0x8f0(%rsp), %rdi
callq 0xfe40
jmp 0xac0f
leaq 0x758(%rsp), %rdi
callq 0x58b8
leaq 0x780(%rsp), %rdi
callq 0x58b8
leaq 0x7a0(%rsp), %rdi
callq 0xfe50
leaq 0x7d0(%rsp), %rdi
callq 0xfe20
leaq 0x800(%rsp), %rdi
callq 0xfe30
leaq 0x830(%rsp), %rdi
callq 0xfe30
leaq 0x860(%rsp), %rdi
callq 0xfe30
leaq 0x890(%rsp), %rdi
callq 0xfe30
leaq 0x8c0(%rsp), %rdi
callq 0xfe30
leaq 0x8f0(%rsp), %rdi
callq 0xfe40
jmp 0xac2b
leaq 0x920(%rsp), %rdi
callq 0x8970
leaq 0xc18(%rsp), %rdi
callq 0x58b8
jmp 0xac47
leaq 0x920(%rsp), %rdi
callq 0x8970
leaq 0xc18(%rsp), %rdi
callq 0x58b8
jmp 0xac56
leaq 0xc38(%rsp), %rdi
callq 0xfe60
jmp 0xac65
leaq 0xc38(%rsp), %rdi
callq 0xfe60
jmp 0xac8e
leaq 0xf58(%rsp), %rdi
callq 0x58b8
leaq 0xfa0(%rsp), %rdi
callq 0x5350
leaq 0x1140(%rsp), %rdi
callq 0x58b8
jmp 0xacb7
leaq 0xf58(%rsp), %rdi
callq 0x58b8
leaq 0xfa0(%rsp), %rdi
callq 0x5350
leaq 0x1140(%rsp), %rdi
callq 0x58b8
jmp 0xacc8
movb 0x1187(%rsp), %al
andb $0x1, %al
addq $0x1188, %rsp           # imm = 0x1188
retq
movq 0x1130(%rsp), %rdi
callq 0x57b0
nopw %cs:(%rax,%rax)