// File: /workspace/github_cpp_makefile_star2_O2/schneebergerlab[P]DrLink/analyze_molecule.cpp
// Function: write_chr_alignment(ogzstream&, std::multimap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ALIGNINFO, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, ALIGNINFO>>>*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, unsigned long, int)
bool write_chr_alignment(ogzstream& moutfp,
                         multimap<string, ALIGNINFO>* bcPosQueue, 
                         map<string, unsigned long>* molecule_cov,
                         map<int,    unsigned long>* molecule_len,
                         map<int,    unsigned long>* molecule_len_sum, 
                         map<int,    unsigned long>* molecule_read_num,
                         map<int,    unsigned long>* molecule_read_num_sum,
                         map<int,    unsigned long>* molecule_read_interval,
                         map<string, int>*           barcode_molecule_cnt,
                         string lastChr,
                         unsigned long winsize,
                         int minMoleSize)
{
    // bcPosQueue: multimap<chr#barcode, <read.align.start, read.align.end> >
    multimap<string, ALIGNINFO>::iterator mitr; 
    multimap<string, ALIGNINFO>::iterator mitr_end;
    mitr     = (*bcPosQueue).begin();
    mitr_end = (*bcPosQueue).end();
    long moleNum  = 0;
    long alignNum = 0;
    while(mitr != mitr_end)
    {
        string key = (*mitr).first;
        vector<string> chrbc = split_string(key, '#'); // get [0]:chr, [1]:barcode/partition
        std::pair <multimap<string, ALIGNINFO>::iterator, 
                   multimap<string, ALIGNINFO>::iterator> clitr_region;
        clitr_region = (*bcPosQueue).equal_range(key);
        multimap<string, ALIGNINFO>::iterator clitr;
        unsigned long firstAlignSta  = 0; // for calculating molecule length; molecule first alignment       
        unsigned long firstAlignEnd  = 0; // not really used
        unsigned long lastAlignSta   = 0; // molecule last alignment       
        unsigned long lastAlignEnd   = 0; // for calculating molecule length; for breaking molecule
        unsigned long lastR1AlignSta = 0; // for calculating R1 distance
        unsigned long lastR1AlignEnd = 0; // ..
        unsigned long lastR2AlignSta = 0; // for calculating R2 distance
        unsigned long lastR2AlignEnd = 0; // ..     
        int     readNum = 0;
        int     covleng = 0;
        int moleculeLen = 0;
        std::stringstream alignedPos;     // aligned positions of reads of a molecule
        alignedPos.str("");
        //
        std::stringstream readids; // id of reads
        readids.str("");
        std::stringstream rcigars; // cigar of reads
        rcigars.str("");
        std::stringstream rpairids;// id of R1/R2
        rpairids.str("");
        //
        map<int, unsigned long> im_read_interval;
        for (clitr=clitr_region.first; clitr!=clitr_region.second; ++clitr) // span of reads within chr#barcode
        {
            ALIGNINFO span         = (*clitr).second;       
            if(clitr==clitr_region.first || (span.first>lastAlignEnd && span.first-lastAlignEnd+1>winsize)) // new molecule
            {
                // summary last cluster with the same barcode
                if(firstAlignSta != 0)
                {
                   assert(lastAlignEnd>firstAlignSta);
                   moleculeLen = lastAlignEnd-firstAlignSta+1; // in bp
                   if(moleculeLen==0) moleculeLen = 1; // caution: avoid potential dividing 0
                   moutfp << lastAlignSta     << "\t" 
                          << moleculeLen      << "\t" 
                          << setprecision(2)  << fixed << (float)covleng/moleculeLen << "\t" 
                          << readNum          << "\tR\t" 
                          << lastAlignEnd << "\t"
                          << alignedPos.str() << "\t" 
                          << rpairids.str()   << "\t" 
                          << readids.str()    << "\t"
                          << rcigars.str()    << endl;                          
                   if(moleculeLen >= minMoleSize)
                   {
                       // molecule cov
                       std::stringstream mckey;
                       mckey.str("");
                       mckey << setprecision(2) << fixed << (float)covleng/moleculeLen;
                       map<string, unsigned long>::iterator mcitr = (*molecule_cov).find(mckey.str());
                       if(mcitr == (*molecule_cov).end())
                       {
                           (*molecule_cov).insert(std::pair<string, unsigned long>(mckey.str(), 1));
                       }
                       else
                       {
                           (*mcitr).second += 1;
                       }
                       // molecule len
                       int mlkey = (int)round((double)moleculeLen/1000); 
                       map<int, unsigned long>::iterator mlitr = (*molecule_len).find(mlkey);
                       if(mlitr == (*molecule_len).end())
                       {
                           (*molecule_len).insert(std::pair<int, unsigned long>(mlkey, 1));
                           (*molecule_len_sum).insert(std::pair<int, unsigned long>(mlkey, moleculeLen));
                       }
                       else
                       {
                           (*mlitr).second += 1;
                           (*molecule_len_sum)[mlkey] += moleculeLen;
                       }
                       // molecules per barcode
                       map<string, int>::iterator bcitr;
                       bcitr = (*barcode_molecule_cnt).find(chrbc[1]);
                       if(bcitr == (*barcode_molecule_cnt).end())
                       {
                           (*barcode_molecule_cnt).insert(std::pair<string, int>(chrbc[1], 1));
                       }
                       else
                       {
                           (*barcode_molecule_cnt)[chrbc[1]] +=1;
                       }
                       // molecule read number
                       map<int,    unsigned long>::iterator readitr;
                       readitr = (*molecule_read_num).find(readNum);
                       if(readitr == (*molecule_read_num).end())
                       {
                           (*molecule_read_num).insert(std::pair<int, unsigned long>(readNum, 1));
                           (*molecule_read_num_sum).insert(std::pair<int, unsigned long>(readNum, span.second - span.first + 1));
                       }
                       else
                       {
                           (*molecule_read_num)[readNum] += 1;
                           (*molecule_read_num_sum)[readNum] += span.second - span.first + 1;
                       }
                       // molecule read distances:
                       map<int, unsigned long>::iterator imrditr;
                       map<int, unsigned long>::iterator imrditr_end;
                       map<int, unsigned long>::iterator imrditr_final;
                       imrditr     = im_read_interval.begin();
                       imrditr_end = im_read_interval.end();
                       while(imrditr != imrditr_end)
                       {
                           //if(abs((*imrditr).first) > 500) // note: with 0.1x of 50kb molecule, dist between 18 readpairs is 2777bp
                           if(true)
                           {
                               imrditr_final = (*molecule_read_interval).find((*imrditr).first);
                               if(imrditr_final == (*molecule_read_interval).end())
                               {
                                   (*molecule_read_interval).insert(std::pair<int, unsigned long>((*imrditr).first, (*imrditr).second));
                               }
                               else
                               {
                                   (*imrditr_final).second += (*imrditr).second;
                               }
                           }
                           imrditr ++;
                       }        
                   }
                   //
                   readNum = 0;
                   // aligned positions of reads of a molecule
                   alignedPos.str("");
                   // read id and order of pair info
                   readids.str("");
                   rcigars.str("");
                   rpairids.str("");                   
                   covleng = 0;
                }
                // start new/next cluster
                moleNum ++;
                firstAlignSta = span.first;
                firstAlignEnd = span.second;
                moutfp << (*clitr).first << "\t" << firstAlignSta << "\t";
                // read dist info: if do following, then distance of reads between inter-molecules is ignored.
                lastR1AlignSta = 0; // initializing
                lastR1AlignEnd = 0;  
                lastR2AlignSta = 0; // initializing
                lastR2AlignEnd = 0;    
                im_read_interval.clear();             
            }
            // get covered length and read number
            covleng += span.second - span.first + 1;        
            readNum ++;
            // aligned positions of reads of a molecule: each item is a spanning range of a read
            if(alignedPos.str().size()>0)
            {
                alignedPos  << ";" << span.first << "," << span.second;
            }
            else
            {
                alignedPos  << span.first << "," << span.second;
            }
            // read id and order of pair info
            if(readids.str().size()>0)
            {
                readids  << "," << span.readid;
                rcigars  << "," << span.rcigar;
                rpairids << "," << span.rorder; 
            }
            else
            {
                readids  << span.readid;
                rcigars  << span.rcigar;
                rpairids << span.rorder; 
            }            
            alignNum ++;
            // get R1.vs.R1-/R2.vs.R2-read distances within the chr#barcode
            if(span.rorder.compare("1")==0)
            {
                if(lastR1AlignEnd != 0)// if there is one R1-read before current R1-read
                {
                    map<int, unsigned long>::iterator mritr;
                    int distSize = 0;
                    if(span.first>=lastR1AlignEnd)
                    {
                        distSize = span.first-lastR1AlignEnd+1;
                    }
                    else
                    {
                        distSize = -1*(lastR1AlignEnd - span.first+1); // in case overlapping
                    }
                    mritr = im_read_interval.find(distSize);
                    if(mritr == im_read_interval.end())
                    {
                        im_read_interval.insert(std::pair<int, unsigned long>(distSize, 1));
                    }
                    else
                    {
                        (*mritr).second += 1;
                    }
                    //cout << "   check: " << (*clitr).first << ": span.first-lastR1AlignEnd=abs(" << span.first << "-" << lastR1AlignEnd << ")=" << distSize << endl;
                }
                lastR1AlignSta = span.first; // updating
                lastR1AlignEnd = span.second;
            }
            else
            if(span.rorder.compare("2")==0)
            {
                if(lastR2AlignEnd != 0) // if there is one R2-read before current R2-read
                {
                    map<int, unsigned long>::iterator mritr;
                    int distSize = 0;
                    if(span.first>=lastR2AlignEnd)
                    {
                        distSize = span.first-lastR2AlignEnd+1;
                    }
                    else
                    {
                        distSize = -1*(lastR2AlignEnd - span.first+1); // in case overlapping
                    }
                    mritr = im_read_interval.find(distSize);
                    if(mritr == im_read_interval.end())
                    {
                        im_read_interval.insert(std::pair<int, unsigned long>(distSize, 1));
                    }
                    else
                    {
                        (*mritr).second += 1;
                    }
                    //cout << "   check: " << (*clitr).first << ": span.first-lastR2AlignEnd=abs(" << span.first << "-" << lastR2AlignEnd << ")=" << distSize << endl;
                }
                lastR2AlignSta = span.first; // updating
                lastR2AlignEnd = span.second;                 
            }
            else ;            
            // update current as last
            lastAlignSta = span.first;
            lastAlignEnd = span.second;
        }
        // summary last cluster: first_alignment_start all_alignment_cov_len	base_cov	read_num
        assert(lastAlignEnd>firstAlignSta);
        moleculeLen = lastAlignEnd-firstAlignSta+1;
        if(moleculeLen==0) moleculeLen = 1; // caution: avoid potential dividing 0
        moutfp << lastAlignSta     << "\t" 
               << moleculeLen      << "\t" 
               << setprecision(2)  << fixed << (float)covleng/moleculeLen << "\t" 
               << readNum          << "\tU\t" 
               << lastAlignEnd     << "\t"
               << alignedPos.str() << "\t"
               << rpairids.str()   << "\t" 
               << readids.str()    << "\t"
               << rcigars.str()    << endl;
        if(moleculeLen >= minMoleSize)
        {
            // molecule cov
            std::stringstream mckey;
            mckey.str("");
            mckey << setprecision(2) << fixed << (float)covleng/moleculeLen;
            map<string, unsigned long>::iterator mcitr = (*molecule_cov).find(mckey.str());
            if(mcitr == (*molecule_cov).end())
            {
                (*molecule_cov).insert(std::pair<string, unsigned long>(mckey.str(), 1));
            }
            else
            {
                (*mcitr).second += 1;
            }
            // molecule len
            int mlkey = (int)round((double)moleculeLen/1000); 
            map<int, unsigned long>::iterator mlitr = (*molecule_len).find(mlkey);
            if(mlitr == (*molecule_len).end())
            {
                (*molecule_len).insert(std::pair<int, unsigned long>(mlkey, 1));
                (*molecule_len_sum).insert(std::pair<int, unsigned long>(mlkey, moleculeLen));            
            }
            else
            {
                (*mlitr).second += 1;
                (*molecule_len_sum)[mlkey] += moleculeLen;            
            }
            // molecules per barcode
            map<string, int>::iterator bcitr;
            bcitr = (*barcode_molecule_cnt).find(chrbc[1]);
            if(bcitr == (*barcode_molecule_cnt).end())
            {
                (*barcode_molecule_cnt).insert(std::pair<string, int>(chrbc[1], 1));
            }
            else
            {
                (*barcode_molecule_cnt)[chrbc[1]] +=1;
            } 
            // molecule read number
            map<int,    unsigned long>::iterator readitr;
            readitr = (*molecule_read_num).find(readNum);
            if(readitr == (*molecule_read_num).end())
            {
                (*molecule_read_num).insert(std::pair<int, unsigned long>(readNum, 1));
                (*molecule_read_num_sum).insert(std::pair<int, unsigned long>(readNum, lastAlignEnd-lastAlignSta+1));                
            }
            else
            {
                (*molecule_read_num)[readNum] += 1;
                (*molecule_read_num_sum)[readNum] += lastAlignEnd-lastAlignSta+1;
            }
            // molecule read distances:
            map<int, unsigned long>::iterator imrditr;
            map<int, unsigned long>::iterator imrditr_end;
            map<int, unsigned long>::iterator imrditr_final;
            imrditr     = im_read_interval.begin();
            imrditr_end = im_read_interval.end();
            while(imrditr != imrditr_end)
            {
                //if(abs((*imrditr).first) > 500) // note: with 0.1x of 50kb molecule, dist between 18 readpairs is 2777bp
                if(true)
                {
                    imrditr_final = (*molecule_read_interval).find((*imrditr).first);
                    if(imrditr_final == (*molecule_read_interval).end())
                    {
                        (*molecule_read_interval).insert(std::pair<int, unsigned long>((*imrditr).first, (*imrditr).second));
                    }
                    else
                    {
                        (*imrditr_final).second += (*imrditr).second;
                    }
                }
                imrditr ++;
            }
        }
        //
        im_read_interval.clear();    
        readNum = 0;
        //
        alignedPos.str("");
        // read id and order of pair info
        readids.str("");
        rcigars.str("");
        rpairids.str("");        
        mitr = clitr;     
    }
    cout << "   Info: " << lastChr << " has " << alignNum << " alignments analyzed." << endl;
    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x988, %rsp            # imm = 0x988
movq %r8, 0x70(%rsp)
movq 0x9d0(%rsp), %rax
movq 0x9c8(%rsp), %r8
movq 0x18(%rsi), %r10
movq %rsi, 0x180(%rsp)
addq $0x8, %rsi
movq %rsi, 0x188(%rsp)
addq $0x188, %rdi            # imm = 0x188
movq %rdi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
addq $0x8, %rdx
movq %rdx, 0x150(%rsp)
movq %rcx, 0x78(%rsp)
addq $0x8, %rcx
movq %rcx, 0x148(%rsp)
addq $0x8, %rax
movq %rax, 0x140(%rsp)
movq %r9, 0x40(%rsp)
leaq 0x8(%r9), %rax
movq %rax, 0x138(%rsp)
leaq 0x8(%r8), %rax
movq %rax, 0x160(%rsp)
xorl %r14d, %r14d
leaq 0x98(%rsp), %rbp
cmpq 0x188(%rsp), %r10
je 0x8460
addq $0x20, %r10
leaq 0x348(%rsp), %rbx
movq %rbx, %rdi
movq %r10, %rsi
callq 0x4400
movb $0x23, 0x368(%rsp)
leaq 0x168(%rsp), %rdi
movq %rbx, %rsi
leaq 0x368(%rsp), %rdx
callq 0x26120
movq 0x180(%rsp), %rdi
movq %rbx, %rsi
callq 0xa358
movq %rax, 0x158(%rsp)
movq %rdx, 0x190(%rsp)
andl $0x0, 0x4(%rsp)
leaq 0x368(%rsp), %rdi
callq 0x4250
leaq 0x800(%rsp), %rbx
movq %rbx, %rdi
leaq 0x2686c(%rip), %rsi     # 0x2db1a
leaq 0x678(%rsp), %rdx
callq 0x4d3e
leaq 0x380(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
callq 0x4250
leaq 0x678(%rsp), %rbx
movq %rbx, %rdi
leaq 0x2682d(%rip), %rsi     # 0x2db1a
leaq 0x4f0(%rsp), %rdx
callq 0x4d3e
leaq 0x818(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
callq 0x4250
leaq 0x4f0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x267ee(%rip), %rsi     # 0x2db1a
leaq 0x1a0(%rsp), %rdx
callq 0x4d3e
leaq 0x690(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
callq 0x4250
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x267af(%rip), %rsi     # 0x2db1a
movq %rbp, %rdx
callq 0x4d3e
leaq 0x508(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
andl $0x0, 0x110(%rsp)
andq $0x0, 0x118(%rsp)
leaq 0x110(%rsp), %rax
movq %rax, 0x120(%rsp)
movq %rax, 0x128(%rsp)
andq $0x0, 0x130(%rsp)
movq $0x0, 0x8(%rsp)
movq 0x158(%rsp), %rax
movq $0x0, 0x90(%rsp)
movq $0x0, 0x38(%rsp)
xorl %r12d, %r12d
movq $0x0, 0x48(%rsp)
xorl %r13d, %r13d
cmpq 0x190(%rsp), %rax
je 0x7dba
leaq 0x40(%rax), %rsi
movq %rbp, %rdi
movq %rax, %rbx
callq 0x96ca
movq %r14, 0x198(%rsp)
cmpq 0x158(%rsp), %rbx
movq %rbx, %rcx
je 0x7449
movq 0x98(%rsp), %r14
movq %r14, %rax
subq %r12, %rax
jbe 0x76e8
incq %rax
cmpq 0x9e0(%rsp), %rax
jbe 0x76e8
testq %r13, %r13
je 0x7a51
cmpq %r13, %r12
jbe 0x84c8
movq %rcx, 0x38(%rsp)
movl %r12d, %ebp
subl %r13d, %ebp
leal 0x1(%rbp), %eax
cmpl $0x1, %eax
adcl $0x1, %ebp
movq 0x88(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x4230
movq %rax, %rdi
leaq 0x2668e(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %rdi
movl %ebp, %esi
callq 0x4580
movq %rax, %rdi
leaq 0x26675(%rip), %rsi     # 0x2db19
callq 0x4330
movq (%rax), %rcx
movq -0x18(%rcx), %rdx
movq $0x2, 0x8(%rax,%rdx)
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
movl $0xfffffefb, %esi       # imm = 0xFFFFFEFB
andl %esi, %edx
orl $0x4, %edx
movl %edx, 0x18(%rax,%rcx)
cvtsi2ssl 0x8(%rsp), %xmm0
cvtsi2ss %ebp, %xmm1
divss %xmm1, %xmm0
movq %rax, %rdi
movss %xmm0, 0x8(%rsp)
callq 0x4270
movq %rax, %rdi
leaq 0x26624(%rip), %rsi     # 0x2db19
callq 0x4330
movl 0x4(%rsp), %esi
movq %rax, %rdi
callq 0x4580
movq %rax, %rdi
leaq 0x2298c(%rip), %rsi     # 0x29e9c
callq 0x4330
movq %rax, %rdi
movq %r12, %rsi
callq 0x4230
movq %rax, %rdi
leaq 0x265ef(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r15
leaq 0x1a0(%rsp), %r14
movq %r14, %rdi
leaq 0x380(%rsp), %rsi
callq 0x44e0
leaq 0x10(%rsp), %r12
movq %r15, %rdi
movq %r14, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x265b5(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r15
movq %r12, %rdi
leaq 0x508(%rsp), %rsi
callq 0x44e0
movq %r15, %rdi
movq %r12, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x26588(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r15
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
leaq 0x818(%rsp), %rsi
callq 0x44e0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x26556(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r15
leaq 0x328(%rsp), %rbx
movq %rbx, %rdi
leaq 0x690(%rsp), %rsi
callq 0x44e0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
callq 0x41c0
leaq 0x328(%rsp), %rdi
callq 0x4638
leaq 0x50(%rsp), %rdi
callq 0x4638
movq %r12, %rdi
callq 0x4638
movq %r14, %rdi
callq 0x4638
cmpl 0x9e8(%rsp), %ebp
jl 0x7996
movq %r14, %rdi
callq 0x4250
movq %r12, %rdi
leaq 0x264de(%rip), %rsi     # 0x2db1a
leaq 0x50(%rsp), %rdx
callq 0x4d3e
leaq 0x1b8(%rsp), %rdi
movq %r12, %rsi
callq 0x4490
movq %r12, %rdi
callq 0x4638
movq 0x1b0(%rsp), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x1b8(%rsp,%rcx)
movq -0x18(%rax), %rax
movl 0x1c8(%rsp,%rax), %ecx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
orl $0x4, %ecx
movl %ecx, 0x1c8(%rsp,%rax)
leaq 0x1b0(%rsp), %rdi
movss 0x8(%rsp), %xmm0
callq 0x4270
movq %r12, %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x44e0
movq 0x80(%rsp), %rdi
movq %r12, %rsi
callq 0xa47a
movq %rax, %r15
movq %r12, %rdi
callq 0x4638
cmpq 0x150(%rsp), %r15
je 0x76f0
incq 0x40(%r15)
leaq 0x50(%rsp), %rbx
jmp 0x777a
movq %rcx, %r15
jmp 0x7ac0
leaq 0x50(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x44e0
leaq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movq 0x50(%rsp), %rax
leaq 0x60(%rsp), %rdx
cmpq %rdx, %rax
je 0x772c
movq %rax, 0x10(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x20(%rsp)
jmp 0x7732
movups (%rdx), %xmm0
movups %xmm0, (%rcx)
movq 0x58(%rsp), %rax
movq %rdx, 0x50(%rsp)
andq $0x0, 0x58(%rsp)
movq %rax, 0x18(%rsp)
movb $0x0, 0x60(%rsp)
movq $0x1, 0x30(%rsp)
movq 0x80(%rsp), %rdi
movq %r12, %rsi
callq 0xa4f0
movq %r12, %rdi
callq 0x4638
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
callq 0x4638
cvtsi2sd %ebp, %xmm0
divsd 0x2214a(%rip), %xmm0    # 0x298d0
callq 0x4180
cvttsd2si %xmm0, %eax
movl %eax, 0x50(%rsp)
movq 0x78(%rsp), %rdi
movq %rbx, %rsi
callq 0xa69a
movslq %ebp, %rbx
cmpq 0x148(%rsp), %rax
je 0x77c5
incq 0x28(%rax)
movq 0x70(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x973e
addq %rbx, (%rax)
jmp 0x77fd
movl 0x50(%rsp), %eax
movl %eax, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
movq 0x78(%rsp), %rdi
movq %r12, %rsi
callq 0xa6ec
movl 0x50(%rsp), %eax
movl %eax, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq 0x70(%rsp), %rdi
movq %r12, %rsi
callq 0xa6ec
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq 0x9d0(%rsp), %rdi
callq 0xa992
cmpq 0x140(%rsp), %rax
je 0x783d
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq 0x9d0(%rsp), %rdi
callq 0x978c
incl (%rax)
jmp 0x7871
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x4400
movl $0x1, 0x30(%rsp)
movq 0x9d0(%rsp), %rdi
movq %r12, %rsi
callq 0xaa08
movq %r12, %rdi
callq 0x4638
leaq 0x4(%rsp), %rsi
movq 0x40(%rsp), %rdi
callq 0xa69a
cmpq 0x138(%rsp), %rax
je 0x78d8
movq 0x40(%rsp), %rdi
leaq 0x4(%rsp), %r15
movq %r15, %rsi
callq 0x973e
incq (%rax)
movq 0x98(%rsp), %rbx
movq 0xa0(%rsp), %r14
movq 0x9c0(%rsp), %rdi
movq %r15, %rsi
callq 0x973e
movq (%rax), %rcx
subq %rbx, %r14
addq %r14, %rcx
incq %rcx
movq %rcx, (%rax)
leaq 0x1a0(%rsp), %r14
jmp 0x7926
movl 0x4(%rsp), %eax
movl %eax, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
movq 0x40(%rsp), %rdi
movq %r12, %rsi
callq 0xa6ec
movq 0xa0(%rsp), %rax
subq 0x98(%rsp), %rax
incq %rax
movl 0x4(%rsp), %ecx
movl %ecx, 0x10(%rsp)
movq %rax, 0x18(%rsp)
movq 0x9c0(%rsp), %rdi
movq %r12, %rsi
callq 0xa6ec
movq 0x120(%rsp), %r15
leaq 0x110(%rsp), %rax
cmpq %rax, %r15
je 0x798e
leaq 0x20(%r15), %rsi
movq 0x9c8(%rsp), %rdi
callq 0xa69a
cmpq 0x160(%rsp), %rax
je 0x7960
movq 0x28(%r15), %rcx
addq %rcx, 0x28(%rax)
jmp 0x7981
movl 0x20(%r15), %eax
movl %eax, 0x10(%rsp)
movq 0x28(%r15), %rax
movq %rax, 0x18(%rsp)
movq 0x9c8(%rsp), %rdi
movq %r12, %rsi
callq 0xa6ec
movq %r15, %rdi
callq 0x4240
movq %rax, %r15
jmp 0x792e
movq %r14, %rdi
callq 0x4280
andl $0x0, 0x4(%rsp)
movq %r14, %rdi
leaq 0x26175(%rip), %rsi     # 0x2db1a
movq %r12, %rdx
callq 0x4d3e
leaq 0x380(%rsp), %rdi
movq %r14, %rsi
callq 0x4490
movq %r14, %rdi
callq 0x4638
movq %r14, %rdi
leaq 0x2614b(%rip), %rsi     # 0x2db1a
movq %r12, %rdx
callq 0x4d3e
leaq 0x818(%rsp), %rdi
movq %r14, %rsi
callq 0x4490
movq %r14, %rdi
callq 0x4638
movq %r14, %rdi
leaq 0x26121(%rip), %rsi     # 0x2db1a
movq %r12, %rdx
callq 0x4d3e
leaq 0x690(%rsp), %rdi
movq %r14, %rsi
callq 0x4490
movq %r14, %rdi
callq 0x4638
movq %r14, %rdi
leaq 0x260f7(%rip), %rsi     # 0x2db1a
movq %r12, %rdx
callq 0x4d3e
leaq 0x508(%rsp), %rdi
movq %r14, %rsi
callq 0x4490
movq %r14, %rdi
callq 0x4638
movq $0x0, 0x8(%rsp)
movq 0x38(%rsp), %rcx
movq %rcx, %r15
leaq 0x20(%rcx), %rsi
movq 0x98(%rsp), %r13
movq 0x88(%rsp), %rdi
callq 0x42e0
movq %rax, %rdi
leaq 0x260a2(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %rdi
movq %r13, %rsi
callq 0x4230
movq %rax, %rdi
leaq 0x26088(%rip), %rsi     # 0x2db19
callq 0x4330
leaq 0x108(%rsp), %rdi
callq 0xadf6
movq 0x98(%rsp), %r14
movq $0x0, 0x90(%rsp)
movq $0x0, 0x38(%rsp)
movl 0xa0(%rsp), %ebp
incl 0x4(%rsp)
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x380(%rsp), %rsi
callq 0x44e0
movq 0x1a8(%rsp), %r12
movq %rbx, %rdi
callq 0x4638
leaq 0x378(%rsp), %rax
testq %r12, %r12
je 0x7b14
leaq 0x378(%rsp), %rdi
leaq 0x238ab(%rip), %rsi     # 0x2b3ba
callq 0x4330
movq 0x98(%rsp), %rsi
movq %rax, %rdi
callq 0x4230
movq %rax, %rdi
leaq 0x22372(%rip), %rsi     # 0x29ea0
callq 0x4330
movq 0xa0(%rsp), %rsi
movq %rax, %rdi
callq 0x4230
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x818(%rsp), %rsi
callq 0x44e0
movq 0x1a8(%rsp), %r12
movq %rbx, %rdi
callq 0x4638
testq %r12, %r12
je 0x7bce
leaq 0x810(%rsp), %rdi
leaq 0x22321(%rip), %rsi     # 0x29ea0
callq 0x4330
movq %rax, %rdi
leaq 0xc8(%rsp), %rsi
callq 0x42e0
leaq 0x688(%rsp), %rdi
leaq 0x222fd(%rip), %rsi     # 0x29ea0
callq 0x4330
movq %rax, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x42e0
leaq 0x500(%rsp), %rdi
leaq 0x222d9(%rip), %rsi     # 0x29ea0
callq 0x4330
jmp 0x7c00
leaq 0x810(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x42e0
leaq 0x688(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x42e0
leaq 0x500(%rsp), %rax
movq %rax, %rdi
leaq 0xa8(%rsp), %rsi
callq 0x42e0
leaq 0xa8(%rsp), %r12
movq %r12, %rdi
leaq 0x21a1f(%rip), %rsi     # 0x29641
callq 0x4110
testl %eax, %eax
je 0x7c4b
movq %r12, %rdi
leaq 0x262d8(%rip), %rsi     # 0x2df0d
callq 0x4110
testl %eax, %eax
je 0x7ca4
movq 0xa0(%rsp), %r12
jmp 0x7d74
movq 0x38(%rsp), %rax
testq %rax, %rax
je 0x7d29
movq %rax, %rsi
movq 0x98(%rsp), %rax
movq %rax, %rcx
subq %rsi, %rcx
movl %esi, %edx
notl %edx
addl %eax, %edx
incl %ecx
cmpq %rsi, %rax
cmovbl %edx, %ecx
movl %ecx, 0x10(%rsp)
leaq 0x108(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xa69a
leaq 0x110(%rsp), %rcx
cmpq %rcx, %rax
je 0x7cfd
incq 0x28(%rax)
jmp 0x7d29
movq 0x90(%rsp), %rax
testq %rax, %rax
je 0x7d64
movq %rax, %rsi
movq 0x98(%rsp), %rax
movq %rax, %rcx
subq %rsi, %rcx
movl %esi, %edx
notl %edx
addl %eax, %edx
incl %ecx
cmpq %rsi, %rax
cmovbl %edx, %ecx
movl %ecx, 0x10(%rsp)
leaq 0x108(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xa69a
leaq 0x110(%rsp), %rcx
cmpq %rcx, %rax
je 0x7d38
incq 0x28(%rax)
jmp 0x7d64
movl 0x10(%rsp), %eax
movl %eax, 0x1a0(%rsp)
movq $0x1, 0x1a8(%rsp)
leaq 0x108(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0xa6ec
movq 0xa0(%rsp), %r12
movq %r12, 0x38(%rsp)
jmp 0x7d74
movl 0x10(%rsp), %eax
movl %eax, 0x1a0(%rsp)
movq $0x1, 0x1a8(%rsp)
leaq 0x108(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0xa6ec
movq 0xa0(%rsp), %r12
movq %r12, 0x90(%rsp)
subl %r14d, %ebp
movq 0x8(%rsp), %rax
addl %ebp, %eax
incl %eax
movq %rax, 0x8(%rsp)
movq 0x198(%rsp), %r14
incq %r14
movq 0x98(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x98(%rsp), %rbp
movq %rbp, %rdi
callq 0x9686
movq %r15, %rdi
callq 0x4240
jmp 0x73f2
movq %rax, 0x38(%rsp)
cmpq %r13, %r12
jbe 0x84e7
movl %r12d, %ebp
subl %r13d, %ebp
leal 0x1(%rbp), %eax
cmpl $0x1, %eax
adcl $0x1, %ebp
movq 0x88(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x4230
leaq 0x20(%rsp), %r15
movq %rax, %rdi
leaq 0x25d21(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %rdi
movl %ebp, %esi
callq 0x4580
movq %rax, %rdi
leaq 0x25d08(%rip), %rsi     # 0x2db19
callq 0x4330
movq (%rax), %rcx
movq -0x18(%rcx), %rdx
movq $0x2, 0x8(%rax,%rdx)
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
movl $0xfffffefb, %esi       # imm = 0xFFFFFEFB
andl %esi, %edx
orl $0x4, %edx
movl %edx, 0x18(%rax,%rcx)
cvtsi2ssl 0x8(%rsp), %xmm0
cvtsi2ss %ebp, %xmm1
divss %xmm1, %xmm0
movq %rax, %rdi
movss %xmm0, 0x8(%rsp)
callq 0x4270
movq %rax, %rdi
leaq 0x25cb7(%rip), %rsi     # 0x2db19
callq 0x4330
movl 0x4(%rsp), %esi
movq %rax, %rdi
callq 0x4580
movq %rax, %rdi
leaq 0x22025(%rip), %rsi     # 0x29ea2
callq 0x4330
movq %rax, %rdi
movq %r12, %rsi
callq 0x4230
movq %rax, %rdi
leaq 0x25c82(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r13
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x380(%rsp), %rsi
callq 0x44e0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x25c4d(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r13
leaq 0x98(%rsp), %rbx
movq %rbx, %rdi
leaq 0x508(%rsp), %rsi
callq 0x44e0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x25c18(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r13
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
leaq 0x818(%rsp), %rsi
callq 0x44e0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
leaq 0x25be6(%rip), %rsi     # 0x2db19
callq 0x4330
movq %rax, %r13
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
leaq 0x690(%rsp), %rsi
callq 0x44e0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x42e0
movq %rax, %rdi
callq 0x41c0
leaq 0x50(%rsp), %rdi
callq 0x4638
leaq 0x10(%rsp), %rdi
callq 0x4638
leaq 0x98(%rsp), %r13
movq %r13, %rdi
callq 0x4638
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
callq 0x4638
cmpl 0x9e8(%rsp), %ebp
jl 0x833e
movq %rbx, %rdi
callq 0x4250
leaq 0x98(%rsp), %rbx
movq %rbx, %rdi
leaq 0x25b5c(%rip), %rsi     # 0x2db1a
leaq 0x10(%rsp), %rdx
callq 0x4d3e
leaq 0x1b8(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq 0x1b0(%rsp), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x1b8(%rsp,%rcx)
movq -0x18(%rax), %rax
movl 0x1c8(%rsp,%rax), %ecx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
orl $0x4, %ecx
movl %ecx, 0x1c8(%rsp,%rax)
leaq 0x1b0(%rsp), %rdi
movss 0x8(%rsp), %xmm0
callq 0x4270
movq %rbx, %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x44e0
movq 0x80(%rsp), %rdi
movq %rbx, %rsi
callq 0xa47a
movq %rax, %r13
movq %rbx, %rdi
callq 0x4638
cmpq 0x150(%rsp), %r13
je 0x806a
incq 0x40(%r13)
leaq 0x10(%rsp), %rbx
jmp 0x810a
leaq 0x10(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x44e0
leaq 0xa8(%rsp), %rcx
movq %rcx, 0x98(%rsp)
movq 0x10(%rsp), %rax
cmpq %r15, %rax
je 0x80ad
movq %rax, 0x98(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0xa8(%rsp)
jmp 0x80b4
movups (%r15), %xmm0
movups %xmm0, (%rcx)
movq 0x18(%rsp), %rax
movq %r15, 0x10(%rsp)
andq $0x0, 0x18(%rsp)
movq %rax, 0xa0(%rsp)
movb $0x0, 0x20(%rsp)
movq $0x1, 0xb8(%rsp)
movq 0x80(%rsp), %rdi
leaq 0x98(%rsp), %rbx
movq %rbx, %rsi
callq 0xa4f0
movq %rbx, %rdi
callq 0x4638
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x4638
cvtsi2sd %ebp, %xmm0
divsd 0x217ba(%rip), %xmm0    # 0x298d0
callq 0x4180
cvttsd2si %xmm0, %eax
movl %eax, 0x10(%rsp)
movq 0x78(%rsp), %rdi
movq %rbx, %rsi
callq 0xa69a
movslq %ebp, %rbx
cmpq 0x148(%rsp), %rax
je 0x815d
incq 0x28(%rax)
movq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x973e
addq %rbx, (%rax)
leaq 0x98(%rsp), %r13
jmp 0x81a9
movl 0x10(%rsp), %eax
movl %eax, 0x98(%rsp)
movq $0x1, 0xa0(%rsp)
movq 0x78(%rsp), %rdi
leaq 0x98(%rsp), %r13
movq %r13, %rsi
callq 0xa6ec
movl 0x10(%rsp), %eax
movl %eax, 0x98(%rsp)
movq %rbx, 0xa0(%rsp)
movq 0x70(%rsp), %rdi
movq %r13, %rsi
callq 0xa6ec
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq 0x9d0(%rsp), %rdi
callq 0xa992
cmpq 0x140(%rsp), %rax
je 0x81e9
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq 0x9d0(%rsp), %rdi
callq 0x978c
incl (%rax)
jmp 0x8220
movq 0x168(%rsp), %rsi
addq $0x20, %rsi
movq %r13, %rdi
callq 0x4400
movl $0x1, 0xb8(%rsp)
movq 0x9d0(%rsp), %rdi
movq %r13, %rsi
callq 0xaa08
movq %r13, %rdi
callq 0x4638
leaq 0x4(%rsp), %rsi
movq 0x40(%rsp), %rdi
callq 0xa69a
cmpq 0x138(%rsp), %rax
je 0x8271
movq 0x40(%rsp), %rdi
leaq 0x4(%rsp), %rbx
movq %rbx, %rsi
callq 0x973e
incq (%rax)
movq 0x9c0(%rsp), %rdi
movq %rbx, %rsi
callq 0x973e
movq (%rax), %rcx
subq 0x48(%rsp), %r12
addq %r12, %rcx
incq %rcx
movq %rcx, (%rax)
jmp 0x82c0
movl 0x4(%rsp), %eax
movl %eax, 0x98(%rsp)
movq $0x1, 0xa0(%rsp)
movq 0x40(%rsp), %rdi
movq %r13, %rsi
callq 0xa6ec
subq 0x48(%rsp), %r12
incq %r12
movl 0x4(%rsp), %eax
movl %eax, 0x98(%rsp)
movq %r12, 0xa0(%rsp)
movq 0x9c0(%rsp), %rdi
movq %r13, %rsi
callq 0xa6ec
movq 0x120(%rsp), %r15
leaq 0x110(%rsp), %rax
cmpq %rax, %r15
je 0x832e
leaq 0x20(%r15), %rsi
movq 0x9c8(%rsp), %rdi
callq 0xa69a
cmpq 0x160(%rsp), %rax
je 0x82fa
movq 0x28(%r15), %rcx
addq %rcx, 0x28(%rax)
jmp 0x8321
movl 0x20(%r15), %eax
movl %eax, 0x98(%rsp)
movq 0x28(%r15), %rax
movq %rax, 0xa0(%rsp)
movq 0x9c8(%rsp), %rdi
movq %r13, %rsi
callq 0xa6ec
movq %r15, %rdi
callq 0x4240
movq %rax, %r15
jmp 0x82c8
leaq 0x1a0(%rsp), %rbx
movq %rbx, %rdi
callq 0x4280
leaq 0x108(%rsp), %rdi
callq 0xadf6
andl $0x0, 0x4(%rsp)
movq %rbx, %rdi
leaq 0x257c0(%rip), %rsi     # 0x2db1a
movq %r13, %rdx
callq 0x4d3e
movq %r13, %rbp
leaq 0x380(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
leaq 0x25793(%rip), %rsi     # 0x2db1a
movq %rbp, %rdx
callq 0x4d3e
leaq 0x818(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
leaq 0x25769(%rip), %rsi     # 0x2db1a
movq %rbp, %rdx
callq 0x4d3e
leaq 0x690(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
movq %rbx, %rdi
leaq 0x2573f(%rip), %rsi     # 0x2db1a
movq %rbp, %rdx
callq 0x4d3e
leaq 0x508(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq %rbx, %rdi
callq 0x4638
leaq 0x108(%rsp), %rdi
callq 0xa018
leaq 0x4f0(%rsp), %rdi
callq 0x4280
leaq 0x678(%rsp), %rdi
callq 0x4280
leaq 0x800(%rsp), %rdi
callq 0x4280
leaq 0x368(%rsp), %rdi
callq 0x4280
leaq 0x168(%rsp), %rdi
callq 0x5d02
leaq 0x348(%rsp), %rdi
callq 0x4638
movq 0x38(%rsp), %r10
jmp 0x7225
movq 0x34b61(%rip), %rdi     # 0x3cfc8
leaq 0x21a38(%rip), %rsi     # 0x29ea6
callq 0x4330
movq %rax, %rdi
movq 0x9d8(%rsp), %rsi
callq 0x42e0
leaq 0x21a26(%rip), %rsi     # 0x29eb0
movq %rax, %rdi
callq 0x4330
movq %rax, %rdi
movq %r14, %rsi
callq 0x4310
leaq 0x21a12(%rip), %rsi     # 0x29eb6
movq %rax, %rdi
callq 0x4330
movq %rax, %rdi
callq 0x41c0
movb $0x1, %al
addq $0x988, %rsp            # imm = 0x988
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x21883(%rip), %rdi     # 0x29d52
leaq 0x21897(%rip), %rsi     # 0x29d6d
leaq 0x218a5(%rip), %rcx     # 0x29d82
movl $0x137, %edx            # imm = 0x137
callq 0x4210
leaq 0x21864(%rip), %rdi     # 0x29d52
leaq 0x21878(%rip), %rsi     # 0x29d6d
leaq 0x21886(%rip), %rcx     # 0x29d82
movl $0x1ff, %edx            # imm = 0x1FF
callq 0x4210
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x4638
leaq 0x10(%rsp), %rdi
jmp 0x856d
jmp 0x8739
jmp 0x8562
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8562
jmp 0x8739
jmp 0x8739
jmp 0x8739
jmp 0x8791
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x4638
jmp 0x873c
jmp 0x8739
jmp 0x8739
jmp 0x86b5
jmp 0x8791
jmp 0x86b5
jmp 0x8791
jmp 0x86b5
jmp 0x8791
jmp 0x86b5
jmp 0x8791
jmp 0x86a3
jmp 0x8791
jmp 0x8685
jmp 0x86b5
jmp 0x8612
movq %rax, %rbx
leaq 0x678(%rsp), %rdi
callq 0x4638
jmp 0x87e1
jmp 0x861a
movq %rax, %rbx
jmp 0x87c7
jmp 0x8639
movq %rax, %rbx
leaq 0x800(%rsp), %rdi
callq 0x4638
jmp 0x87ee
movq %rax, %rbx
jmp 0x8808
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x4638
jmp 0x87c7
movq %rax, %rbx
jmp 0x87d4
movq %rax, %rbx
jmp 0x87ee
jmp 0x8641
movq %rax, %rbx
leaq 0x4f0(%rsp), %rdi
callq 0x4638
jmp 0x87d4
movq %rax, %rbx
jmp 0x87e1
movq %rax, %rbx
jmp 0x87fb
jmp 0x87aa
jmp 0x8798
jmp 0x8798
jmp 0x8798
jmp 0x86e5
jmp 0x8798
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4638
leaq 0x50(%rsp), %rdi
jmp 0x86ed
jmp 0x8798
jmp 0x8798
movq %rax, %rbx
jmp 0x8697
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x4638
leaq 0x10(%rsp), %rdi
callq 0x4638
jmp 0x86a6
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x4638
jmp 0x86b8
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x4638
jmp 0x87ba
jmp 0x87aa
jmp 0x8798
jmp 0x87aa
jmp 0x86e5
jmp 0x8798
jmp 0x8798
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4638
jmp 0x879b
jmp 0x8798
jmp 0x87aa
jmp 0x8798
jmp 0x8798
jmp 0x8739
jmp 0x8798
jmp 0x87aa
jmp 0x8798
jmp 0x8791
jmp 0x87aa
jmp 0x8755
jmp 0x8755
jmp 0x87aa
jmp 0x87aa
jmp 0x8755
jmp 0x8755
jmp 0x87aa
jmp 0x8755
jmp 0x8750
jmp 0x87aa
jmp 0x874b
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x4280
jmp 0x87ba
movq %rax, %rbx
jmp 0x876a
movq %rax, %rbx
jmp 0x8774
movq %rax, %rbx
jmp 0x877e
movq %rax, %rbx
leaq 0x328(%rsp), %rdi
callq 0x4638
leaq 0x50(%rsp), %rdi
callq 0x4638
leaq 0x10(%rsp), %rdi
callq 0x4638
leaq 0x1a0(%rsp), %rdi
callq 0x4638
jmp 0x87ad
jmp 0x87aa
jmp 0x87aa
movq %rax, %rbx
jmp 0x87ba
jmp 0x8798
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x4280
jmp 0x87ad
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x9686
leaq 0x108(%rsp), %rdi
callq 0xa018
leaq 0x4f0(%rsp), %rdi
callq 0x4280
leaq 0x678(%rsp), %rdi
callq 0x4280
leaq 0x800(%rsp), %rdi
callq 0x4280
leaq 0x368(%rsp), %rdi
callq 0x4280
leaq 0x168(%rsp), %rdi
callq 0x5d02
leaq 0x348(%rsp), %rdi
callq 0x4638
movq %rbx, %rdi
callq 0x45a0