// File: /workspace/github_cpp_makefile_star2_O2/Luthaf[P]zeopp/area_and_volume.cc
// Function: determineAccessibility(ATOM_NETWORK*, double, double, bool, std::vector<bool, std::allocator<bool>>*, VORONOI_NETWORK*)
void determineAccessibility(ATOM_NETWORK *atmnet, double r_probe_chan, double r_probe, bool excludePockets, vector<bool> *isAccessible, VORONOI_NETWORK *pointSet) {
  // Create a temporary copy of the atomic network in which each atom's radius has been increased by the probe radius
  ATOM_NETWORK newAtomNet;
  atmnet->copy(&newAtomNet);
  for(int i = 0; i < newAtomNet.numAtoms; i++){ newAtomNet.atoms[i].radius += r_probe; }  

  // Calculate and store the Voronoi network for this new atomic network
  VORONOI_NETWORK vornet;
  vector<BASIC_VCELL> vorcells;
  vector<VOR_CELL> advCells;

  container_periodic_poly *new_rad_con = (container_periodic_poly *)performVoronoiDecomp(true, &newAtomNet, &vornet, advCells, false, vorcells);

  vector<CHANNEL> channels = vector<CHANNEL>();
  vector<bool> accessInfo = vector<bool> ();
  CHANNEL::findChannels(&vornet, max(0.0, r_probe_chan - r_probe), &accessInfo, &channels);
  srand(randSeed);

  vector<Point> axsPoints = vector<Point> ();
  vector<Point> inaxsPoints = vector<Point> ();
  vector< pair<int, Point> > resampledInfo = vector< pair<int, Point> > ();  // List of resampled points and the id of the Voronoi cell to which they belong
  int resampleCount = 0;

  int num_accessible = 0;

  for(unsigned int i = 0; i < pointSet->nodes.size(); i++){
    bool overlaps = false;

    Point samplingPoint;
    if(resampleCount>0) {
      double change = 0.000001;
      samplingPoint = Point(pointSet->nodes.at(i).x+change, pointSet->nodes.at(i).y+change, pointSet->nodes.at(i).z+change);
    } else samplingPoint = Point(pointSet->nodes.at(i).x, pointSet->nodes.at(i).y, pointSet->nodes.at(i).z);

    double newAtomX, newAtomY, newAtomZ;
    int minAtomID;
    bool foundCell = new_rad_con->find_voronoi_cell(samplingPoint[0], samplingPoint[1], samplingPoint[2], newAtomX, newAtomY, newAtomZ, minAtomID);
    if(!foundCell){
	    cerr << "Error: Unable to find Voronoi cell for sampled point in AV calculation." << "\n"
	    << "Occurred for structure " << newAtomNet.name << "\n"
	    << "Exiting..." << "\n";
    	exit(1);
    }

    ATOM curAtom = atmnet->atoms[minAtomID];

    // Adjust sampling point so that it lies within the Voronoi cell of interest constructed previously
    samplingPoint = (samplingPoint.add(Point(curAtom.x, curAtom.y, curAtom.z).subtract(Point(newAtomX, newAtomY, newAtomZ))));

    double minDist = calcEuclideanDistance(samplingPoint[0], samplingPoint[1], samplingPoint[2], curAtom.x, curAtom.y, curAtom.z);
    if(minDist < r_probe + curAtom.radius - 0.00000001) overlaps = true;
    
    // If necessary, check Voronoi nodes of cell to determine accessibility of point
    if(!overlaps && excludePockets){
      BASIC_VCELL vcell = vorcells[minAtomID];
      Point circCenter = Point(curAtom.x, curAtom.y, curAtom.z);
      double samplingRadius = minDist;
      Point sampleRay = Point(samplingPoint[0]-curAtom.x, samplingPoint[1]-curAtom.y, samplingPoint[2]-curAtom.z);
      
      // Scan the nodes in the Voronoi cell to find if line can be drawn from the node to the sampling point
      bool foundNode = false;
      if(vcell.getNumNodes() == 0){
	      cerr << "Error: Voronoi cell of sampled point does not have any nodes" << "\n"
	      << "Point: " << samplingPoint[0] << " " << samplingPoint[1] << " " << samplingPoint[2] << "\n"
	      << "Voronoi cell is #" << minAtomID << " in structure " << newAtomNet.name << "\n"
	      << "Please contact the source code provider." << "\n"
	      << "Exiting..." << "\n";
	      exit(1);
      }
      for(int k = 0; k < vcell.getNumNodes(); k++){
	      Point nodePoint = vcell.getNodeCoord(k);  
	      bool nodeInsideSphere = (calcEuclideanDistance(nodePoint[0], nodePoint[1], nodePoint[2], circCenter[0], circCenter[1], circCenter[2]) < samplingRadius);
	      if(!nodeInsideSphere){
	        Point otherRay = samplingPoint.subtract(nodePoint);
	        double dotProduct = sampleRay.dot_product(otherRay);
          double dotProductMax = 1e-5;
	        if(dotProduct > dotProductMax) {
	          // Angle is less than 90 degrees and so the line segment intersects twice,
      	    // making the path not viable
	        }
	        else {
	          // Angle is at least 90 degrees and so the line segment interesects only once, 
	          // thereby representing a viable path
	          foundNode = true;
	          overlaps = !accessInfo.at(vcell.getNodeID(k));
	          break;
	        }
	      }
      }

      // Sampling failed due to lying on Voronoi cell face and numerical inaccurarcy. 
      // Record failure, resample and notify user later
      if(!foundNode){
	      resampleCount++;
	      resampledInfo.push_back(pair<int, Point> (minAtomID, samplingPoint));
	      i--;
      } else resampleCount = 0;
    }

    if(resampleCount==0) {
      if(!overlaps) num_accessible++;
      if(!overlaps) isAccessible->push_back(true); else isAccessible->push_back(false);
    }
  }

  // Warn user if points were resampled
  if(resampleCount != 0){
    cerr << "\n" << "\n"
    << "Warning: Resampled " << resampleCount << " points (preset coords, not random samples) out of " << pointSet->nodes.size()  
    << " when analyzing " << atmnet->name << "\n"
    << "\n" << "\n"; 
  }

  //FREE MEMORY
  delete new_rad_con;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x7e8, %rsp            # imm = 0x7E8
movq %rcx, 0x70(%rsp)
movq %rdx, 0x98(%rsp)
movl %esi, 0x3c(%rsp)
movsd %xmm1, 0x78(%rsp)
movsd %xmm0, 0x20(%rsp)
movq %rdi, %r14
leaq 0x388(%rsp), %rbx
movq %rbx, %rdi
callq 0x3db30
movq %r14, 0x88(%rsp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3eada
movl 0x498(%rsp), %edx
movq 0x678(%rsp), %rax
xorl %ecx, %ecx
testl %edx, %edx
cmovlel %ecx, %edx
imulq $0x98, %rdx, %rdx
cmpq %rcx, %rdx
je 0x317c5
movsd 0x30(%rax,%rcx), %xmm0
addsd 0x78(%rsp), %xmm0
movsd %xmm0, 0x30(%rax,%rcx)
addq $0x98, %rcx
jmp 0x317a5
leaq 0x310(%rsp), %rdi
callq 0x4090e
xorpd %xmm0, %xmm0
leaq 0x130(%rsp), %r9
movapd %xmm0, (%r9)
andq $0x0, 0x10(%r9)
leaq 0x220(%rsp), %rcx
movapd %xmm0, (%rcx)
andq $0x0, 0x10(%rcx)
pushq $0x1
popq %rdi
leaq 0x388(%rsp), %rsi
leaq 0x310(%rsp), %rdx
xorl %r8d, %r8d
callq 0x52ae
movq %rax, 0x90(%rsp)
leaq 0x200(%rsp), %rdx
xorpd %xmm2, %xmm2
movapd %xmm2, (%rdx)
andq $0x0, 0x10(%rdx)
movsd 0x20(%rsp), %xmm0
subsd 0x78(%rsp), %xmm0
xorpd %xmm1, %xmm1
maxsd %xmm1, %xmm0
leaq 0x280(%rsp), %rsi
movapd %xmm2, 0x10(%rsi)
movapd %xmm2, (%rsi)
andq $0x0, 0x20(%rsi)
leaq 0x310(%rsp), %rdi
callq 0x55b76
movl $0x3b4ca6f5, %edi       # imm = 0x3B4CA6F5
callq 0x4460
xorpd %xmm0, %xmm0
movapd %xmm0, 0x110(%rsp)
andq $0x0, 0x120(%rsp)
movapd %xmm0, 0xf0(%rsp)
andq $0x0, 0x100(%rsp)
movq 0x70(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x60(%rsp)
movl 0x3c(%rsp), %eax
xorb $0x1, %al
movl %eax, 0x3c(%rsp)
leaq 0xd0(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
xorl %eax, %eax
pushq $0x1
popq %r14
pushq $0x2
popq %rbp
leaq 0x148(%rsp), %r15
leaq 0x2c8(%rsp), %rbx
leaq 0x2f8(%rsp), %r13
movl $0x0, 0x2c(%rsp)
movl %eax, 0x6c(%rsp)
movl %eax, %r12d
movq 0x70(%rsp), %rcx
movq 0x50(%rcx), %rax
subq 0x48(%rcx), %rax
sarq $0x6, %rax
cmpq %r12, %rax
jbe 0x31ec8
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
xorpd %xmm2, %xmm2
leaq 0x40(%rsp), %rdi
callq 0x63c46
cmpl $0x0, 0x2c(%rsp)
jle 0x3199e
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd (%rax), %xmm0
addsd 0xcec45(%rip), %xmm0    # 0x100588
movsd %xmm0, 0x20(%rsp)
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd 0xcec12(%rip), %xmm0    # 0x100588
movsd 0x30(%rsp), %xmm1
addsd %xmm0, %xmm1
movsd 0x10(%rax), %xmm2
addsd %xmm0, %xmm2
leaq 0x168(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
callq 0x63c46
jmp 0x319f8
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0xa848
movsd 0x10(%rax), %xmm2
leaq 0x168(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
callq 0x63c46
movq 0x178(%rsp), %rax
movq %rax, 0x50(%rsp)
movupd 0x168(%rsp), %xmm0
movapd %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
leaq 0x40(%rsp), %rdi
movl %r14d, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
leaq 0x40(%rsp), %rdi
movl %ebp, %esi
callq 0x63c78
movsd (%rax), %xmm2
movq 0x90(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
leaq 0xc8(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
leaq 0xb8(%rsp), %rcx
leaq 0x38(%rsp), %r8
callq 0xf9584
testb %al, %al
je 0x32034
movslq 0x38(%rsp), %rax
imulq $0x98, %rax, %rsi
movq 0x88(%rsp), %rax
addq 0x2f0(%rax), %rsi
leaq 0x168(%rsp), %rdi
callq 0xa75c
movsd 0x168(%rsp), %xmm0
movsd 0x170(%rsp), %xmm1
movsd 0x178(%rsp), %xmm2
movq %r15, %rdi
callq 0x63c46
movsd 0xc8(%rsp), %xmm0
movsd 0xc0(%rsp), %xmm1
movsd 0xb8(%rsp), %xmm2
leaq 0x250(%rsp), %rdi
callq 0x63c46
movq 0x260(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x250(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x268(%rsp), %rdi
movq %r15, %rsi
callq 0x63d26
movq 0x278(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x268(%rsp), %xmm0
movupd %xmm0, (%rsp)
movq %rbx, %rdi
leaq 0x40(%rsp), %rsi
callq 0x63c56
movq 0x2d8(%rsp), %rax
movq %rax, 0x50(%rsp)
movupd 0x2c8(%rsp), %xmm0
movapd %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
leaq 0x40(%rsp), %rdi
movl %r14d, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
leaq 0x40(%rsp), %rdi
movl %ebp, %esi
callq 0x63c78
movsd (%rax), %xmm2
movsd 0x168(%rsp), %xmm3
movsd 0x170(%rsp), %xmm4
movsd 0x178(%rsp), %xmm5
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
callq 0x64934
movsd 0x198(%rsp), %xmm1
addsd 0x78(%rsp), %xmm1
addsd 0xce99f(%rip), %xmm1    # 0x100590
movsd %xmm0, 0xa0(%rsp)
ucomisd %xmm0, %xmm1
seta %r12b
movl %r12d, %eax
orb 0x3c(%rsp), %al
jne 0x31e94
movslq 0x38(%rsp), %rax
imulq $0x30, %rax, %rsi
addq 0x130(%rsp), %rsi
movq %rbx, %rdi
callq 0xbf58
movsd 0x168(%rsp), %xmm0
movsd 0x170(%rsp), %xmm1
movsd 0x178(%rsp), %xmm2
movq %r13, %rdi
callq 0x63c46
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
subsd 0x168(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
leaq 0x40(%rsp), %rdi
movl %r14d, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x80(%rsp)
leaq 0x40(%rsp), %rdi
movl %ebp, %esi
callq 0x63c78
movsd 0x30(%rsp), %xmm1
subsd 0x80(%rsp), %xmm1
movsd (%rax), %xmm2
subsd 0x178(%rsp), %xmm2
leaq 0x2b0(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
callq 0x63c46
movq %rbx, %rdi
callq 0x4f970
testl %eax, %eax
je 0x320aa
xorl %r12d, %r12d
movq %rbx, %rdi
callq 0x4f970
cmpl %eax, %r12d
jge 0x31e1f
movq %r15, %rdi
movq %rbx, %rsi
movl %r12d, %edx
callq 0x4f980
movq %r15, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
movl %r14d, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq %r15, %rdi
movl %ebp, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0x80(%rsp)
movq %r13, %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0xb0(%rsp)
movq %r13, %rdi
movl %r14d, %esi
callq 0x63c78
movsd (%rax), %xmm0
movsd %xmm0, 0xa8(%rsp)
movq %r13, %rdi
movl %ebp, %esi
callq 0x63c78
movsd (%rax), %xmm5
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x80(%rsp), %xmm2
movsd 0xb0(%rsp), %xmm3
movsd 0xa8(%rsp), %xmm4
callq 0x64934
movsd 0xa0(%rsp), %xmm1
ucomisd %xmm0, %xmm1
ja 0x31e17
movq 0x158(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x148(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x238(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x63d26
movq 0x248(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x238(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0x63d92
ucomisd 0xce783(%rip), %xmm0    # 0x100598
jbe 0x31e62
incl %r12d
jmp 0x31ce1
movl 0x38(%rsp), %eax
movl %eax, 0x148(%rsp)
movq 0x50(%rsp), %rax
leaq 0x150(%rsp), %rcx
movq %rax, 0x10(%rcx)
movapd 0x40(%rsp), %xmm0
movupd %xmm0, (%rcx)
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
callq 0x37456
incl 0x2c(%rsp)
decl 0x6c(%rsp)
xorl %r12d, %r12d
jmp 0x31e8c
movq %rbx, %rdi
movl %r12d, %esi
callq 0x4f99e
movslq %eax, %rsi
leaq 0x280(%rsp), %rdi
callq 0xaba4
testq %rdx, (%rax)
sete %r12b
movl $0x0, 0x2c(%rsp)
movq %rbx, %rdi
callq 0xb3d4
cmpl $0x0, 0x2c(%rsp)
jne 0x31eb0
xorb $0x1, %r12b
movzbl %r12b, %esi
movq 0x98(%rsp), %rdi
callq 0xa8f6
leaq 0x168(%rsp), %rdi
callq 0xa808
movl 0x6c(%rsp), %eax
incl %eax
jmp 0x318ec
cmpl $0x0, 0x2c(%rsp)
je 0x31f8b
movq 0x11e116(%rip), %rdi    # 0x14fff0
leaq 0xd069d(%rip), %rsi     # 0x10257e
callq 0x4480
leaq 0xd0691(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xce842(%rip), %rsi     # 0x10073e
movq %rax, %rdi
callq 0x4480
movq %rax, %rdi
movl 0x2c(%rsp), %esi
callq 0x4760
leaq 0xcec32(%rip), %rsi     # 0x100b49
movq %rax, %rdi
callq 0x4480
movq 0x70(%rsp), %rcx
movq 0x50(%rcx), %rsi
subq 0x48(%rcx), %rsi
sarq $0x6, %rsi
movq %rax, %rdi
callq 0x42e0
leaq 0xdc2e7(%rip), %rsi     # 0x10e226
movq %rax, %rdi
callq 0x4480
movq 0x88(%rsp), %rsi
addq $0x320, %rsi            # imm = 0x320
movq %rax, %rdi
callq 0x43f0
leaq 0xd0619(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xd060a(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xd05fb(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
movq 0x90(%rsp), %rbx
testq %rbx, %rbx
je 0x31fa0
movq %rbx, %rdi
callq 0xa63a
movl $0x298, %esi            # imm = 0x298
movq %rbx, %rdi
callq 0x44b0
leaq 0xd0(%rsp), %rdi
callq 0x371b8
leaq 0xf0(%rsp), %rdi
callq 0xb83e
leaq 0x110(%rsp), %rdi
callq 0xb83e
leaq 0x280(%rsp), %rdi
callq 0xa976
leaq 0x200(%rsp), %rdi
callq 0x37062
leaq 0x220(%rsp), %rdi
callq 0xaa72
leaq 0x130(%rsp), %rdi
callq 0xaa94
leaq 0x310(%rsp), %rdi
callq 0xa95c
leaq 0x388(%rsp), %rdi
callq 0xaab6
addq $0x7e8, %rsp            # imm = 0x7E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x11dfb5(%rip), %rdi    # 0x14fff0
leaq 0xcea18(%rip), %rsi     # 0x100a5a
callq 0x4480
leaq 0xd0530(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xcea45(%rip), %rsi     # 0x100aa2
movq %rax, %rdi
callq 0x4480
leaq 0x6a8(%rsp), %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0xd0502(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xd1597(%rip), %rsi     # 0x103622
movq %rax, %rdi
callq 0x4480
leaq 0xd04e4(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
pushq $0x1
popq %rdi
callq 0x524c
movq 0x11df3f(%rip), %rdi    # 0x14fff0
leaq 0xcea02(%rip), %rsi     # 0x100aba
callq 0x4480
leaq 0xd04ba(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xcea24(%rip), %rsi     # 0x100af7
movq %rax, %rdi
callq 0x4480
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x63c78
movsd (%rax), %xmm0
movq %rbx, %rdi
callq 0x46c0
leaq 0xd2415(%rip), %rsi     # 0x104512
movq %rax, %rdi
callq 0x4480
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movq %rbx, %rdi
callq 0x46c0
leaq 0xd23ea(%rip), %rsi     # 0x104512
movq %rax, %rdi
callq 0x4480
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
pushq $0x2
popq %rsi
callq 0x63c78
movsd (%rax), %xmm0
movq %rbx, %rdi
callq 0x46c0
leaq 0xd042b(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xce99d(%rip), %rsi     # 0x100aff
movq %rax, %rdi
callq 0x4480
movl 0x38(%rsp), %esi
movq %rax, %rdi
callq 0x4760
leaq 0xce994(%rip), %rsi     # 0x100b11
movq %rax, %rdi
callq 0x4480
leaq 0x6a8(%rsp), %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0xd03e2(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xce975(%rip), %rsi     # 0x100b20
movq %rax, %rdi
callq 0x4480
leaq 0xd03c4(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
leaq 0xd1459(%rip), %rsi     # 0x103622
movq %rax, %rdi
callq 0x4480
leaq 0xd03a6(%rip), %rsi     # 0x10257e
movq %rax, %rdi
callq 0x4480
jmp 0x320a2
movq %rax, %rbx
jmp 0x32271
movq %rax, %rbx
jmp 0x3228b
jmp 0x321f7
movq %rax, %rbx
jmp 0x322b2
jmp 0x3221b
jmp 0x3222d
jmp 0x3222d
jmp 0x3222d
jmp 0x3222d
jmp 0x32220
jmp 0x3222d
jmp 0x3221b
jmp 0x3221b
jmp 0x3221b
jmp 0x3221b
jmp 0x3222d
jmp 0x3221b
jmp 0x32220
movq %rax, %rbx
jmp 0x3224a
movq %rax, %rbx
jmp 0x3223d
jmp 0x3222d
jmp 0x3222d
jmp 0x3222d
jmp 0x3222d
movq %rax, %rbx
leaq 0x2c8(%rsp), %rdi
callq 0xb3d4
leaq 0x168(%rsp), %rdi
callq 0xa808
leaq 0xd0(%rsp), %rdi
callq 0x371b8
leaq 0xf0(%rsp), %rdi
callq 0xb83e
leaq 0x110(%rsp), %rdi
callq 0xb83e
leaq 0x280(%rsp), %rdi
callq 0xa976
leaq 0x200(%rsp), %rdi
callq 0x37062
leaq 0x220(%rsp), %rdi
callq 0xaa72
leaq 0x130(%rsp), %rdi
callq 0xaa94
leaq 0x310(%rsp), %rdi
callq 0xa95c
leaq 0x388(%rsp), %rdi
callq 0xaab6
movq %rbx, %rdi
callq 0x4780