// File: /workspace/github_cpp_makefile_star2_O2/Luthaf[P]zeopp/psd.cc
// Function: NEWcalcPoreSizeDistr(MATERIAL*, std::ostream&)
void NEWcalcPoreSizeDistr(MATERIAL *Mat, ostream &output){

/* PSD debug section (old code that is not used */
  bool PSDDEBUG = false; // this flag enables execution of old parts of PSD output
                         // that can be used for debuging  

  string pointsFile, nodeAndRadiiFile;
  if(PSDDEBUG == true) { pointsFile = "DEBUG_PSDpointsfile"; nodeAndRadiiFile = "DEBUG_PSDnodeAndRadiiFile"; };
  ofstream outfile;
  if (!pointsFile.empty()) outfile.open(pointsFile.data());
  ofstream nodeAndRadii;
  if (!nodeAndRadiiFile.empty()) nodeAndRadii.open(nodeAndRadiiFile.data());

//The following data structures are used to PSDDEBUG

//List of sample points and radius of sphere that contains sample point for visualization in Visit
  vector <pair <Point, double> > axsPoint_and_radiiOfNodeSphere;
  vector <pair <Point, double> > axsPoint_and_radiiOfGhostSphere;
//List of node coordinates and radii for visualization
  vector <int> nodeIDs;
  vector <pair <Point, double> > coord_and_radiiOfNodeSphere;
  vector <pair <Point, double> > coord_and_radiiOfGhostSphere;
	vector <double> distanceBetweenNodeSpheres;
	vector <double> distanceBetweenGhostSpheres;

/* end PSD debug */


/* PSD codes assumes that AV run was executed and AV data structures in MATERIALS class are filled with data */

  int count = Mat->AVcount; // number of AV samples that turned accessible
  int incount = 0; // count number of points inside Voronoi nodes
  int outcount = 0; 

  cout << "PSD calculation for " << count << " points(" << Mat->AVaxsPoints.size() << ").\n"; 

  double pointParticleRadius; // used to be set to = Mat->AVprobeRadius; 

           // After vivid discussions with Rich, we concluded that the ghost particle radius
           // should be set to the smallest radius in the system
           // this gives the correct voronoi network, but the distance from the vericies of the ghost cell to the particle are not correct
           // representation of the pore diamter
  for(int i=0; i<Mat->accessAnalysis.analyzedAtomNet->atoms.size(); i++)
     {
     if(i == 0) pointParticleRadius = Mat->accessAnalysis.analyzedAtomNet->atoms.at(i).radius;
     else
     if(Mat->accessAnalysis.analyzedAtomNet->atoms.at(i).radius < pointParticleRadius) pointParticleRadius = Mat->accessAnalysis.analyzedAtomNet->atoms.at(i).radius;
     };
  cout << "Radius of ghost cell particle = " << pointParticleRadius << "\n";




//Below are functions that go beyond accessible volume calcluation. Each accessible point is analyzed to find the largest encapsulating sphere

//Determine whether sample point is inside/outside node sphere
  for (int a=0; a<Mat->AVaxsPoints.size(); a++){
    Point samplePt = Mat->accessAnalysis.analyzedAtomNet->abc_to_xyz(Mat->AVaxsPoints.at(a));
    Point maxNodeCoord = Point (0, 0, 0);
    double maxRadius = 0;
    for (int b=0; b<Mat->accessAnalysis.vornet.nodes.size(); b++)
      {
      bool access = Mat->accessAnalysis.accessInfo.at(b);
      if (access){
        Point nodePt = Point(Mat->accessAnalysis.vornet.nodes.at(b).x, Mat->accessAnalysis.vornet.nodes.at(b).y, Mat->accessAnalysis.vornet.nodes.at(b).z);
        double radius = Mat->accessAnalysis.vornet.nodes.at(b).rad_stat_sphere;
         //double radius = Mat->accessAnalysis.vornet.nodes.at(b).rad_stat_sphere + Mat->AVprobeRadius;
                        // commented out in non-inflated version
        double sampToNode = Mat->accessAnalysis.analyzedAtomNet->calcDistanceXYZ(samplePt[0], samplePt[1], samplePt[2], nodePt[0], nodePt[1], nodePt[2]);
        bool inSphere = (sampToNode <= radius); 
        //if point is inside more than one sphere, chooses largest sphere (i.e. largest radius)
        if (inSphere){
          maxRadius = max(radius, maxRadius);
          //If query zpsd, this stores the largest node sphere and its coordinate for visualization in Visit (only for PSD DEBUG)
          if (radius==maxRadius){
             maxNodeCoord = nodePt; 
             }
        } // ends if(inSphere)
      }
     }
    if (maxRadius==0) outcount++; 
    if (maxRadius!=0) incount++;



//Generate new "ghost" Voronoi cell

    // ghost cell particle radius (pointParticleRadius) is now set to the radius of the 
    // smallest atom (before the main PSD loop)

    voronoicell v(*(Mat->accessAnalysis.new_rad_con));
    Mat->accessAnalysis.new_rad_con->compute_ghost_cell(v, samplePt[0], samplePt[1], samplePt[2], pointParticleRadius);
    vector<double> vertexCoords;
    v.vertices(vertexCoords);

    vector <Point> pointVertexCoords;
    for (int a=0; a<vertexCoords.size(); a= a+3){
      Point vertexPoint = Point(vertexCoords.at(a), vertexCoords.at(a+1), vertexCoords.at(a+2));
      pointVertexCoords.push_back(vertexPoint);
    }

    double maxDistFromCtoV = 0;
    Point maxGhostCoord = Point (0, 0, 0);
//Calculate distance from center of cell to vertices
   for (int b=0; b<pointVertexCoords.size(); b++){
      Point vertexGlobalCoord = Point((samplePt[0]+pointVertexCoords.at(b)[0]), (samplePt[1]+pointVertexCoords.at(b)[1]), (samplePt[2]+pointVertexCoords.at(b)[2]));
      double calcDistFromCtoV = calcEuclideanDistance(pointVertexCoords.at(b)[0], pointVertexCoords.at(b)[1], pointVertexCoords.at(b)[2], 0.0, 0.0, 0.0) - pointParticleRadius;
      maxDistFromCtoV = max(maxDistFromCtoV, calcDistFromCtoV);
//If query zpsd, this stores the largest ghost sphere and its coordinate for visualization in Visit (only for PSDDEBUG)
      if (calcDistFromCtoV==maxDistFromCtoV){
         maxGhostCoord = vertexGlobalCoord;
         }
    }

//Compares node radius to biggest ghost radius and stores the larger of the two values accordingly
    double origNodeRadius = maxRadius;
    double ghostRadius = maxDistFromCtoV;  
    bool compareRadii = (origNodeRadius >= ghostRadius); 
    if (compareRadii) {
      Mat->AVaxsPointsPSD.push_back(2.0*origNodeRadius); 
      if (PSDDEBUG){
      axsPoint_and_radiiOfNodeSphere.push_back(pair<Point, double>(samplePt, origNodeRadius));
      checkDuplicates((Mat->accessAnalysis.analyzedAtomNet), &(Mat->accessAnalysis.vornet), nodeIDs, coord_and_radiiOfNodeSphere, maxNodeCoord, origNodeRadius);
      }
    }
    if (!compareRadii) {
      Mat->AVaxsPointsPSD.push_back(2.0*ghostRadius);
      if (PSDDEBUG){
        axsPoint_and_radiiOfGhostSphere.push_back(pair<Point, double>(samplePt, ghostRadius));
        coord_and_radiiOfGhostSphere.push_back(pair <Point, double> (maxGhostCoord, maxDistFromCtoV));
      }
    }
  }

  double volumeFraction = count*1.0/Mat->AVnumSamples;
  double nodeVolFraction = incount*1.0/Mat->AVnumSamples;
  double outFraction = outcount*1.0/Mat->AVnumSamples;


  Histogram(output, BINSTEP, MAXBINS, (Mat->AVaxsPointsPSD), count, nodeVolFraction, outFraction, Mat->AVnumSamples);

  printf("Pore size distribution calculated.\n\n");

  if (PSDDEBUG) {
    printFileCoords_Radii(outfile, axsPoint_and_radiiOfNodeSphere, axsPoint_and_radiiOfGhostSphere, distanceBetweenNodeSpheres, distanceBetweenGhostSpheres, false, -1, -1);
    printf("Points file generated.\n\n");
    printFileCoords_Radii(nodeAndRadii, coord_and_radiiOfNodeSphere, coord_and_radiiOfGhostSphere, distanceBetweenNodeSpheres, distanceBetweenGhostSpheres, false, -1, -1);
    printf("Radii file generated.\n");
    }


}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x738, %rsp            # imm = 0x738
movq %rsi, %r13
movq %rdi, %r14
leaq 0x210(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x1f0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0x538(%rsp), %rdi
callq 0x4730
cmpq $0x0, 0x208(%rsp)
je 0x69925
movq 0x200(%rsp), %rsi
leaq 0x538(%rsp), %rdi
pushq $0x10
popq %rdx
callq 0x4060
leaq 0x338(%rsp), %rdi
callq 0x4730
cmpq $0x0, 0x1e8(%rsp)
je 0x69955
movq 0x1e0(%rsp), %rsi
leaq 0x338(%rsp), %rdi
pushq $0x10
popq %rdx
callq 0x4060
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1c0(%rsp)
andq $0x0, 0x1d0(%rsp)
movapd %xmm0, 0x1a0(%rsp)
andq $0x0, 0x1b0(%rsp)
movapd %xmm0, 0x180(%rsp)
andq $0x0, 0x190(%rsp)
movapd %xmm0, 0x160(%rsp)
andq $0x0, 0x170(%rsp)
movapd %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movapd %xmm0, 0x120(%rsp)
andq $0x0, 0x130(%rsp)
movapd %xmm0, 0x100(%rsp)
andq $0x0, 0x110(%rsp)
movl 0xc7c(%r14), %ebx
movq 0xe65db(%rip), %rdi     # 0x14ffc0
leaq 0x9b004(%rip), %rsi     # 0x1049f0
callq 0x4480
movq %rax, %rdi
movl %ebx, %esi
callq 0x4760
leaq 0x9b003(%rip), %rsi     # 0x104a05
movq %rax, %rdi
callq 0x4480
movq %rax, %rdi
movq 0xc98(%r14), %rax
subq 0xc90(%r14), %rax
pushq $0x18
popq %rcx
cqto
idivq %rcx
movq %rax, %rsi
callq 0x42e0
leaq 0xa4dcf(%rip), %rsi     # 0x10e801
movq %rax, %rdi
callq 0x4480
movl %ebx, 0x5c(%rsp)
leaq 0xc90(%r14), %rax
movq %rax, 0xb8(%rsp)
xorl %ebx, %ebx
movl $0x98, %r15d
movl $0x2f0, %r12d           # imm = 0x2F0
movq 0x998(%r14), %rdi
movq 0x2f8(%rdi), %rax
subq 0x2f0(%rdi), %rax
cqto
idivq %r15
cmpq %rbx, %rax
jbe 0x69ac6
addq $0x2f0, %rdi            # imm = 0x2F0
testq %rbx, %rbx
je 0x69aaf
movq %rbx, %rsi
callq 0xa73a
movsd 0x28(%rsp), %xmm0
ucomisd 0x30(%rax), %xmm0
jbe 0x69ac1
movq 0x998(%r14), %rdi
addq %r12, %rdi
movq %rbx, %rsi
callq 0xa73a
jmp 0x69ab6
xorl %esi, %esi
callq 0xa73a
movsd 0x30(%rax), %xmm0
movsd %xmm0, 0x28(%rsp)
incq %rbx
jmp 0x69a5b
movq %r13, 0xb0(%rsp)
movq 0xe64eb(%rip), %rdi     # 0x14ffc0
leaq 0x9af32(%rip), %rsi     # 0x104a0e
callq 0x4480
movq %rax, %rdi
movsd 0x28(%rsp), %xmm0
callq 0x46c0
leaq 0x98a88(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0x9f0(%r14), %r13
leaq 0xa70(%r14), %rax
movq %rax, 0xc8(%rsp)
leaq 0xd20(%r14), %rax
movq %rax, 0x48(%rsp)
xorl %esi, %esi
leaq 0x320(%rsp), %r15
leaq 0x90(%rsp), %r12
movl $0x0, 0x3c(%rsp)
movl $0x0, 0x38(%rsp)
pushq $0x18
popq %rbx
movq 0xc98(%r14), %rax
subq 0xc90(%r14), %rax
cqto
idivq %rbx
cmpq %rsi, %rax
jbe 0x6a101
movq 0x998(%r14), %rbx
movq 0xb8(%rsp), %rdi
movq %rsi, 0xc0(%rsp)
callq 0x246b4
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, (%rsp)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x3e536
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
xorpd %xmm2, %xmm2
leaq 0x220(%rsp), %rdi
callq 0x63c46
xorpd %xmm0, %xmm0
movsd %xmm0, 0x40(%rsp)
xorl %ebp, %ebp
movq 0x9f8(%r14), %rax
subq 0x9f0(%r14), %rax
sarq $0x6, %rax
cmpq %rbp, %rax
jbe 0x69d69
movq 0xc8(%rsp), %rdi
movq %rbp, %rsi
callq 0xaba4
testq %rdx, (%rax)
je 0x69d61
movq %r13, %rdi
movq %rbp, %rsi
callq 0xa848
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r13, %rdi
movq %rbp, %rsi
callq 0xa848
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r13, %rdi
movq %rbp, %rsi
callq 0xa848
movsd 0x10(%rax), %xmm2
leaq 0x238(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
callq 0x63c46
movq %r13, %rdi
movq %rbp, %rsi
callq 0xa848
movsd 0x18(%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq 0x998(%r14), %rbx
movq %r15, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r15, %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq %r15, %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x50(%rsp)
leaq 0x238(%rsp), %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0xd8(%rsp)
leaq 0x238(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0xd0(%rsp)
leaq 0x238(%rsp), %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm5
movq %rbx, %rdi
movsd 0x18(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x50(%rsp), %xmm2
movsd 0xd8(%rsp), %xmm3
movsd 0xd0(%rsp), %xmm4
callq 0x3f636
movsd 0x20(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x69d61
movsd 0x40(%rsp), %xmm0
maxsd %xmm1, %xmm0
movsd %xmm0, 0x40(%rsp)
ucomisd %xmm0, %xmm1
jne 0x69d61
jp 0x69d61
movq 0x248(%rsp), %rax
movq %rax, 0x230(%rsp)
movupd 0x238(%rsp), %xmm0
movapd %xmm0, 0x220(%rsp)
incq %rbp
jmp 0x69bbf
movq 0xad0(%r14), %rsi
leaq 0x238(%rsp), %rdi
callq 0xb980
movq 0xad0(%r14), %rbx
movq %r15, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r15, %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm2
movq %rbx, %rdi
leaq 0x238(%rsp), %rsi
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
movsd 0x28(%rsp), %xmm3
callq 0x6a88c
xorpd %xmm0, %xmm0
movapd %xmm0, 0x60(%rsp)
andq $0x0, 0x70(%rsp)
leaq 0x238(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0xd9b42
movsd 0x40(%rsp), %xmm2
movapd %xmm2, %xmm0
xorpd %xmm1, %xmm1
cmpeqsd %xmm1, %xmm0
movq %xmm0, %rax
subl %eax, 0x3c(%rsp)
movapd %xmm2, %xmm0
cmpneqsd %xmm1, %xmm0
movq %xmm0, %rax
subl %eax, 0x38(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x90(%rsp)
andq $0x0, 0xa0(%rsp)
xorl %ebp, %ebp
pushq $0x18
popq %rbx
movq 0x68(%rsp), %rax
subq 0x60(%rsp), %rax
sarq $0x3, %rax
cmpq %rbp, %rax
jbe 0x69ed2
leaq 0x60(%rsp), %rdi
movq %rbp, %rsi
callq 0xaa50
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
incq %rbp
leaq 0x60(%rsp), %rdi
movq %rbp, %rsi
callq 0xaa50
movsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
incq %rbp
leaq 0x60(%rsp), %rdi
movq %rbp, %rsi
callq 0xaa50
movsd (%rax), %xmm2
leaq 0xe0(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
callq 0x63c46
movq %r12, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x2468e
incq %rbp
jmp 0x69e49
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
xorpd %xmm2, %xmm2
leaq 0xe0(%rsp), %rdi
callq 0x63c46
xorpd %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
xorl %ebp, %ebp
movq 0x98(%rsp), %rax
subq 0x90(%rsp), %rax
cqto
idivq %rbx
cmpq %rbp, %rax
jbe 0x6a08c
movq %r15, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
xorl %esi, %esi
callq 0x63c78
movsd 0x20(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd 0x18(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r15, %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x50(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd 0x50(%rsp), %xmm2
addsd (%rax), %xmm2
leaq 0x78(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
callq 0x63c46
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x246b4
movq %rax, %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm2
xorps %xmm3, %xmm3
xorps %xmm4, %xmm4
xorps %xmm5, %xmm5
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm1
callq 0x64934
subsd 0x28(%rsp), %xmm0
movapd %xmm0, %xmm1
maxsd 0x30(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jne 0x6a07e
jp 0x6a07e
movq 0x88(%rsp), %rax
movq %rax, 0xf0(%rsp)
movupd 0x78(%rsp), %xmm0
movapd %xmm0, 0xe0(%rsp)
incq %rbp
movsd %xmm1, 0x30(%rsp)
jmp 0x69ef7
movsd 0x40(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jae 0x6a0b9
addsd %xmm1, %xmm1
movsd %xmm1, 0x78(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0xf9fe
jmp 0x6a0d2
addsd %xmm0, %xmm0
movsd %xmm0, 0x78(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0xf9fe
movq %r12, %rdi
callq 0xb83e
leaq 0x60(%rsp), %rdi
callq 0xb25c
leaq 0x238(%rsp), %rdi
callq 0xd6d3c
movq 0xc0(%rsp), %rsi
incq %rsi
jmp 0x69b45
movl 0xc78(%r14), %r8d
cvtsi2sd %r8d, %xmm0
cvtsi2sdl 0x38(%rsp), %xmm1
divsd %xmm0, %xmm1
cvtsi2sdl 0x3c(%rsp), %xmm2
divsd %xmm0, %xmm2
movsd 0x970cf(%rip), %xmm0    # 0x1011f8
movq 0xb0(%rsp), %rdi
movl $0x3e8, %esi            # imm = 0x3E8
movq 0x48(%rsp), %rdx
movl 0x5c(%rsp), %ecx
callq 0x691b7
leaq 0x9aa87(%rip), %rdi     # 0x104bd2
callq 0x4670
leaq 0x100(%rsp), %rdi
callq 0xb25c
leaq 0x120(%rsp), %rdi
callq 0xb25c
leaq 0x140(%rsp), %rdi
callq 0x6a9b2
leaq 0x160(%rsp), %rdi
callq 0x6a9b2
leaq 0x180(%rsp), %rdi
callq 0xb290
leaq 0x1a0(%rsp), %rdi
callq 0x6a9b2
leaq 0x1c0(%rsp), %rdi
callq 0x6a9b2
leaq 0x338(%rsp), %rdi
callq 0x4640
leaq 0x538(%rsp), %rdi
callq 0x4640
leaq 0x1e0(%rsp), %rdi
callq 0x4210
leaq 0x200(%rsp), %rdi
callq 0x4210
addq $0x738, %rsp            # imm = 0x738
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0x6a2ba
jmp 0x6a1fd
jmp 0x6a22f
movq %rax, %rbx
jmp 0x6a2c7
movq %rax, %rbx
jmp 0x6a2d4
jmp 0x6a22f
jmp 0x6a22f
jmp 0x6a238
jmp 0x6a238
jmp 0x6a238
jmp 0x6a22f
movq %rax, %rbx
jmp 0x6a248
jmp 0x6a22f
jmp 0x6a22f
jmp 0x6a22f
movq %rax, %rbx
jmp 0x6a252
jmp 0x6a22f
jmp 0x6a22f
jmp 0x6a22f
movq %rax, %rbx
jmp 0x6a25f
jmp 0x6a238
jmp 0x6a238
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0xb83e
leaq 0x60(%rsp), %rdi
callq 0xb25c
leaq 0x238(%rsp), %rdi
callq 0xd6d3c
leaq 0x100(%rsp), %rdi
callq 0xb25c
leaq 0x120(%rsp), %rdi
callq 0xb25c
leaq 0x140(%rsp), %rdi
callq 0x6a9b2
leaq 0x160(%rsp), %rdi
callq 0x6a9b2
leaq 0x180(%rsp), %rdi
callq 0xb290
leaq 0x1a0(%rsp), %rdi
callq 0x6a9b2
leaq 0x1c0(%rsp), %rdi
callq 0x6a9b2
leaq 0x338(%rsp), %rdi
callq 0x4640
leaq 0x538(%rsp), %rdi
callq 0x4640
leaq 0x1e0(%rsp), %rdi
callq 0x4210
leaq 0x200(%rsp), %rdi
callq 0x4210
movq %rbx, %rdi
callq 0x4780