// File: /workspace/github_cpp_makefile_star2_O3/spatialfruitsalad[P]volume2position/main.cpp
// Function: main
int main( int argc, char *argv[] )
{

///////////////////////////////
// Parse command line arguments
///////////////////////////////
    if (argc != 9)
    {
        std::cerr << "wrong number of Command line arguments" << std::endl;
        std::cerr << "./ip_analyzing_gm\n[inFileName] \n[outFolderName] \n[nx] [ny] [nz] [erosiondepth] [sigma_g] [sigma_p]";
        return 0;
    }

    std::string inFileName = argv[1];
    std::string outFolderName = argv[2];

    CreateFolders(outFolderName);

    // the size of the tomogram
    unsigned long  nx = atoi(argv[3]);
    unsigned long  ny = atoi(argv[4]);
    unsigned long  nz = atoi(argv[5]);

    // erosion depth for watershed segmentation of the particles
    int erosiondepth = atoi(argv[6]);


    // bilateral filter parameters
    double bf_sigma_Pos = atof(argv[7]);
    double bf_sigma_Col = atof(argv[8]);
    //double bf_sigma_Pos = 1.75;
    //double bf_sigma_Col = 2000;
    // cutoff for spatial gauss
    unsigned bf_size = static_cast<unsigned>(bf_sigma_Pos * 2.5);

///////////////////////////////
// Load Tomogram
///////////////////////////////
    std::cout << "loading tomogram from " << inFileName << std::endl;

    tomogram3d<uint16_t> original;
    original.read_raw(inFileName, "uint16_t", nx, ny, nz);

    std::cout << "tomogram successfully loaded" << std::endl;
    
    // write some images of the original tomogram
    WriteImages(original, outFolderName + "/images/", "0_original", nz);
    
///////////////////////////////
// Apply bilateral filter
///////////////////////////////
    {
    std::cout << "applying filter" << std::endl;
    // create filter object
    bilateralFilter B (bf_size, bf_sigma_Pos, bf_sigma_Col);
    tomogram3d<uint16_t> filtered;
    // apply filter
    B.Process(original, filtered);
    // original data is no longer needed, so swap it with filtered and dismiss filtered.
    std::swap(original, filtered);
    filtered.clear();
    original.write_raw(outFolderName + "/bilateral.raw", "uint16_t");
    // write some slices of the bilateral tomogram
    WriteImages(original, outFolderName + "/images/", "1_bilateral", nz);
    }

///////////////////////////////
// Create Homogenized Tomogram
///////////////////////////////
    tomogram3d<uint16_t> hom;
    // class for homogenization
    homogenator H;
    H.Process(original, hom, outFolderName);    
    
    //original is no longer needed
    original.clear();
    // write some slices of the homogenized tomogram
    hom.write_raw(outFolderName + "/homogenized.raw", "uint16_t");
    WriteImages(hom, outFolderName + "/images/", "2_homogenized", nz);

///////////////////////////////
// Apply selected Area Histogram
///////////////////////////////
    std::cout << "calculate histogram" << std::endl;
    // this will calculate a histogram of the whole tomogram 
    selectedAreaHistogram sah(nx,ny, nz);

    // selected area histogram will fill two vectors: bins will contain the bin information (list of the bins, identified by the first grey value in each bin.), 
    std::vector<double> bins;
    // hist will include the corresponding greyvalue counts
    std::vector<double> hist;
    sah.Process(hom, bins, hist, outFolderName, 150);

    // the black outside region should not get counted so just remove that from the histogram
    hist[0] = 0;
///////////////////////////////
// Calculate threshold with Otsu's method
///////////////////////////////
    std::cout << "calculate Threshold" << std::endl;
    cSegmentationByOtsu::NormalizeHisto(hist);
    double T = cSegmentationByOtsu::CalculateSegmentationThreshold(hist);
    std::cout << "binthresh from otsu: " << T << std::endl; 
    // since otsu doesn't need to know anything about the bins it is acting on, it will just return the bin ID (this is T). 
    // To get the greyvalue threshold (t1_gv) the next line is needed.
    uint16_t t1_gv = static_cast<uint16_t>(bins.at(T));

    std::cout << "threshol from otsu: " << static_cast<int>(t1_gv) << std::endl;
    
    // this writes a gnuplot script for visualizing otsu thresholding and histogram calculation
    {
    std::cout << "write gnuplot script for histogram" << std::endl;
    std::ofstream out(outFolderName + "/plot_selectedAreaHistogram.gpl");
    out << "#!/usr/bin/gnuplot -persist"<< std::endl;
    out << "t_low = " << static_cast<int>(t1_gv)<< std::endl;
    out << "set xlabel 'greyvalue'" << std::endl;
    out << "set ylabel 'occurrence'" << std::endl;
    out << "set xr [1:]" << std::endl;
    out << "set arrow from t_low, 0 to t_low, graph(0, 1) nohead" << std::endl;
    out << "pl 'selectedAreaHist.dat' w l" << std::endl;
    out.close();
    }
///////////////////////////////
// Create Particle binray image
///////////////////////////////
    std::cout << std::endl << "make binarized versions" << std::endl;
    tomogram3d<uint8_t> binary_particles;
    binary_particles.initialise(nx,ny,nz,0);

    // loop over all voxels and compare with calculated threshold
    for (unsigned long k = 0; k != nz; ++k)
    for (unsigned long j = 0; j != ny; ++j)
    for (unsigned long i = 0; i != nx; ++i)
    {
        uint16_t v = hom.get(i,j,k);
        if (v >= t1_gv)
        { 
            binary_particles.set(i,j,k,1); 
        }
    }
   
    WriteImages(binary_particles,  outFolderName+"images/", "3_binary", nz);

///////////////////////////////
// Remove inside holes from particle image
///////////////////////////////
    tomogram3d<uint8_t> binary_water;
    binary_water.initialise(nx,ny,nz,0);
    removeInsideHoles::Process(binary_particles);
    WriteImages(binary_particles, outFolderName+"images/", "4_binary_woHolesInside", nz); 
    binary_particles.write_raw(outFolderName + "/particles_binary.raw", "uint8_t");

///////////////////////////////
// Create labeled image
///////////////////////////////
    tomogram3d<int> out;
    try
    {
        // this calculates the segmented tomogram
        watershedSegmentation::Process(binary_particles, out, erosiondepth, outFolderName + "/images/", 100);

        // remove all clusters that touch the border
        out.cleanBorder(0.075);

        // write some images 
        WriteImages(out,outFolderName+"images/","7_labeled" , nz);
        WriteImages(out,outFolderName+"images/","8_labeled_color" , nz, true);

    }
    catch (std::string& e)
    {
        std::cerr << e << std::endl;
        return 1;
    }

///////////////////////////////
// Calculate centroids and save tomogram (converted to save disk space)
///////////////////////////////
    // calculate centroids and volumes, also
    // convert to uint16_t for writing
    std::cout << "convert and calculate" << std::endl;
    std::map<unsigned long, unsigned int> volumes;
    std::map<unsigned long, double> xPos;
    std::map<unsigned long, double> yPos;
    std::map<unsigned long, double> zPos;
    
    tomogram3d<uint16_t> safe;
    safe.initialise(nx, ny, nz, 0);
    std::cout << "counting voxels" << std::endl;

    
    for (unsigned int k = 0; k != nz; ++k)
    {
        std::cout << k << " ";
    for (unsigned int j = 0; j != ny; ++j)
    for (unsigned int i = 0; i != nx; ++i)
    {
        uint16_t v = static_cast<uint16_t>(out.get(i,j,k));
        safe.set(i,j,k, v);
        volumes[v] += 1;
        xPos[v] += i;    
        yPos[v] += j;    
        zPos[v] += k;    
    }
    }
    std::cout << "finished, writing centroids" << std::endl;
    // write centroids
    std::string filename = outFolderName +  "/particles_centroids_ed" + std::to_string(static_cast<int>(erosiondepth)) +  ".dat";
    std::cout << "filename: " << filename << std::endl;
    std::ofstream myOut(filename);
    if(!myOut.good())
    {
        std::cerr << "error: cannot write" << std::endl;
        return 1;
    }
    myOut << "#1_x #2_y #3_z #4_l #5_vol" << std::endl;
    myOut << "#boxsz=" << nz << ", boundary_condition= none " << std::endl;
    for(size_t i = 0; i != volumes.size(); ++i)
    {
        double v = static_cast<double>(volumes[i]);
        if(v == 0) continue;
        myOut << " " << xPos[i]/v << " " << yPos[i]/v << " " << zPos[i]/v << " " << i << " "  << volumes[i] << std::endl;
    }
    myOut.close();


    // save images, write tomogram
    WriteImages(safe, outFolderName+"images/", "5_particles_woInsideHoles", nz); 

    filename = outFolderName +  "particles_labelled_ed" + std::to_string(static_cast<int>(erosiondepth)) +  ".raw";
    safe.write_raw(filename, "uint16_t");

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x958, %rsp            # imm = 0x958
cmpl $0x9, %edi
jne 0x4d93
movq %rsi, %rbx
movq 0x8(%rsi), %rsi
leaq 0x380(%rsp), %rdi
leaq 0x690(%rsp), %rdx
callq 0x30f0
movq 0x10(%rbx), %rsi
leaq 0x20(%rsp), %rdi
leaq 0x690(%rsp), %rdx
callq 0x30f0
leaq 0x620(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x610(%rsp), %rdi
callq 0x12fde
leaq 0x610(%rsp), %rdi
callq 0x361c
movq 0x610(%rsp), %rdi
cmpq %r14, %rdi
je 0x3803
callq 0x3280
movq 0x18(%rbx), %rdi
callq 0x33b0
movl %eax, 0x48(%rsp)
movq 0x20(%rbx), %rdi
callq 0x33b0
movl %eax, 0x44(%rsp)
movq 0x28(%rbx), %rdi
callq 0x33b0
movl %eax, 0x10(%rsp)
movq 0x30(%rbx), %rdi
callq 0x33b0
movq %rax, 0x78(%rsp)
movq 0x38(%rbx), %rdi
callq 0x3320
movsd %xmm0, 0xa0(%rsp)
movq 0x40(%rbx), %rdi
callq 0x3320
movsd %xmm0, 0xb8(%rsp)
movq 0x19765(%rip), %rdi     # 0x1cfc8
leaq 0x139f6(%rip), %rsi     # 0x17260
movl $0x16, %edx
callq 0x32f0
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdx
movq 0x1973d(%rip), %rdi     # 0x1cfc8
callq 0x32f0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
xorpd %xmm0, %xmm0
movapd %xmm0, 0xe0(%rsp)
movq $0x0, 0xf0(%rsp)
leaq 0x600(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdx
addq %rsi, %rdx
leaq 0x5f0(%rsp), %rdi
callq 0x12fde
leaq 0x5e0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13965(%rip), %rsi     # 0x17277
leaq 0x13966(%rip), %rdx     # 0x1727f
leaq 0x5d0(%rsp), %rdi
callq 0x13074
movslq 0x48(%rsp), %rcx
movslq 0x44(%rsp), %r8
movslq 0x10(%rsp), %r9
leaq 0xe0(%rsp), %rdi
leaq 0x5f0(%rsp), %rsi
leaq 0x5d0(%rsp), %rdx
movq %rcx, 0x18(%rsp)
movq %r8, 0x50(%rsp)
movq %r9, 0x8(%rsp)
callq 0x5d78
movq 0x5d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x3973
callq 0x3280
movq 0x5f0(%rsp), %rdi
cmpq %r14, %rdi
je 0x3985
callq 0x3280
movq 0x1963c(%rip), %rbx     # 0x1cfc8
leaq 0x138ed(%rip), %rsi     # 0x17280
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x1960a(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x370(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x360(%rsp), %rdi
callq 0x12fde
leaq 0x138a5(%rip), %rsi     # 0x1729d
leaq 0x360(%rsp), %rdi
callq 0x3470
leaq 0x5c0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1388e(%rip), %rsi     # 0x172a6
leaq 0x13891(%rip), %rdx     # 0x172b0
leaq 0x5b0(%rsp), %rdi
callq 0x13074
leaq 0xe0(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x5b0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x61ff
movq 0x5b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x3a63
callq 0x3280
movq 0x360(%rsp), %rdi
cmpq %r14, %rdi
je 0x3a75
callq 0x3280
movq 0x1954c(%rip), %rbx     # 0x1cfc8
leaq 0x1382e(%rip), %rsi     # 0x172b1
movl $0xf, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x1951a(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movsd 0x13545(%rip), %xmm1    # 0x17008
movsd 0xa0(%rsp), %xmm0
mulsd %xmm0, %xmm1
cvttsd2si %xmm1, %rsi
leaq 0x690(%rsp), %rdi
movsd 0xb8(%rsp), %xmm1
callq 0x6d2a
xorpd %xmm0, %xmm0
leaq 0x1a0(%rsp), %rdx
movapd %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x690(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x70de
movq 0xe0(%rsp), %rcx
movq 0xe8(%rsp), %rdx
movq 0xf0(%rsp), %rsi
leaq 0x1b8(%rsp), %rax
movaps -0x18(%rax), %xmm0
movaps %xmm0, 0xe0(%rsp)
movq -0x8(%rax), %rdi
movq %rdi, 0xf0(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, 0xf8(%rsp)
movq 0x10(%rax), %rdi
movq %rdi, 0x108(%rsp)
movq %rcx, -0x18(%rax)
movq %rdx, -0x10(%rax)
movq %rsi, -0x8(%rax)
cmpq %rcx, %rdx
je 0x3b82
movq %rcx, 0x1a8(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq $0x0, 0x10(%rax)
leaq 0x350(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x340(%rsp), %rdi
callq 0x12fde
leaq 0x13702(%rip), %rsi     # 0x172c1
leaq 0x340(%rsp), %rdi
callq 0x3470
leaq 0x5a0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13698(%rip), %rsi     # 0x17277
leaq 0x13699(%rip), %rdx     # 0x1727f
leaq 0x590(%rsp), %rdi
callq 0x13074
leaq 0xe0(%rsp), %rdi
leaq 0x340(%rsp), %rsi
leaq 0x590(%rsp), %rdx
callq 0x7504
movq 0x590(%rsp), %rdi
cmpq %r15, %rdi
je 0x3c22
callq 0x3280
movq 0x340(%rsp), %rdi
cmpq %r14, %rdi
je 0x3c34
callq 0x3280
leaq 0x330(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x320(%rsp), %rdi
callq 0x12fde
leaq 0x1363c(%rip), %rsi     # 0x1729d
leaq 0x320(%rsp), %rdi
callq 0x3470
leaq 0x580(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1364f(%rip), %rsi     # 0x172d0
leaq 0x13653(%rip), %rdx     # 0x172db
leaq 0x570(%rsp), %rdi
callq 0x13074
leaq 0xe0(%rsp), %rdi
leaq 0x320(%rsp), %rsi
leaq 0x570(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x61ff
movq 0x570(%rsp), %rdi
cmpq %r15, %rdi
je 0x3ccc
callq 0x3280
movq 0x320(%rsp), %rdi
cmpq %r14, %rdi
je 0x3cde
callq 0x3280
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x3cf0
callq 0x3280
movq 0x6e0(%rsp), %rdi
testq %rdi, %rdi
je 0x3d02
callq 0x3280
movq 0x6b0(%rsp), %rdi
testq %rdi, %rdi
je 0x3d14
callq 0x3280
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1a0(%rsp)
movq $0x0, 0x1b0(%rsp)
leaq 0x560(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x550(%rsp), %rdi
callq 0x12fde
leaq 0x4f(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
leaq 0x1a0(%rsp), %rdx
leaq 0x550(%rsp), %rcx
movsd 0x13298(%rip), %xmm0    # 0x17010
callq 0x7928
movq 0x550(%rsp), %rdi
cmpq %r14, %rdi
je 0x3d8f
callq 0x3280
leaq 0xf8(%rsp), %rax
movq -0x18(%rax), %rcx
cmpq %rcx, -0x10(%rax)
je 0x3da9
movq %rcx, 0xe8(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq $0x0, 0x10(%rax)
leaq 0x310(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x300(%rsp), %rdi
callq 0x12fde
leaq 0x134f6(%rip), %rsi     # 0x172dc
leaq 0x300(%rsp), %rdi
callq 0x3470
leaq 0x540(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13471(%rip), %rsi     # 0x17277
leaq 0x13472(%rip), %rdx     # 0x1727f
leaq 0x530(%rsp), %rdi
callq 0x13074
leaq 0x1a0(%rsp), %rdi
leaq 0x300(%rsp), %rsi
leaq 0x530(%rsp), %rdx
callq 0x7504
movq 0x530(%rsp), %rdi
cmpq %r15, %rdi
je 0x3e49
callq 0x3280
movq 0x300(%rsp), %rdi
cmpq %r14, %rdi
je 0x3e5b
callq 0x3280
leaq 0x2f0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2e0(%rsp), %rdi
callq 0x12fde
leaq 0x13415(%rip), %rsi     # 0x1729d
leaq 0x2e0(%rsp), %rdi
callq 0x3470
leaq 0x520(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13445(%rip), %rsi     # 0x172ed
leaq 0x1344b(%rip), %rdx     # 0x172fa
leaq 0x510(%rsp), %rdi
callq 0x13074
leaq 0x1a0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
leaq 0x510(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x61ff
movq 0x510(%rsp), %rdi
cmpq %r15, %rdi
je 0x3ef3
callq 0x3280
movq 0x2e0(%rsp), %rdi
cmpq %r14, %rdi
je 0x3f05
callq 0x3280
movq 0x190bc(%rip), %rbx     # 0x1cfc8
leaq 0x133e8(%rip), %rsi     # 0x172fb
movl $0x13, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x1908a(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x3d8(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
callq 0x82fc
xorpd %xmm0, %xmm0
movapd %xmm0, 0x180(%rsp)
xorl %eax, %eax
movq %rax, 0x190(%rsp)
movq %rax, 0x120(%rsp)
movapd %xmm0, 0x110(%rsp)
leaq 0x500(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x4f0(%rsp), %rdi
callq 0x12fde
leaq 0x3d8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
leaq 0x180(%rsp), %rdx
leaq 0x110(%rsp), %rcx
leaq 0x4f0(%rsp), %r8
movl $0x96, %r9d
callq 0x83ea
movq 0x4f0(%rsp), %rdi
cmpq %r14, %rdi
je 0x3ffa
callq 0x3280
movq 0x110(%rsp), %rax
movq $0x0, (%rax)
movq 0x18fb8(%rip), %rbx     # 0x1cfc8
leaq 0x132f8(%rip), %rsi     # 0x1730f
movl $0x13, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x18f86(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x110(%rsp), %rax
movq 0x118(%rsp), %rcx
cmpq %rcx, %rax
je 0x4097
xorpd %xmm0, %xmm0
movq %rax, %rdx
addsd (%rdx), %xmm0
addq $0x8, %rdx
cmpq %rcx, %rdx
jne 0x406b
subq %rax, %rcx
sarq $0x3, %rcx
xorl %edx, %edx
movsd (%rax,%rdx,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, (%rax,%rdx,8)
incq %rdx
cmpq %rdx, %rcx
jne 0x4081
leaq 0x110(%rsp), %rdi
callq 0x8bdc
movapd %xmm0, 0xa0(%rsp)
movq 0x18f14(%rip), %rdi     # 0x1cfc8
leaq 0x13268(%rip), %rsi     # 0x17323
movl $0x15, %edx
callq 0x32f0
movq 0x18efc(%rip), %rdi     # 0x1cfc8
movapd 0xa0(%rsp), %xmm0
callq 0x33c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movapd 0xa0(%rsp), %xmm0
cvttsd2si %xmm0, %rax
movq %rax, %rcx
subsd 0x12efb(%rip), %xmm0    # 0x17018
cvttsd2si %xmm0, %rsi
sarq $0x3f, %rcx
andq %rcx, %rsi
orq %rax, %rsi
movq 0x180(%rsp), %rax
movq 0x188(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rsi, %rdx
jbe 0x57d4
movsd (%rax,%rsi,8), %xmm0
movsd %xmm0, 0xa0(%rsp)
movq 0x18e67(%rip), %rdi     # 0x1cfc8
leaq 0x131d1(%rip), %rsi     # 0x17339
movl $0x14, %edx
callq 0x32f0
cvttsd2si 0xa0(%rsp), %ebp
movzwl %bp, %r15d
movq 0x18e42(%rip), %rdi     # 0x1cfc8
movl %r15d, %esi
callq 0x3420
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x18e09(%rip), %rbx     # 0x1cfc8
leaq 0x13188(%rip), %rsi     # 0x1734e
movl $0x22, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x18dd7(%rip), %rbx     # 0x1cfc8
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x140(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x130(%rsp), %rdi
callq 0x12fde
leaq 0x13143(%rip), %rsi     # 0x17371
leaq 0x130(%rsp), %rdi
callq 0x3470
leaq 0x690(%rsp), %rdi
leaq 0x130(%rsp), %rsi
movl $0x10, %edx
callq 0x3480
movq 0x130(%rsp), %rdi
cmpq %r14, %rdi
je 0x4267
callq 0x3280
leaq 0x13123(%rip), %rsi     # 0x17391
leaq 0x690(%rsp), %r14
movl $0x1b, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x130f2(%rip), %rsi     # 0x173ad
leaq 0x690(%rsp), %rdi
movl $0x8, %edx
callq 0x32f0
leaq 0x690(%rsp), %rdi
movl %r15d, %esi
callq 0x3420
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x130a8(%rip), %rsi     # 0x173b6
leaq 0x690(%rsp), %r14
movl $0x16, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x13072(%rip), %rsi     # 0x173cd
leaq 0x690(%rsp), %r14
movl $0x17, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x1303d(%rip), %rsi     # 0x173e5
leaq 0x690(%rsp), %r14
movl $0xb, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12ffc(%rip), %rsi     # 0x173f1
leaq 0x690(%rsp), %r14
movl $0x34, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12fe4(%rip), %rsi     # 0x17426
leaq 0x690(%rsp), %r14
movl $0x1d, %edx
movq %r14, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x690(%rsp), %rdi
callq 0x3360
movq 0x18b1c(%rip), %rax     # 0x1cfb8
movq (%rax), %rcx
movq 0x18(%rax), %rdx
leaq 0x698(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq %rcx, 0xb8(%rsp)
movq -0x18(%rcx), %rax
movq %rdx, 0x1f8(%rsp)
movq %rdx, 0x690(%rsp,%rax)
callq 0x3250
leaq 0x788(%rsp), %rdi
callq 0x30c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x18acd(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq %rax, %rbx
leaq 0x12f32(%rip), %rsi     # 0x17444
movl $0x17, %edx
movq %rax, %rdi
callq 0x32f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
xorpd %xmm0, %xmm0
leaq 0x130(%rsp), %rdi
movapd %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x8e82
cmpl $0x0, 0x10(%rsp)
je 0x45ed
xorl %ebx, %ebx
leaq 0x1a0(%rsp), %r14
leaq 0x130(%rsp), %r15
cmpl $0x0, 0x44(%rsp)
je 0x45e3
xorl %r12d, %r12d
cmpl $0x0, 0x48(%rsp)
je 0x45d9
xorl %r13d, %r13d
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x8fee
cmpw %bp, %ax
jb 0x45cf
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
movl $0x1, %r8d
callq 0x9356
incq %r13
cmpq %r13, 0x18(%rsp)
jne 0x45a2
incq %r12
cmpq 0x50(%rsp), %r12
jne 0x4598
incq %rbx
cmpq 0x8(%rsp), %rbx
jne 0x458e
leaq 0x2d0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2c0(%rsp), %rdi
callq 0x12fde
leaq 0x12c84(%rip), %rsi     # 0x1729e
leaq 0x2c0(%rsp), %rdi
callq 0x3470
leaq 0x4e0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12e22(%rip), %rsi     # 0x1745c
leaq 0x12e23(%rip), %rdx     # 0x17464
leaq 0x4d0(%rsp), %rdi
callq 0x13074
leaq 0x130(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
leaq 0x4d0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x96b9
movq 0x4d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x4685
callq 0x3280
movq 0x2c0(%rsp), %rdi
cmpq %r14, %rdi
je 0x4697
callq 0x3280
xorpd %xmm0, %xmm0
leaq 0x920(%rsp), %rdi
movapd %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x8e82
leaq 0x130(%rsp), %rdi
callq 0xa1e4
leaq 0x2b0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2a0(%rsp), %rdi
callq 0x12fde
leaq 0x12b9e(%rip), %rsi     # 0x1729e
leaq 0x2a0(%rsp), %rdi
callq 0x3470
leaq 0x4c0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12d45(%rip), %rsi     # 0x17465
leaq 0x12d54(%rip), %rdx     # 0x1747b
leaq 0x4b0(%rsp), %rdi
callq 0x13074
leaq 0x130(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
leaq 0x4b0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x96b9
movq 0x4b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x476b
callq 0x3280
movq 0x2a0(%rsp), %rdi
cmpq %r14, %rdi
je 0x477d
callq 0x3280
leaq 0x290(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x280(%rsp), %rdi
callq 0x12fde
leaq 0x12cd2(%rip), %rsi     # 0x1747c
leaq 0x280(%rsp), %rdi
callq 0x3470
leaq 0x4a0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12cc8(%rip), %rsi     # 0x17492
leaq 0x12cc8(%rip), %rdx     # 0x17499
leaq 0x490(%rsp), %rdi
callq 0x13074
leaq 0x130(%rsp), %rdi
leaq 0x280(%rsp), %rsi
leaq 0x490(%rsp), %rdx
callq 0xaa8e
movq 0x490(%rsp), %rdi
cmpq %r15, %rdi
je 0x480d
callq 0x3280
movq 0x280(%rsp), %rdi
cmpq %r14, %rdi
je 0x481f
callq 0x3280
xorpd %xmm0, %xmm0
movapd %xmm0, 0x3a0(%rsp)
movq $0x0, 0x3b0(%rsp)
leaq 0x270(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x260(%rsp), %rdi
callq 0x12fde
leaq 0x12a38(%rip), %rsi     # 0x1729d
leaq 0x260(%rsp), %rdi
callq 0x3470
xorps %xmm0, %xmm0
cvtsi2ssl 0x78(%rsp), %xmm0
leaq 0x130(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
leaq 0x260(%rsp), %rdx
movl $0x64, %ecx
callq 0xae40
movq 0x260(%rsp), %rdi
cmpq %r15, %rdi
je 0x48af
callq 0x3280
leaq 0x3a0(%rsp), %rdi
movsd 0x12761(%rip), %xmm0    # 0x17020
callq 0xbf42
leaq 0x250(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0x12fde
leaq 0x129ad(%rip), %rsi     # 0x1729e
leaq 0x240(%rsp), %rdi
callq 0x3470
leaq 0x480(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x12b88(%rip), %rsi     # 0x1749a
leaq 0x12b8a(%rip), %rdx     # 0x174a3
leaq 0x470(%rsp), %rdi
callq 0x13074
leaq 0x3a0(%rsp), %rdi
leaq 0x240(%rsp), %rsi
leaq 0x470(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0xc258
movq 0x470(%rsp), %rdi
cmpq %r12, %rdi
je 0x495d
callq 0x3280
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x496f
callq 0x3280
leaq 0x230(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0x12fde
leaq 0x12902(%rip), %rsi     # 0x1729e
leaq 0x220(%rsp), %rdi
callq 0x3470
leaq 0x460(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x12ae7(%rip), %rsi     # 0x174a4
leaq 0x12aef(%rip), %rdx     # 0x174b3
leaq 0x450(%rsp), %rdi
callq 0x13074
leaq 0x3a0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x450(%rsp), %rdx
movq 0x8(%rsp), %rcx
movl $0x1, %r8d
callq 0xc258
movq 0x450(%rsp), %rdi
cmpq %r12, %rdi
je 0x4a0b
callq 0x3280
movq 0x220(%rsp), %rdi
cmpq %r15, %rdi
je 0x4a1d
callq 0x3280
movq 0x185a4(%rip), %rbx     # 0x1cfc8
leaq 0x12a89(%rip), %rsi     # 0x174b4
movl $0x15, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x18572(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x638(%rsp), %rax
xorl %ecx, %ecx
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x8f8(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x8c8(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x898(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x660(%rsp), %rdi
movq %rcx, 0x10(%rdi)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0xcd8e
movq 0x184c9(%rip), %rbx     # 0x1cfc8
leaq 0x129c4(%rip), %rsi     # 0x174ca
movl $0xf, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x18497(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
cmpl $0x0, 0x10(%rsp)
je 0x4caa
xorl %ebx, %ebx
leaq 0x690(%rsp), %r13
leaq 0x890(%rsp), %r14
movq 0x18466(%rip), %rdi     # 0x1cfc8
movq %rbx, %rsi
callq 0x31d0
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1313e(%rip), %rsi     # 0x17cb7
callq 0x32f0
cmpl $0x0, 0x44(%rsp)
je 0x4c9d
movl %ebx, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0xa0(%rsp)
xorl %ebp, %ebp
cmpl $0x0, 0x48(%rsp)
je 0x4c90
movl %ebp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x10(%rsp)
xorl %r12d, %r12d
leaq 0x3a0(%rsp), %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0xcef2
movl %eax, %r15d
movzwl %r15w, %r8d
leaq 0x660(%rsp), %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0xd25a
movzwl %r15w, %r15d
movq %r15, 0x690(%rsp)
leaq 0x630(%rsp), %rdi
movq %r13, %rsi
callq 0xd5c2
incl (%rax)
movq %r15, 0x690(%rsp)
leaq 0x8f0(%rsp), %rdi
movq %r13, %rsi
callq 0xd628
movl %r12d, %ecx
xorps %xmm0, %xmm0
cvtsi2sd %rcx, %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq %r15, 0x690(%rsp)
leaq 0x8c0(%rsp), %rdi
movq %r13, %rsi
callq 0xd628
movsd (%rax), %xmm0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rax)
movq %r15, 0x690(%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xd628
movsd (%rax), %xmm0
addsd 0xa0(%rsp), %xmm0
movsd %xmm0, (%rax)
incl %r12d
cmpq 0x18(%rsp), %r12
jne 0x4bbc
incl %ebp
cmpq 0x50(%rsp), %rbp
jne 0x4b9e
incl %ebx
cmpq 0x8(%rsp), %rbx
jne 0x4b5b
movq 0x18317(%rip), %rbx     # 0x1cfc8
leaq 0x12822(%rip), %rsi     # 0x174da
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x182e5(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x90(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x80(%rsp), %rdi
callq 0x12fde
leaq 0x127d9(%rip), %rsi     # 0x174f6
leaq 0x80(%rsp), %rdi
callq 0x3470
movq 0x78(%rsp), %rax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl $0x1, %ebx
movl %ecx, 0x10(%rsp)
cmpl $0xa, %ecx
jb 0x4df7
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl 0x10(%rsp), %ecx
cmpl $0x63, %ecx
jbe 0x4df0
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x4df5
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x4df7
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x4d56
addl $-0x3, %ebx
jmp 0x4df7
movq 0x1824e(%rip), %rbx     # 0x1cfe8
leaq 0x12435(%rip), %rsi     # 0x171d6
movl $0x26, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12421(%rip), %rsi     # 0x171fd
movl $0x62, %edx
movq %rbx, %rdi
callq 0x32f0
xorl %ebx, %ebx
jmp 0x57c0
addl $-0x2, %ebx
jmp 0x4df7
decl %ebx
movq 0x78(%rsp), %r14
shrl $0x1f, %r14d
leal (%rbx,%r14), %esi
leaq 0x68(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x58(%rsp), %rdi
movl $0x2d, %edx
callq 0x3300
movq %r14, 0x78(%rsp)
movl %r14d, %eax
movq 0x58(%rsp), %rdi
movq %rax, 0xa0(%rsp)
addq %rax, %rdi
movl %ebx, %esi
movl 0x10(%rsp), %edx
callq 0x12edd
movq 0x80(%rsp), %rcx
movq 0x88(%rsp), %r8
movq 0x60(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
leaq 0x90(%rsp), %rsi
cmpq %rsi, %rcx
je 0x4e72
movq 0x90(%rsp), %rdi
movq 0x58(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x4e95
movl $0xf, %edi
leaq 0x68(%rsp), %r9
cmpq %r9, %rsi
je 0x4e90
movq 0x68(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x4ea4
leaq 0x80(%rsp), %rdi
callq 0x30b0
jmp 0x4eb2
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x32d0
leaq 0x6a0(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x4edf
movq %rsi, 0x690(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x6a0(%rsp)
jmp 0x4ee7
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x698(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x12d53(%rip), %rsi     # 0x17c61
leaq 0x690(%rsp), %rdi
callq 0x3470
leaq 0xd0(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f4b
movq %rdx, 0xc0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd0(%rsp)
jmp 0x4f53
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xc8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x6a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4f84
callq 0x3280
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x4f98
callq 0x3280
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x4fb2
callq 0x3280
movq 0x1800f(%rip), %rdi     # 0x1cfc8
leaq 0x1254e(%rip), %rsi     # 0x1750e
movl $0xa, %edx
callq 0x32f0
movq 0xc0(%rsp), %rsi
movq 0xc8(%rsp), %rdx
movq 0x17fe7(%rip), %rdi     # 0x1cfc8
callq 0x32f0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x690(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
movl $0x10, %edx
callq 0x3480
movq 0x690(%rsp), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x6b0(%rsp,%rax)
je 0x5090
movq 0x17fa1(%rip), %rbx     # 0x1cfe8
leaq 0x124cb(%rip), %rsi     # 0x17519
movl $0x13, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq 0x17f6f(%rip), %rdi     # 0x1cfe8
callq 0x3040
movl $0x1, %ebx
movq %rax, %rdi
callq 0x31e0
jmp 0x566d
leaq 0x12496(%rip), %rsi     # 0x1752d
leaq 0x690(%rsp), %rbx
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x32f0
movq 0x690(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12464(%rip), %rsi     # 0x17548
leaq 0x690(%rsp), %rdi
movl $0x7, %edx
callq 0x32f0
leaq 0x690(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x31d0
movq %rax, %rbx
leaq 0x1243e(%rip), %rsi     # 0x17550
movl $0x1b, %edx
movq %rax, %rdi
callq 0x32f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq $0x0, 0x80(%rsp)
cmpq $0x0, 0x658(%rsp)
je 0x52d5
leaq 0x630(%rsp), %rbx
leaq 0x80(%rsp), %r12
leaq 0x12b3f(%rip), %r13     # 0x17cb7
leaq 0x690(%rsp), %r15
leaq 0x890(%rsp), %rbp
movq %rbx, %rdi
movq %r12, %rsi
callq 0xd736
movl (%rax), %r14d
testl %r14d, %r14d
je 0x52b4
movl $0x1, %edx
movq %r15, %rdi
movq %r13, %rsi
callq 0x32f0
leaq 0x8f0(%rsp), %rdi
movq %r12, %rsi
callq 0xd79c
cvtsi2sd %r14, %xmm1
movsd (%rax), %xmm0
movsd %xmm1, 0x18(%rsp)
divsd %xmm1, %xmm0
movq %r15, %rdi
callq 0x33c0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x32f0
leaq 0x8c0(%rsp), %rdi
movq %r12, %rsi
callq 0xd79c
movsd (%rax), %xmm0
divsd 0x18(%rsp), %xmm0
movq %r14, %rdi
callq 0x33c0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x32f0
movq %rbp, %rdi
movq %r12, %rsi
callq 0xd79c
movsd (%rax), %xmm0
divsd 0x18(%rsp), %xmm0
movq %r14, %rdi
callq 0x33c0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x32f0
movq 0x80(%rsp), %rsi
movq %r14, %rdi
callq 0x31d0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x32f0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xd736
movl (%rax), %esi
movq %r14, %rdi
callq 0x31d0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x32a0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x80(%rsp), %rax
incq %rax
movq %rax, 0x80(%rsp)
cmpq 0x658(%rsp), %rax
jne 0x5188
leaq 0x690(%rsp), %rdi
callq 0x3360
leaq 0x210(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x200(%rsp), %rdi
callq 0x12fde
leaq 0x11f8f(%rip), %rsi     # 0x1729e
leaq 0x200(%rsp), %rdi
callq 0x3470
leaq 0x440(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1223d(%rip), %rsi     # 0x1756c
leaq 0x1224f(%rip), %rdx     # 0x17585
leaq 0x430(%rsp), %rdi
callq 0x13074
leaq 0x660(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq 0x430(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x61ff
movq 0x430(%rsp), %rdi
cmpq %r15, %rdi
je 0x537a
callq 0x3280
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x538c
callq 0x3280
leaq 0x170(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x160(%rsp), %rdi
callq 0x12fde
leaq 0x121cd(%rip), %rsi     # 0x17586
leaq 0x160(%rsp), %rdi
callq 0x3470
movl $0x1, %ebx
cmpl $0xa, 0x10(%rsp)
jb 0x5418
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl 0x10(%rsp), %ecx
cmpl $0x63, %ecx
jbe 0x5411
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x5416
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x5418
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x53e0
addl $-0x3, %ebx
jmp 0x5418
addl $-0x2, %ebx
jmp 0x5418
decl %ebx
movq 0x78(%rsp), %rsi
addl %ebx, %esi
leaq 0x1e8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1d8(%rsp), %rdi
movl $0x2d, %edx
callq 0x3300
movq 0xa0(%rsp), %rdi
addq 0x1d8(%rsp), %rdi
movl %ebx, %esi
movl 0x10(%rsp), %edx
callq 0x12edd
movq 0x160(%rsp), %rcx
movq 0x168(%rsp), %r8
movq 0x1e0(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %r14, %rcx
je 0x5486
movq 0x170(%rsp), %rdi
movq 0x1d8(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x54aa
movl $0xf, %edi
cmpq %r15, %rsi
je 0x54a5
movq 0x1e8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x54b9
leaq 0x160(%rsp), %rdi
callq 0x30b0
jmp 0x54ca
leaq 0x1d8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x32d0
leaq 0x68(%rsp), %rsi
movq %rsi, 0x58(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x54ef
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x54f7
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x60(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x11dcd(%rip), %rsi     # 0x172e8
leaq 0x58(%rsp), %rdi
callq 0x3470
leaq 0x90(%rsp), %r12
movq %r12, 0x80(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5559
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x5563
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x80(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x3310
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x559f
callq 0x3280
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x55b3
callq 0x3280
movq 0x1d8(%rsp), %rdi
cmpq %r15, %rdi
je 0x55c5
callq 0x3280
movq 0x160(%rsp), %rdi
cmpq %r14, %rdi
je 0x55d7
callq 0x3280
leaq 0x420(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0xc0(%rsp), %rsi
movq 0xc8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x410(%rsp), %rdi
callq 0x12fde
leaq 0x400(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x11c61(%rip), %rsi     # 0x17277
leaq 0x11c62(%rip), %rdx     # 0x1727f
leaq 0x3f0(%rsp), %rdi
callq 0x13074
leaq 0x660(%rsp), %rdi
leaq 0x410(%rsp), %rsi
leaq 0x3f0(%rsp), %rdx
callq 0x7504
movq 0x3f0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5659
callq 0x3280
movq 0x410(%rsp), %rdi
xorl %ebx, %ebx
cmpq %r14, %rdi
je 0x566d
callq 0x3280
leaq 0x698(%rsp), %rdi
movq 0xb8(%rsp), %rax
movq %rax, -0x8(%rdi)
movq -0x18(%rax), %rax
movq 0x1f8(%rsp), %rcx
movq %rcx, 0x690(%rsp,%rax)
callq 0x3250
leaq 0x788(%rsp), %rdi
callq 0x30c0
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x56c1
callq 0x3280
movq 0x660(%rsp), %rdi
testq %rdi, %rdi
je 0x56d3
callq 0x3280
leaq 0x890(%rsp), %rdi
callq 0x12f4a
leaq 0x8c0(%rsp), %rdi
callq 0x12f4a
leaq 0x8f0(%rsp), %rdi
callq 0x12f4a
leaq 0x630(%rsp), %rdi
callq 0x12f94
movq 0x3a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5719
callq 0x3280
movq 0x920(%rsp), %rdi
testq %rdi, %rdi
je 0x572b
callq 0x3280
movq 0x130(%rsp), %rdi
testq %rdi, %rdi
je 0x573d
callq 0x3280
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x574f
callq 0x3280
movq 0x180(%rsp), %rdi
testq %rdi, %rdi
je 0x5761
callq 0x3280
movq 0x3d8(%rsp), %rdi
testq %rdi, %rdi
je 0x5773
callq 0x3280
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5785
callq 0x3280
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x5797
callq 0x3280
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x57aa
callq 0x3280
leaq 0x390(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x57c0
callq 0x3280
movl %ebx, %eax
addq $0x958, %rsp            # imm = 0x958
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x11f7e(%rip), %rdi     # 0x17759
xorl %eax, %eax
callq 0x3390
movq %rax, %rbx
movq 0x3f0(%rsp), %rdi
cmpq %r15, %rdi
je 0x57fc
callq 0x3280
jmp 0x57fc
movq %rax, %rbx
movq 0x410(%rsp), %rdi
jmp 0x586e
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x5822
callq 0x3280
jmp 0x5822
movq %rax, %rbx
movq 0x1d8(%rsp), %rdi
cmpq %r15, %rdi
je 0x583b
callq 0x3280
jmp 0x583b
jmp 0x5838
movq %rax, %rbx
movq 0x160(%rsp), %rdi
jmp 0x586e
jmp 0x5c34
movq %rax, %rbx
movq 0x430(%rsp), %rdi
cmpq %r15, %rdi
je 0x5866
callq 0x3280
jmp 0x5866
jmp 0x5863
movq %rax, %rbx
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x5c37
callq 0x3280
jmp 0x5c37
jmp 0x5bf0
movq %rax, %rbx
leaq 0x6a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x58a4
callq 0x3280
jmp 0x58a4
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x58bf
callq 0x3280
jmp 0x58bf
jmp 0x58bc
movq %rax, %rbx
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
jmp 0x5c54
jmp 0x5c6d
movq %rdx, %r14
movq %rax, %rbx
movq 0x450(%rsp), %rdi
cmpq %r12, %rdi
je 0x58fb
callq 0x3280
jmp 0x58fb
jmp 0x58f5
movq %rdx, %r14
movq %rax, %rbx
movq 0x220(%rsp), %rdi
jmp 0x5941
movq %rdx, %r14
movq %rax, %rbx
movq 0x470(%rsp), %rdi
cmpq %r12, %rdi
je 0x5927
callq 0x3280
jmp 0x5927
jmp 0x5921
movq %rdx, %r14
movq %rax, %rbx
movq 0x240(%rsp), %rdi
jmp 0x5941
jmp 0x5933
movq %rdx, %r14
movq %rax, %rbx
movq 0x260(%rsp), %rdi
cmpq %r15, %rdi
je 0x5b95
callq 0x3280
jmp 0x5b95
movq %rax, %rbx
movq 0x490(%rsp), %rdi
cmpq %r15, %rdi
je 0x5970
callq 0x3280
jmp 0x5970
jmp 0x596d
movq %rax, %rbx
movq 0x280(%rsp), %rdi
jmp 0x599e
movq %rax, %rbx
movq 0x4b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5996
callq 0x3280
jmp 0x5996
jmp 0x5993
movq %rax, %rbx
movq 0x2a0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5cc3
jmp 0x5cc8
movq %rax, %rbx
movq 0x4d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x59c8
callq 0x3280
jmp 0x59c8
jmp 0x59c5
movq %rax, %rbx
movq 0x2c0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5cd5
jmp 0x5cda
jmp 0x59e0
movq %rax, %rbx
movq 0x130(%rsp), %rdi
jmp 0x59fd
jmp 0x5c15
movq %rax, %rbx
movq 0x4f0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5ce7
jmp 0x5cec
jmp 0x5c03
movq %rax, %rbx
movq 0x510(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a2c
callq 0x3280
jmp 0x5a2c
jmp 0x5a29
movq %rax, %rbx
movq 0x2e0(%rsp), %rdi
jmp 0x5a67
movq %rax, %rbx
movq 0x530(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a52
callq 0x3280
jmp 0x5a52
jmp 0x5a4f
movq %rax, %rbx
movq 0x300(%rsp), %rdi
jmp 0x5a67
movq %rax, %rbx
movq 0x550(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d1d
jmp 0x5d22
movq %rax, %rbx
movq 0x570(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a91
callq 0x3280
jmp 0x5a91
jmp 0x5a8e
movq %rax, %rbx
movq 0x320(%rsp), %rdi
jmp 0x5abf
movq %rax, %rbx
movq 0x590(%rsp), %rdi
cmpq %r15, %rdi
je 0x5ab7
callq 0x3280
jmp 0x5ab7
jmp 0x5ab4
movq %rax, %rbx
movq 0x340(%rsp), %rdi
cmpq %r14, %rdi
je 0x5b63
callq 0x3280
jmp 0x5b63
jmp 0x5c0d
movq %rax, %rbx
movq 0x5b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5af3
callq 0x3280
jmp 0x5af3
jmp 0x5af0
movq %rax, %rbx
movq 0x360(%rsp), %rdi
jmp 0x5b1f
movq %rax, %rbx
movq 0x5d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5b17
callq 0x3280
jmp 0x5b17
movq %rax, %rbx
movq 0x5f0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d2f
jmp 0x5d34
movq %rax, %rbx
movq 0x610(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d41
jmp 0x5d46
jmp 0x5bf7
movq %rax, %rbx
jmp 0x5d59
movq %rax, %rbx
jmp 0x5d6f
jmp 0x5c68
movq %rax, %rbx
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5b75
callq 0x3280
leaq 0x690(%rsp), %rdi
callq 0x7904
jmp 0x5d34
movq %rax, %rbx
jmp 0x5cb6
movq %rdx, %r14
movq %rax, %rbx
cmpl $0x1, %r14d
jne 0x5cb6
movq %rbx, %rdi
callq 0x3100
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq 0x17433(%rip), %rdi     # 0x1cfe8
callq 0x32f0
movq %rax, %rdi
callq 0x3140
movl $0x1, %ebx
callq 0x33e0
jmp 0x5707
jmp 0x5b87
movq %rax, %rbx
callq 0x33e0
jmp 0x5cb6
movq %rax, %rdi
callq 0xcd83
movq %rax, %rbx
jmp 0x5cc8
movq %rax, %rbx
jmp 0x5c44
jmp 0x5c15
movq %rax, %rbx
jmp 0x5d46
jmp 0x5c15
jmp 0x5c34
movq %rax, %rbx
jmp 0x5d22
jmp 0x5c6d
movq %rax, %rbx
jmp 0x5d34
movq %rax, %rbx
jmp 0x5cec
movq %rax, %rbx
leaq 0x690(%rsp), %rdi
callq 0x3380
jmp 0x5cec
jmp 0x5c6d
movq %rax, %rbx
leaq 0x690(%rsp), %rdi
callq 0x3380
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x5c70
callq 0x3280
jmp 0x5c70
jmp 0x5c6d
jmp 0x5c6d
jmp 0x5c6d
jmp 0x5c6d
movq %rax, %rbx
jmp 0x5cda
movq %rax, %rbx
movq 0x660(%rsp), %rdi
testq %rdi, %rdi
je 0x5c82
callq 0x3280
leaq 0x890(%rsp), %rdi
callq 0x12f4a
leaq 0x8c0(%rsp), %rdi
callq 0x12f4a
leaq 0x8f0(%rsp), %rdi
callq 0x12f4a
leaq 0x630(%rsp), %rdi
callq 0x12f94
movq 0x3a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5cc8
callq 0x3280
movq 0x920(%rsp), %rdi
testq %rdi, %rdi
je 0x5cda
callq 0x3280
movq 0x130(%rsp), %rdi
testq %rdi, %rdi
je 0x5cec
callq 0x3280
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x5cfe
callq 0x3280
movq 0x180(%rsp), %rdi
testq %rdi, %rdi
je 0x5d10
callq 0x3280
movq 0x3d8(%rsp), %rdi
testq %rdi, %rdi
je 0x5d22
callq 0x3280
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5d34
callq 0x3280
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x5d46
callq 0x3280
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5d59
callq 0x3280
leaq 0x390(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5d6f
callq 0x3280
movq %rbx, %rdi
callq 0x3430
nop