// File: richardposner[P]BioNetFit2/src/code/Evaluate.cpp
// Function: evaluateResults(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::map<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<int>, std::allocator<std::pair<int const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, float, float)
float evaluateResults(string inputFile1, string inputFile2, map<int,string> constraints, string outname, float iteration1, float iteration2) {
  ifstream simResult1;
  ifstream simResult2;
  ofstream outFile;
  /*
  if(argc != 4){
     cout << endl << endl;
     cout << "Usage: ./evaluate_results result_file1.txt result_file2.txt constraint_file.cons";
     cout << endl << endl;
     return 1;
  }
*/
  outFile.open(outname, ios_base::app);
  simResult1.open (inputFile1);
  simResult2.open (inputFile2);

  int count = 0;
  vector<string> constraintValue1;
  vector<string> constraintValue2;
  vector<string> constraintOp;
  vector<string> variableNames1;
  vector<string> variableValues1;
  vector<string> variableNames2;
  vector<string> variableValues2;


  string constraintItem;


  map< string, map <int, double> > namesValues1;
  map< string, map <int, double> > namesValues2;

  string possibleConstraints("<>=!");
  size_t pos = 0;
  size_t newpos;
  size_t newpos2;

  string line;

  string tmpStr;

//just to test if the constraing function works
//int test = constraintFunction(0, "=", 0);
//cout << "test result is: " << test << endl; //the result should be 1

  //tests if input files exist
  if (!simResult1.is_open()){cout << "Error! Can't find simulation result file 1.\n"; return 1;}
  if (!simResult2.is_open()){cout << "Error! Can't find simulation result file 2.\n"; return 1;}

  //reads test constraints file
//  cout << "Reading constraints file..." << endl;


  for(auto it = constraints.begin(); it!=constraints.end(); ++it){
      //parse constraints using a logical expression parser
      //continue here
      //constraintValue1[0] = line.substr(0, line.find(constraints));
	  	  line = it->second;
        newpos = line.find_first_of(possibleConstraints, pos);
        constraintValue1.push_back(line.substr(pos, newpos));

        newpos2 = line.find_last_of(possibleConstraints);
        constraintValue2.push_back(line.substr(newpos2+1));

        //cout << "newpos " << newpos << " newpos2 " << newpos2 << endl;

        if(newpos == newpos2){
	constraintOp.push_back(line.substr(newpos,1));

        }else{constraintOp.push_back(line.substr(newpos,newpos2-newpos+1));}



        count++;


  }



  cout << "Done reading constraints file." << endl;







  //get variable/collumn names
  //cout << "Reading Result File 1..." << endl;
  getline (simResult1,line);
  variableNames1 = splitResults(line, ' ');

  if(variableNames1.size() <= 1){
	  variableNames1 = splitResults(line, '\t');
	  if(variableNames1.size() <= 1){
		cout << "Can't split result table, are you using space or tab as delimiter?" << endl;
		return 1;

	  }

  }

  for (unsigned int i = 0; i < variableNames1.size(); i++){
      if (variableNames1[i].empty() || variableNames1[i]=="#"){
         //cout << "Found empty string at " << i << endl;
         variableNames1.erase(variableNames1.begin()+i);
         i--;
      }
   }

/*
  //debug
  for(int i = 0; i < variableNames.size(); i++){
      cout << i << ": !!!!" << variableNames[i] << "@@@@" << endl;

  }
*/

  //get variable values
  count = 0;
  while ( getline (simResult1,line) ){

      //cout << line << '\n';

      variableValues1 =  splitResults(line, ' ');

      if(variableValues1.size() <= 1){
    	  variableValues1 = splitResults(line, '\t');
    	  if(variableValues1.size() <= 1){
    		cout << "Can't split result table, are you using space or tab as delimiter?" << endl;
    		return 1;

    	  }

      }

      for(unsigned int i = 0; i < variableValues1.size(); i++){
          if (variableValues1[i].empty()){
             //cout << "Found empty string at " << i << endl;
             variableValues1.erase(variableValues1.begin()+i);
             i--;
          }

       }

       //start making the map here
       //make a map with the variable names (string) vs their index (int), pointing to values (double)
       //example map[variableNames[i]][count] = variableValues[i];
       for(unsigned int i = 0; i < variableNames1.size(); i++){

          if(variableNames1[i] != "Iteration" || variableNames1[i] != "iteration" || variableNames1[i] != "time" || variableNames1[i] != "Time"){
             tmpStr = static_cast<string>(variableValues1[i]);
             namesValues1[variableNames1[i]][count] = atof(tmpStr.c_str());
             //cout << "tmpStr: " << tmpStr << endl;
             //cout << "name: " << variableNames[i] << "; value at " << count << ": " << namesValues[variableNames[i]][count]  << endl;
          }


       }


  count++;

  }


  //cout << "FOUND LINES IN THE RESULT FILE: " << count << endl;

  simResult1.close();


  //cout << "Done reading Result File 1." << endl;








  //get variable/collumn names
  //cout << "Reading Result File 2..." << endl;
  getline (simResult2,line);
  variableNames2 = splitResults(line, ' ');

  if(variableNames2.size() <= 1){
	  variableNames2 = splitResults(line, '\t');
	  if(variableNames2.size() <= 1){
		cout << "Can't split result table, are you using space or tab as delimiter?" << endl;
		return 1;

	  }

  }

  for (unsigned int i = 0; i < variableNames2.size(); i++){
      if (variableNames2[i].empty() || variableNames2[i]=="#"){
         //cout << "Found empty string at " << i << endl;
         variableNames2.erase(variableNames2.begin()+i);
         i--;
      }
   }

/*//debug
  for(int i = 0; i < variableNames.size(); i++){
      cout << i << ": !!!!" << variableNames[i] << "@@@@" << endl;

  }
*/
  //get variable values
  count = 0;
  while ( getline (simResult2,line) ){

      //cout << line << '\n';

      variableValues2 =  splitResults(line, ' ');

      if(variableValues2.size() <= 1){
    	  variableValues2 = splitResults(line, '\t');
    	  if(variableValues2.size() <= 1){
    		cout << "Can't split result table, are you using space or tab as delimiter?" << endl;
    		return 1;

    	  }

      }

      for(unsigned int i = 0; i < variableValues2.size(); i++){
          if (variableValues2[i].empty()){
             //cout << "Found empty string at " << i << endl;
             variableValues2.erase(variableValues2.begin()+i);
             i--;
          }

       }

       //start making the map here
       //make a map with the variable names (string) vs their index (int), pointing to values (double)
       //example map[variableNames[i]][count] = variableValues[i];

      for(unsigned int i = 0; i < variableNames2.size(); i++){

          if(variableNames2[i] != "Iteration" || variableNames2[i] != "iteration"){

             tmpStr = static_cast<string>(variableValues2[i]);
             namesValues2[variableNames2[i]][count] = atof(tmpStr.c_str());
            //cout << "tmpStr: " << tmpStr << endl;
            // cout << "name: " << variableNames[i] << "; value at " << count << ": " << namesValues[variableNames[i]][count]  << endl;
          }


      }


  count++;

  }


  simResult2.close();


  //cout << "Done reading Result File 2." << endl;

float constraintDist;
float result;
float constraintDistC = 0;
//added new model checking method
float fulfilledConstrants = 0;
int first = 0;
vector<string> consList;
//Now test if the constraints are fulfilled
 //And return a list of iterations or time points and whether they were fulfilled
 //cout << "Time" << "\t" << "Constraint" << "\t" << "Result(0=FALSE;1=TRUE)" << endl;
 //outFile << "Time" << "\t" << "Constraint" << "\t" << "Result(0=FALSE;1=TRUE)" << endl; //old mode
	outFile << "Time" << "\t" << "Constraints_fulfilled" << endl;
 for(unsigned int i = 0; i < constraintValue1.size(); i++){
     //constraintFunction(0, "=", 0);
     //cout << "@@@" << constraintValue1[i] << "@@@map size" << namesValues1[constraintValue1[i]].size() << endl;
 //    cout << constraintValue1[i] << "\t" <<  constraintOp[i] << "\t" << constraintValue2[i] << endl;
     cout << "Starting test for constraint: " << constraintValue1[i] << " " <<  constraintOp[i] << " " << constraintValue2[i] << " Iteration1 " << iteration1 << " Iteration2 " << iteration2 << endl;

     for (unsigned int j = 0; j < namesValues1[variableNames1[i]].size(); j++){
    	 //Raquel: added this if to check only the last time point
         //if(j==namesValues1[variableNames1[i]].size()-1){
    	 //if found the desired time point

    	 for(unsigned int k = 0; k < namesValues2[variableNames2[i]].size(); k++){
    		 //if we reach the correct time point/iteration specified by the user

    		 if(namesValues1[variableNames1[0]][j] == iteration1 && namesValues2[variableNames2[0]][k] == iteration2){
        	 	 cout << "FOUND TIME POINT 1= " << iteration1 << " TIME POINT2= " << iteration2 << endl;
        	 	 cout << "MODEL 1 " << inputFile1 << endl;
        	 	 cout << "MODEL 2 " << inputFile2 << endl;
        	 	cout << "Original constraint: " << constraintValue1[i] << " " << constraintOp[i] << " " << constraintValue2[i] << endl;

        	 	 //cout << "FOUND LAST TIME POINT j= " << j << " value " << namesValues1[variableNames1[0]][j] << endl;
        	 	 //cout << namesValues[constraintValue1[i]][j] << " " << constraintOp[i] << " " << namesValues[constraintValue2[i]][j];

        	 	 //if both constraint values belong to observables (are not explicit numbers)
        	 	 if(constraintValue1[i].find_first_not_of("-01234567890.") != string::npos && constraintValue2[i].find_first_not_of("-01234567890.") != string::npos){

        		 	 result = constraintFunction(namesValues1[constraintValue1[i]][j], constraintOp[i], namesValues2[constraintValue2[i]][j]);
            	 	 cout << "Constraint values: " << namesValues1[constraintValue1[i]][j] << " " << constraintOp[i] << " " << namesValues2[constraintValue2[i]][j] << endl;
            	 	 // (expected_value/(constraint_diff+expected_value))
            	 	 if(result==0){
            	 		 constraintDist = sqrt( pow( ( namesValues2[constraintValue2[i]][j]-namesValues1[constraintValue1[i]][j] ), 2) );
            	 		 result=( namesValues2[constraintValue2[i]][j] / (constraintDist + namesValues2[constraintValue2[i]][j]) );

            	 	 }


        	 	 }else if(constraintValue1[i].find_first_not_of("-01234567890.") != string::npos && constraintValue2[i].find_first_not_of("-01234567890.") == string::npos){

        	 		 result = constraintFunction(namesValues1[constraintValue1[i]][j], constraintOp[i], atof(constraintValue2[i].c_str()));
            	 	 cout << "Constraint values: " << namesValues1[constraintValue1[i]][j] << " " << constraintOp[i] << " " << atof(constraintValue2[i].c_str()) << endl;
            	 	 if(result==0){
            	 		 constraintDist = sqrt( pow( ( atof(constraintValue2[i].c_str())-namesValues1[constraintValue1[i]][j] ), 2) );
            	 		 result=( atof(constraintValue2[i].c_str()) / (constraintDist + atof(constraintValue2[i].c_str()) ) );

            	 	 }
        	 	 }else if(constraintValue1[i].find_first_not_of("-01234567890.") == string::npos && constraintValue2[i].find_first_not_of("-01234567890.") != string::npos){

        		 	 result = constraintFunction(atof(constraintValue1[i].c_str()), constraintOp[i], namesValues2[constraintValue2[i]][j]);
            	 	 cout << "Constraint values: " << atof(constraintValue1[i].c_str()) << " " << constraintOp[i] << " " << namesValues2[constraintValue2[i]][j] << endl;

            	 	 if(result==0){
            	 		 constraintDist = sqrt( pow( ( namesValues2[constraintValue2[i]][j]-atof(constraintValue1[i].c_str()) ), 2) );
            	 		 result=( namesValues2[constraintValue2[i]][j] / (constraintDist + namesValues2[constraintValue2[i]][j]) );

            	 	 }
        	 	 }else if(constraintValue1[i].find_first_not_of("-01234567890.") == string::npos && constraintValue2[i].find_first_not_of("-01234567890.") == string::npos){

        		 	 cout << "ERROR can't find any constraint value in the observable list!!!" << endl;
        		 	 cout << "constraint value 1: " << constraintValue1[i] << "constraint value 2: " << constraintValue2[i] << endl;

        	 	 }

        	 	 cout << "RESULT=" << result << endl;
        	 //cout << " = " << result << "; iteration = " << j << " constraints = " << constraintValue1[i] << constraintOp[i] << constraintValue2[i] << endl;

        	 	 if(result<=1 && result>0){

        	 		 fulfilledConstrants+=result;

        	 		 if(result<1){
        	 		    constraintDistC+=constraintDist*0.05;
        	 		 }

        	 		 if(result==1){
            	 		 consList.push_back(constraintValue1[i]+constraintOp[i]+constraintValue2[i]);
            	 		 //outFile << constraintValue1[i]<< constraintOp[i] << constraintValue2[i]<< " " << ;

        	 		 }
        	 		 result = 0;
        	 		 constraintDist = 0;
        	 	 }else{
        	 		 cout << "ERROR invalid constraint result: " << result << endl;
        	 		 result = 0;
        	 		 constraintDist=0;
        	 	 }
        	 	 if( (variableNames1[0]=="time" || variableNames1[0]=="Time") && first==0){
        	 		 //cout << namesValues1[variableNames1[0]][j] << "\t";
        	 		 outFile << namesValues1[variableNames1[0]][j] << "\t";
        	 		 first = 1;
        	 	 }else{
        	 		 if(first==0){
        	 			 outFile << j+1 << "\t";
        		 	 	 first = 1;
        	 		 }
        	 		 //cout << j+1 << "\t";

        	 	 }
        	 	 cout << constraintValue1[i] << constraintOp[i] << constraintValue2[i] << "\t";
        	 	 cout << result <<endl; //old mode
        	 	 outFile << constraintValue1[i] << constraintOp[i] << constraintValue2[i] << "\t"; //old mode
        	 	 outFile << result << endl; //old mode




         	 }


    	 }

     }




 }

 outFile << fulfilledConstrants << "\t";

 for (unsigned int i = 0; i<consList.size(); i++){

	 outFile << consList[i] << "\t";


 }
 	 outFile << constraintDistC << endl;

 	consList.clear();


 outFile.close();


//namesValues[variableNames[i]][count]

  return fulfilledConstrants;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1110, %rsp           # imm = 0x1110
movq %rdi, -0xb98(%rbp)
movq %rsi, -0xb90(%rbp)
movq %rdx, -0xb88(%rbp)
movq %rcx, -0xb80(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movss %xmm0, -0x2c(%rbp)
movss %xmm1, -0x30(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x2f8b0
leaq -0x440(%rbp), %rdi
callq 0x2f8b0
jmp 0xe426b
leaq -0x650(%rbp), %rdi
callq 0x2f5a0
jmp 0xe4279
movq -0xb80(%rbp), %rsi
leaq -0x650(%rbp), %rdi
movl $0x1, %edx
callq 0x301a0
jmp 0xe4293
movq -0xb98(%rbp), %rsi
leaq -0x238(%rbp), %rdi
movl $0x8, %edx
callq 0x2f560
jmp 0xe42ad
movq -0xb90(%rbp), %rsi
leaq -0x440(%rbp), %rdi
movl $0x8, %edx
callq 0x2f560
jmp 0xe42c7
movl $0x0, -0x654(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x448b0
leaq -0x688(%rbp), %rdi
callq 0x448b0
leaq -0x6a0(%rbp), %rdi
callq 0x448b0
leaq -0x6b8(%rbp), %rdi
callq 0x448b0
leaq -0x6d0(%rbp), %rdi
callq 0x448b0
leaq -0x6e8(%rbp), %rdi
callq 0x448b0
leaq -0x700(%rbp), %rdi
callq 0x448b0
leaq -0x720(%rbp), %rdi
callq 0x2f880
leaq -0x750(%rbp), %rdi
callq 0xe7220
leaq -0x780(%rbp), %rdi
callq 0xe7220
leaq -0x7a1(%rbp), %rdi
movq %rdi, -0xba0(%rbp)
callq 0x30a70
movq -0xba0(%rbp), %rdx
leaq 0xfc591(%rip), %rsi     # 0x1e08fb
leaq -0x7a0(%rbp), %rdi
callq 0x44470
jmp 0xe4378
leaq -0x7a1(%rbp), %rdi
callq 0x311c0
movq $0x0, -0x7b0(%rbp)
leaq -0x7e0(%rbp), %rdi
callq 0x2f880
leaq -0x800(%rbp), %rdi
callq 0x2f880
leaq -0x238(%rbp), %rdi
callq 0x30980
movb %al, -0xba1(%rbp)
jmp 0xe43bb
movb -0xba1(%rbp), %al
testb $0x1, %al
jne 0xe447b
jmp 0xe43cb
movq 0x1f0b7e(%rip), %rdi    # 0x2d4f50
leaq 0xfc527(%rip), %rsi     # 0x1e0900
callq 0x2ff50
jmp 0xe43e0
movss 0xeec1c(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe716b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe715f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe7153
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0x7a1(%rbp), %rdi
callq 0x311c0
jmp 0xe70db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe70b7
leaq -0x440(%rbp), %rdi
callq 0x30980
movb %al, -0xba2(%rbp)
jmp 0xe448f
movb -0xba2(%rbp), %al
testb $0x1, %al
jne 0xe44cc
jmp 0xe449b
movq 0x1f0aae(%rip), %rdi    # 0x2d4f50
leaq 0xfc484(%rip), %rsi     # 0x1e092d
callq 0x2ff50
jmp 0xe44b0
movss 0xeeb4c(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
movq -0xb88(%rbp), %rdi
callq 0xe7240
movq %rax, -0x810(%rbp)
movq -0xb88(%rbp), %rdi
callq 0x516d0
movq %rax, -0x818(%rbp)
leaq -0x810(%rbp), %rdi
leaq -0x818(%rbp), %rsi
callq 0xe7270
testb $0x1, %al
jne 0xe450e
jmp 0xe4764
leaq -0x810(%rbp), %rdi
callq 0xe72a0
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x7e0(%rbp), %rdi
callq 0x30fa0
jmp 0xe452f
movq -0x7b0(%rbp), %rdx
leaq -0x7e0(%rbp), %rdi
movq %rdi, -0xbb0(%rbp)
leaq -0x7a0(%rbp), %rsi
callq 0x2f370
movq -0xbb0(%rbp), %rsi
movq %rax, -0x7b8(%rbp)
movq -0x7b0(%rbp), %rdx
movq -0x7b8(%rbp), %rcx
leaq -0x838(%rbp), %rdi
callq 0x30b40
jmp 0xe457a
leaq -0x670(%rbp), %rdi
leaq -0x838(%rbp), %rsi
callq 0xb39c0
jmp 0xe458f
leaq -0x838(%rbp), %rdi
callq 0x311e8
leaq -0x7e0(%rbp), %rdi
movq %rdi, -0xbc0(%rbp)
leaq -0x7a0(%rbp), %rsi
movq $-0x1, %rdx
movq %rdx, -0xbb8(%rbp)
callq 0x30e40
movq -0xbc0(%rbp), %rsi
movq -0xbb8(%rbp), %rcx
movq %rax, -0x7c0(%rbp)
movq -0x7c0(%rbp), %rdx
incq %rdx
leaq -0x858(%rbp), %rdi
callq 0x30b40
jmp 0xe45f0
leaq -0x688(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0xb39c0
jmp 0xe4605
leaq -0x858(%rbp), %rdi
callq 0x311e8
movq -0x7b8(%rbp), %rax
cmpq -0x7c0(%rbp), %rax
jne 0xe46d5
movq -0x7b8(%rbp), %rdx
leaq -0x878(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x1, %ecx
callq 0x30b40
jmp 0xe4646
leaq -0x6a0(%rbp), %rdi
leaq -0x878(%rbp), %rsi
callq 0xb39c0
jmp 0xe465b
leaq -0x878(%rbp), %rdi
callq 0x311e8
jmp 0xe4744
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0x838(%rbp), %rdi
callq 0x311e8
jmp 0xe70b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0x858(%rbp), %rdi
callq 0x311e8
jmp 0xe70b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0x878(%rbp), %rdi
callq 0x311e8
jmp 0xe70b7
movq -0x7b8(%rbp), %rdx
movq -0x7c0(%rbp), %rcx
subq %rdx, %rcx
incq %rcx
leaq -0x898(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x30b40
jmp 0xe46fe
leaq -0x6a0(%rbp), %rdi
leaq -0x898(%rbp), %rsi
callq 0xb39c0
jmp 0xe4713
leaq -0x898(%rbp), %rdi
callq 0x311e8
jmp 0xe4744
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0x898(%rbp), %rdi
callq 0x311e8
jmp 0xe70b7
movl -0x654(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x654(%rbp)
leaq -0x810(%rbp), %rdi
callq 0x526b0
jmp 0xe44df
movq 0x1f07e5(%rip), %rdi    # 0x2d4f50
leaq 0xfc1e8(%rip), %rsi     # 0x1e095a
callq 0x2ff50
movq %rax, -0xbc8(%rbp)
jmp 0xe4780
movq -0xbc8(%rbp), %rdi
movq 0x1f083a(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe4795
leaq -0x238(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x2fcb0
jmp 0xe47aa
leaq -0x8b0(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x20, %edx
callq 0xe3f00
jmp 0xe47c4
leaq -0x6b8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0xd1b80
leaq -0x8b0(%rbp), %rdi
callq 0x448d0
leaq -0x6b8(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4893
leaq -0x8c8(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x9, %edx
callq 0xe3f00
jmp 0xe4813
leaq -0x6b8(%rbp), %rdi
leaq -0x8c8(%rbp), %rsi
callq 0xd1b80
leaq -0x8c8(%rbp), %rdi
callq 0x448d0
leaq -0x6b8(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4891
movq 0x1f0705(%rip), %rdi    # 0x2d4f50
leaq 0xfc127(%rip), %rsi     # 0x1e0979
callq 0x2ff50
movq %rax, -0xbd0(%rbp)
jmp 0xe4860
movq -0xbd0(%rbp), %rdi
movq 0x1f075a(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe4875
movss 0xee787(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
jmp 0xe4893
movl $0x0, -0x8cc(%rbp)
movl -0x8cc(%rbp), %eax
movq %rax, -0xbd8(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xbd8(%rbp), %rax
cmpq %rcx, %rax
jae 0xe49ba
movl -0x8cc(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f700
testb $0x1, %al
jne 0xe4923
movl -0x8cc(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xf608c(%rip), %rsi     # 0x1da993
callq 0x44930
movb %al, -0xbd9(%rbp)
jmp 0xe4914
movb -0xbd9(%rbp), %al
testb $0x1, %al
jne 0xe4923
jmp 0xe49a4
leaq -0x6b8(%rbp), %rdi
movq %rdi, -0xbf0(%rbp)
callq 0x458f0
movq %rax, -0x8e8(%rbp)
movl -0x8cc(%rbp), %eax
movl %eax, %esi
leaq -0x8e8(%rbp), %rdi
callq 0x8b080
movq %rax, -0x8e0(%rbp)
leaq -0x8d8(%rbp), %rdi
leaq -0x8e0(%rbp), %rsi
callq 0xe7340
movq -0xbf0(%rbp), %rdi
movq -0x8d8(%rbp), %rsi
callq 0xe72d0
movq %rax, -0xbe8(%rbp)
jmp 0xe4987
movq -0xbe8(%rbp), %rax
movq %rax, -0x8f0(%rbp)
movl -0x8cc(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x8cc(%rbp)
jmp 0xe49a6
movl -0x8cc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8cc(%rbp)
jmp 0xe489d
movl $0x0, -0x654(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x2fcb0
movq %rax, -0xbf8(%rbp)
jmp 0xe49e0
movq -0xbf8(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2f8e0
movb %al, -0xbf9(%rbp)
jmp 0xe49fe
movb -0xbf9(%rbp), %al
testb $0x1, %al
jne 0xe4a0d
jmp 0xe4df4
leaq -0x908(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x20, %edx
callq 0xe3f00
jmp 0xe4a27
leaq -0x6d0(%rbp), %rdi
leaq -0x908(%rbp), %rsi
callq 0xd1b80
leaq -0x908(%rbp), %rdi
callq 0x448d0
leaq -0x6d0(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4af6
leaq -0x920(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x9, %edx
callq 0xe3f00
jmp 0xe4a76
leaq -0x6d0(%rbp), %rdi
leaq -0x920(%rbp), %rsi
callq 0xd1b80
leaq -0x920(%rbp), %rdi
callq 0x448d0
leaq -0x6d0(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4af4
movq 0x1f04a2(%rip), %rdi    # 0x2d4f50
leaq 0xfbec4(%rip), %rsi     # 0x1e0979
callq 0x2ff50
movq %rax, -0xc08(%rbp)
jmp 0xe4ac3
movq -0xc08(%rbp), %rdi
movq 0x1f04f7(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe4ad8
movss 0xee524(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
jmp 0xe4af6
movl $0x0, -0x924(%rbp)
movl -0x924(%rbp), %eax
movq %rax, -0xc10(%rbp)
leaq -0x6d0(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xc10(%rbp), %rax
cmpq %rcx, %rax
jae 0xe4be8
movl -0x924(%rbp), %eax
movl %eax, %esi
leaq -0x6d0(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f700
testb $0x1, %al
jne 0xe4b51
jmp 0xe4bd2
leaq -0x6d0(%rbp), %rdi
movq %rdi, -0xc20(%rbp)
callq 0x458f0
movq %rax, -0x940(%rbp)
movl -0x924(%rbp), %eax
movl %eax, %esi
leaq -0x940(%rbp), %rdi
callq 0x8b080
movq %rax, -0x938(%rbp)
leaq -0x930(%rbp), %rdi
leaq -0x938(%rbp), %rsi
callq 0xe7340
movq -0xc20(%rbp), %rdi
movq -0x930(%rbp), %rsi
callq 0xe72d0
movq %rax, -0xc18(%rbp)
jmp 0xe4bb5
movq -0xc18(%rbp), %rax
movq %rax, -0x948(%rbp)
movl -0x924(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x924(%rbp)
jmp 0xe4bd4
movl -0x924(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x924(%rbp)
jmp 0xe4b00
movl $0x0, -0x94c(%rbp)
movl -0x94c(%rbp), %eax
movq %rax, -0xc28(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xc28(%rbp), %rax
cmpq %rcx, %rax
jae 0xe4de0
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfbd80(%rip), %rsi     # 0x1e09bc
callq 0x45af0
movb %al, -0xc29(%rbp)
jmp 0xe4c49
movb -0xc29(%rbp), %al
testb $0x1, %al
jne 0xe4d01
jmp 0xe4c59
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xf6ff8(%rip), %rsi     # 0x1dbc6f
callq 0x45af0
movb %al, -0xc2a(%rbp)
jmp 0xe4c84
movb -0xc2a(%rbp), %al
testb $0x1, %al
jne 0xe4d01
jmp 0xe4c90
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xeef51(%rip), %rsi     # 0x1d3bff
callq 0x45af0
movb %al, -0xc2b(%rbp)
jmp 0xe4cbb
movb -0xc2b(%rbp), %al
testb $0x1, %al
jne 0xe4d01
jmp 0xe4cc7
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfbce1(%rip), %rsi     # 0x1e09c6
callq 0x45af0
movb %al, -0xc2c(%rbp)
jmp 0xe4cf2
movb -0xc2c(%rbp), %al
testb $0x1, %al
jne 0xe4d01
jmp 0xe4dca
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6d0(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x970(%rbp), %rdi
callq 0x2f300
jmp 0xe4d26
leaq -0x800(%rbp), %rdi
movq %rdi, -0xc48(%rbp)
leaq -0x970(%rbp), %rsi
movq %rsi, -0xc50(%rbp)
callq 0x2fd80
movq -0xc50(%rbp), %rdi
callq 0x311e8
movq -0xc48(%rbp), %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd %xmm0, -0xc40(%rbp)
movl -0x94c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xc38(%rbp)
jmp 0xe4d9b
movq -0xc38(%rbp), %rdi
leaq -0x654(%rbp), %rsi
callq 0xe7460
movq %rax, -0xc58(%rbp)
jmp 0xe4db7
movq -0xc58(%rbp), %rax
movsd -0xc40(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xe4dcc
movl -0x94c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94c(%rbp)
jmp 0xe4bf2
movl -0x654(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x654(%rbp)
jmp 0xe49c4
leaq -0x238(%rbp), %rdi
callq 0x300d0
jmp 0xe4e02
leaq -0x440(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x2fcb0
jmp 0xe4e17
leaq -0x988(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x20, %edx
callq 0xe3f00
jmp 0xe4e31
leaq -0x6e8(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0xd1b80
leaq -0x988(%rbp), %rdi
callq 0x448d0
leaq -0x6e8(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4f00
leaq -0x9a0(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x9, %edx
callq 0xe3f00
jmp 0xe4e80
leaq -0x6e8(%rbp), %rdi
leaq -0x9a0(%rbp), %rsi
callq 0xd1b80
leaq -0x9a0(%rbp), %rdi
callq 0x448d0
leaq -0x6e8(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe4efe
movq 0x1f0098(%rip), %rdi    # 0x2d4f50
leaq 0xfbaba(%rip), %rsi     # 0x1e0979
callq 0x2ff50
movq %rax, -0xc60(%rbp)
jmp 0xe4ecd
movq -0xc60(%rbp), %rdi
movq 0x1f00ed(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe4ee2
movss 0xee11a(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
jmp 0xe4f00
movl $0x0, -0x9a4(%rbp)
movl -0x9a4(%rbp), %eax
movq %rax, -0xc68(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xc68(%rbp), %rax
cmpq %rcx, %rax
jae 0xe5027
movl -0x9a4(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f700
testb $0x1, %al
jne 0xe4f90
movl -0x9a4(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xf5a1f(%rip), %rsi     # 0x1da993
callq 0x44930
movb %al, -0xc69(%rbp)
jmp 0xe4f81
movb -0xc69(%rbp), %al
testb $0x1, %al
jne 0xe4f90
jmp 0xe5011
leaq -0x6e8(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x458f0
movq %rax, -0x9c0(%rbp)
movl -0x9a4(%rbp), %eax
movl %eax, %esi
leaq -0x9c0(%rbp), %rdi
callq 0x8b080
movq %rax, -0x9b8(%rbp)
leaq -0x9b0(%rbp), %rdi
leaq -0x9b8(%rbp), %rsi
callq 0xe7340
movq -0xc80(%rbp), %rdi
movq -0x9b0(%rbp), %rsi
callq 0xe72d0
movq %rax, -0xc78(%rbp)
jmp 0xe4ff4
movq -0xc78(%rbp), %rax
movq %rax, -0x9c8(%rbp)
movl -0x9a4(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x9a4(%rbp)
jmp 0xe5013
movl -0x9a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9a4(%rbp)
jmp 0xe4f0a
movl $0x0, -0x654(%rbp)
leaq -0x440(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x2fcb0
movq %rax, -0xc88(%rbp)
jmp 0xe504d
movq -0xc88(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2f8e0
movb %al, -0xc89(%rbp)
jmp 0xe506b
movb -0xc89(%rbp), %al
testb $0x1, %al
jne 0xe507a
jmp 0xe53ef
leaq -0x9e0(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x20, %edx
callq 0xe3f00
jmp 0xe5094
leaq -0x700(%rbp), %rdi
leaq -0x9e0(%rbp), %rsi
callq 0xd1b80
leaq -0x9e0(%rbp), %rdi
callq 0x448d0
leaq -0x700(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe5163
leaq -0x9f8(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
movl $0x9, %edx
callq 0xe3f00
jmp 0xe50e3
leaq -0x700(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
callq 0xd1b80
leaq -0x9f8(%rbp), %rdi
callq 0x448d0
leaq -0x700(%rbp), %rdi
callq 0x44960
cmpq $0x1, %rax
ja 0xe5161
movq 0x1efe35(%rip), %rdi    # 0x2d4f50
leaq 0xfb857(%rip), %rsi     # 0x1e0979
callq 0x2ff50
movq %rax, -0xc98(%rbp)
jmp 0xe5130
movq -0xc98(%rbp), %rdi
movq 0x1efe8a(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe5145
movss 0xedeb7(%rip), %xmm0    # 0x1d3004
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
jmp 0xe6fe9
jmp 0xe5163
movl $0x0, -0x9fc(%rbp)
movl -0x9fc(%rbp), %eax
movq %rax, -0xca0(%rbp)
leaq -0x700(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xca0(%rbp), %rax
cmpq %rcx, %rax
jae 0xe5255
movl -0x9fc(%rbp), %eax
movl %eax, %esi
leaq -0x700(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f700
testb $0x1, %al
jne 0xe51be
jmp 0xe523f
leaq -0x700(%rbp), %rdi
movq %rdi, -0xcb0(%rbp)
callq 0x458f0
movq %rax, -0xa18(%rbp)
movl -0x9fc(%rbp), %eax
movl %eax, %esi
leaq -0xa18(%rbp), %rdi
callq 0x8b080
movq %rax, -0xa10(%rbp)
leaq -0xa08(%rbp), %rdi
leaq -0xa10(%rbp), %rsi
callq 0xe7340
movq -0xcb0(%rbp), %rdi
movq -0xa08(%rbp), %rsi
callq 0xe72d0
movq %rax, -0xca8(%rbp)
jmp 0xe5222
movq -0xca8(%rbp), %rax
movq %rax, -0xa20(%rbp)
movl -0x9fc(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x9fc(%rbp)
jmp 0xe5241
movl -0x9fc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9fc(%rbp)
jmp 0xe516d
movl $0x0, -0xa24(%rbp)
movl -0xa24(%rbp), %eax
movq %rax, -0xcb8(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xcb8(%rbp), %rax
cmpq %rcx, %rax
jae 0xe53db
movl -0xa24(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfb713(%rip), %rsi     # 0x1e09bc
callq 0x45af0
movb %al, -0xcb9(%rbp)
jmp 0xe52b6
movb -0xcb9(%rbp), %al
testb $0x1, %al
jne 0xe52fc
jmp 0xe52c2
movl -0xa24(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xf698f(%rip), %rsi     # 0x1dbc6f
callq 0x45af0
movb %al, -0xcba(%rbp)
jmp 0xe52ed
movb -0xcba(%rbp), %al
testb $0x1, %al
jne 0xe52fc
jmp 0xe53c5
movl -0xa24(%rbp), %eax
movl %eax, %esi
leaq -0x700(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0xa48(%rbp), %rdi
callq 0x2f300
jmp 0xe5321
leaq -0x800(%rbp), %rdi
movq %rdi, -0xcd8(%rbp)
leaq -0xa48(%rbp), %rsi
movq %rsi, -0xce0(%rbp)
callq 0x2fd80
movq -0xce0(%rbp), %rdi
callq 0x311e8
movq -0xcd8(%rbp), %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd %xmm0, -0xcd0(%rbp)
movl -0xa24(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xcc8(%rbp)
jmp 0xe5396
movq -0xcc8(%rbp), %rdi
leaq -0x654(%rbp), %rsi
callq 0xe7460
movq %rax, -0xce8(%rbp)
jmp 0xe53b2
movq -0xce8(%rbp), %rax
movsd -0xcd0(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0xe53c7
movl -0xa24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa24(%rbp)
jmp 0xe525f
movl -0x654(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x654(%rbp)
jmp 0xe5031
leaq -0x440(%rbp), %rdi
callq 0x300d0
jmp 0xe53fd
movl $0x0, -0xa54(%rbp)
movl $0x0, -0xa58(%rbp)
movl $0x0, -0xa5c(%rbp)
leaq -0xa78(%rbp), %rdi
callq 0x448b0
leaq 0xfb598(%rip), %rsi     # 0x1e09c6
leaq -0x650(%rbp), %rdi
callq 0x2ff50
movq %rax, -0xcf0(%rbp)
jmp 0xe5443
movq -0xcf0(%rbp), %rdi
leaq 0xf40ae(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
movq %rax, -0xcf8(%rbp)
jmp 0xe545f
movq -0xcf8(%rbp), %rdi
leaq 0xfb55e(%rip), %rsi     # 0x1e09cb
callq 0x2ff50
movq %rax, -0xd00(%rbp)
jmp 0xe547b
movq -0xd00(%rbp), %rdi
movq 0x1efb3f(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe5490
movl $0x0, -0xa7c(%rbp)
movl -0xa7c(%rbp), %eax
movq %rax, -0xd08(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0xd08(%rbp), %rax
cmpq %rcx, %rax
jae 0xe6eaf
movq 0x1efa83(%rip), %rdi    # 0x2d4f50
leaq 0xfb50d(%rip), %rsi     # 0x1e09e1
callq 0x2ff50
movq %rax, -0xd10(%rbp)
jmp 0xe54e2
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq -0xd10(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xd18(%rbp)
jmp 0xe550e
movq -0xd18(%rbp), %rdi
leaq 0xfebb3(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xd20(%rbp)
jmp 0xe552a
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0xd20(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xd28(%rbp)
jmp 0xe5556
movq -0xd28(%rbp), %rdi
leaq 0xfeb6b(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xd30(%rbp)
jmp 0xe5572
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq -0xd30(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xd38(%rbp)
jmp 0xe559e
movq -0xd38(%rbp), %rdi
leaq 0xfb454(%rip), %rsi     # 0x1e0a00
callq 0x2ff50
movq %rax, -0xd40(%rbp)
jmp 0xe55ba
movq -0xd40(%rbp), %rdi
movss -0x2c(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0xd48(%rbp)
jmp 0xe55d4
movq -0xd48(%rbp), %rdi
leaq 0xfb42b(%rip), %rsi     # 0x1e0a0d
callq 0x2ff50
movq %rax, -0xd50(%rbp)
jmp 0xe55f0
movq -0xd50(%rbp), %rdi
movss -0x30(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0xd58(%rbp)
jmp 0xe560a
movq -0xd58(%rbp), %rdi
movq 0x1ef9b0(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe561f
movl $0x0, -0xa80(%rbp)
movl -0xa80(%rbp), %eax
movq %rax, -0xd68(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xd60(%rbp)
jmp 0xe5662
movq -0xd60(%rbp), %rdi
callq 0xe7540
movq %rax, %rcx
movq -0xd68(%rbp), %rax
cmpq %rcx, %rax
jae 0xe6e99
movl $0x0, -0xa84(%rbp)
movl -0xa84(%rbp), %eax
movq %rax, -0xd78(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xd70(%rbp)
jmp 0xe56c4
movq -0xd70(%rbp), %rdi
callq 0xe7540
movq %rax, %rcx
movq -0xd78(%rbp), %rax
cmpq %rcx, %rax
jae 0xe6e83
xorl %eax, %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xd80(%rbp)
jmp 0xe570b
movq -0xd80(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xa88(%rbp)
leaq -0xa88(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xd88(%rbp)
jmp 0xe5733
movq -0xd88(%rbp), %rax
movsd (%rax), %xmm0
movss -0x2c(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
movb %al, -0xd89(%rbp)
jne 0xe57cd
jp 0xe57cd
xorl %eax, %eax
movl %eax, %esi
leaq -0x6e8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xd98(%rbp)
jmp 0xe577f
movq -0xd98(%rbp), %rdi
movl -0xa84(%rbp), %eax
movl %eax, -0xa8c(%rbp)
leaq -0xa8c(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xda0(%rbp)
jmp 0xe57a7
movq -0xda0(%rbp), %rax
movsd (%rax), %xmm0
movss -0x30(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, -0xd89(%rbp)
movb -0xd89(%rbp), %al
testb $0x1, %al
jne 0xe57dc
jmp 0xe6e6d
movq 0x1ef76d(%rip), %rdi    # 0x2d4f50
leaq 0xfb230(%rip), %rsi     # 0x1e0a1a
callq 0x2ff50
movq %rax, -0xda8(%rbp)
jmp 0xe57f8
movq -0xda8(%rbp), %rdi
movss -0x2c(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0xdb0(%rbp)
jmp 0xe5812
movq -0xdb0(%rbp), %rdi
leaq 0xfb20f(%rip), %rsi     # 0x1e0a2f
callq 0x2ff50
movq %rax, -0xdb8(%rbp)
jmp 0xe582e
movq -0xdb8(%rbp), %rdi
movss -0x30(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0xdc0(%rbp)
jmp 0xe5848
movq -0xdc0(%rbp), %rdi
movq 0x1ef772(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe585d
movq 0x1ef6ec(%rip), %rdi    # 0x2d4f50
leaq 0xfb1d3(%rip), %rsi     # 0x1e0a3e
callq 0x2ff50
movq %rax, -0xdc8(%rbp)
jmp 0xe5879
movq -0xb98(%rbp), %rsi
movq -0xdc8(%rbp), %rdi
callq 0x2f780
movq %rax, -0xdd0(%rbp)
jmp 0xe5895
movq -0xdd0(%rbp), %rdi
movq 0x1ef725(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe58aa
movq 0x1ef69f(%rip), %rdi    # 0x2d4f50
leaq 0xfb18f(%rip), %rsi     # 0x1e0a47
callq 0x2ff50
movq %rax, -0xdd8(%rbp)
jmp 0xe58c6
movq -0xb90(%rbp), %rsi
movq -0xdd8(%rbp), %rdi
callq 0x2f780
movq %rax, -0xde0(%rbp)
jmp 0xe58e2
movq -0xde0(%rbp), %rdi
movq 0x1ef6d8(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe58f7
movq 0x1ef652(%rip), %rdi    # 0x2d4f50
leaq 0xfb14b(%rip), %rsi     # 0x1e0a50
callq 0x2ff50
movq %rax, -0xde8(%rbp)
jmp 0xe5913
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq -0xde8(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xdf0(%rbp)
jmp 0xe593f
movq -0xdf0(%rbp), %rdi
leaq 0xfe782(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xdf8(%rbp)
jmp 0xe595b
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0xdf8(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xe00(%rbp)
jmp 0xe5987
movq -0xe00(%rbp), %rdi
leaq 0xfe73a(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xe08(%rbp)
jmp 0xe59a3
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq -0xe08(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xe10(%rbp)
jmp 0xe59cf
movq -0xe10(%rbp), %rdi
movq 0x1ef5eb(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe59e4
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfb064(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
je 0xe5f3c
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfb033(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
je 0xe5f3c
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xe18(%rbp)
jmp 0xe5a72
movq -0xe18(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xa90(%rbp)
leaq -0xa90(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xe20(%rbp)
jmp 0xe5a9a
movq -0xe20(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xe28(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0xab0(%rbp), %rdi
callq 0x2f300
jmp 0xe5ad2
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xe30(%rbp)
jmp 0xe5afe
movq -0xe30(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xab4(%rbp)
leaq -0xab4(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xe38(%rbp)
jmp 0xe5b26
movsd -0xe28(%rbp), %xmm0
movq -0xe38(%rbp), %rax
movsd (%rax), %xmm1
leaq -0xab0(%rbp), %rdi
callq 0xe4070
movl %eax, -0xe3c(%rbp)
jmp 0xe5b4d
movl -0xe3c(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xa50(%rbp)
leaq -0xab0(%rbp), %rdi
callq 0x311e8
movq 0x1ef3de(%rip), %rdi    # 0x2d4f50
leaq 0xfaefb(%rip), %rsi     # 0x1e0a74
callq 0x2ff50
movq %rax, -0xe48(%rbp)
jmp 0xe5b87
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xe50(%rbp)
jmp 0xe5bb3
movq -0xe50(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xab8(%rbp)
leaq -0xab8(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xe58(%rbp)
jmp 0xe5bdb
movq -0xe48(%rbp), %rdi
movq -0xe58(%rbp), %rax
movsd (%rax), %xmm0
callq 0x30710
movq %rax, -0xe60(%rbp)
jmp 0xe5bfb
movq -0xe60(%rbp), %rdi
leaq 0xfe4c6(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xe68(%rbp)
jmp 0xe5c17
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0xe68(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xe70(%rbp)
jmp 0xe5c43
movq -0xe70(%rbp), %rdi
leaq 0xfe47e(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xe78(%rbp)
jmp 0xe5c5f
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xe80(%rbp)
jmp 0xe5c8b
movq -0xe80(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xabc(%rbp)
leaq -0xabc(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xe88(%rbp)
jmp 0xe5cb3
movq -0xe78(%rbp), %rdi
movq -0xe88(%rbp), %rax
movsd (%rax), %xmm0
callq 0x30710
movq %rax, -0xe90(%rbp)
jmp 0xe5cd3
movq -0xe90(%rbp), %rdi
movq 0x1ef2e7(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe5ce8
movss -0xa50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0xe5f37
jp 0xe5f37
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xe98(%rbp)
jmp 0xe5d2e
movq -0xe98(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xac0(%rbp)
leaq -0xac0(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xea0(%rbp)
jmp 0xe5d56
movq -0xea0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xeb0(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xea8(%rbp)
jmp 0xe5d95
movq -0xea8(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xac4(%rbp)
leaq -0xac4(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xeb8(%rbp)
jmp 0xe5dbd
movsd -0xeb0(%rbp), %xmm0
movq -0xeb8(%rbp), %rax
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movl $0x2, %edi
callq 0x8e5b0
movsd %xmm0, -0xec0(%rbp)
jmp 0xe5de8
movsd -0xec0(%rbp), %xmm0
callq 0x2fc60
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa4c(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xec8(%rbp)
jmp 0xe5e2d
movq -0xec8(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xac8(%rbp)
leaq -0xac8(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xed0(%rbp)
jmp 0xe5e55
movq -0xed0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xee8(%rbp)
movss -0xa4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xee0(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xed8(%rbp)
jmp 0xe5ea8
movq -0xed8(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xacc(%rbp)
leaq -0xacc(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xef0(%rbp)
jmp 0xe5ed0
movsd -0xee8(%rbp), %xmm0
movq -0xef0(%rbp), %rax
movsd -0xee0(%rbp), %xmm1
addsd (%rax), %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa50(%rbp)
jmp 0xe5f37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe6fd8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0xab0(%rbp), %rdi
callq 0x311e8
jmp 0xe6fd8
jmp 0xe6933
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfab0c(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
je 0xe6360
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfaadb(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
jne 0xe6360
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xef8(%rbp)
jmp 0xe5fca
movq -0xef8(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xad0(%rbp)
leaq -0xad0(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xf00(%rbp)
jmp 0xe5ff2
movq -0xf00(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xf08(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0xaf0(%rbp), %rdi
callq 0x2f300
jmp 0xe602a
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movaps %xmm0, %xmm1
movsd -0xf08(%rbp), %xmm0
leaq -0xaf0(%rbp), %rdi
callq 0xe4070
movl %eax, -0xf0c(%rbp)
jmp 0xe606d
movl -0xf0c(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xa50(%rbp)
leaq -0xaf0(%rbp), %rdi
callq 0x311e8
movq 0x1eeebe(%rip), %rdi    # 0x2d4f50
leaq 0xfa9db(%rip), %rsi     # 0x1e0a74
callq 0x2ff50
movq %rax, -0xf18(%rbp)
jmp 0xe60a7
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xf20(%rbp)
jmp 0xe60d3
movq -0xf20(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xaf4(%rbp)
leaq -0xaf4(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xf28(%rbp)
jmp 0xe60fb
movq -0xf18(%rbp), %rdi
movq -0xf28(%rbp), %rax
movsd (%rax), %xmm0
callq 0x30710
movq %rax, -0xf30(%rbp)
jmp 0xe611b
movq -0xf30(%rbp), %rdi
leaq 0xfdfa6(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xf38(%rbp)
jmp 0xe6137
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0xf38(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xf40(%rbp)
jmp 0xe6163
movq -0xf40(%rbp), %rdi
leaq 0xfdf5e(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xf48(%rbp)
jmp 0xe617f
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movq -0xf48(%rbp), %rdi
callq 0x30710
movq %rax, -0xf50(%rbp)
jmp 0xe61b8
movq -0xf50(%rbp), %rdi
movq 0x1eee02(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe61cd
movss -0xa50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0xe635b
jp 0xe635b
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd %xmm0, -0xf60(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0xf58(%rbp)
jmp 0xe623f
movq -0xf58(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xaf8(%rbp)
leaq -0xaf8(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xf68(%rbp)
jmp 0xe6267
movsd -0xf60(%rbp), %xmm0
movq -0xf68(%rbp), %rax
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movl $0x2, %edi
callq 0x8e5b0
movsd %xmm0, -0xf70(%rbp)
jmp 0xe6292
movsd -0xf70(%rbp), %xmm0
callq 0x2fc60
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa4c(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd %xmm0, -0xf78(%rbp)
movss -0xa4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf80(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd -0xf80(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0xf78(%rbp), %xmm0
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa50(%rbp)
jmp 0xe635b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0xaf0(%rbp), %rdi
callq 0x311e8
jmp 0xe6fd8
jmp 0xe6931
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfa6e8(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
jne 0xe67f3
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfa6b7(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
je 0xe67f3
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movsd %xmm0, -0xf88(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0xb18(%rbp), %rdi
callq 0x2f300
jmp 0xe6413
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xf90(%rbp)
jmp 0xe643f
movq -0xf90(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb1c(%rbp)
leaq -0xb1c(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xf98(%rbp)
jmp 0xe6467
movsd -0xf88(%rbp), %xmm0
movq -0xf98(%rbp), %rax
movsd (%rax), %xmm1
leaq -0xb18(%rbp), %rdi
callq 0xe4070
movl %eax, -0xf9c(%rbp)
jmp 0xe648e
movl -0xf9c(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xa50(%rbp)
leaq -0xb18(%rbp), %rdi
callq 0x311e8
movq 0x1eea9d(%rip), %rdi    # 0x2d4f50
leaq 0xfa5ba(%rip), %rsi     # 0x1e0a74
callq 0x2ff50
movq %rax, -0xfa8(%rbp)
jmp 0xe64c8
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movq -0xfa8(%rbp), %rdi
callq 0x30710
movq %rax, -0xfb0(%rbp)
jmp 0xe6501
movq -0xfb0(%rbp), %rdi
leaq 0xfdbc0(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xfb8(%rbp)
jmp 0xe651d
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0xfb8(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0xfc0(%rbp)
jmp 0xe6549
movq -0xfc0(%rbp), %rdi
leaq 0xfdb78(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0xfc8(%rbp)
jmp 0xe6565
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xfd0(%rbp)
jmp 0xe6591
movq -0xfd0(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb20(%rbp)
leaq -0xb20(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xfd8(%rbp)
jmp 0xe65b9
movq -0xfc8(%rbp), %rdi
movq -0xfd8(%rbp), %rax
movsd (%rax), %xmm0
callq 0x30710
movq %rax, -0xfe0(%rbp)
jmp 0xe65d9
movq -0xfe0(%rbp), %rdi
movq 0x1ee9e1(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe65ee
movss -0xa50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0xe67ee
jp 0xe67ee
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0xfe8(%rbp)
jmp 0xe6634
movq -0xfe8(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb24(%rbp)
leaq -0xb24(%rbp), %rsi
callq 0xb2f50
movq %rax, -0xff0(%rbp)
jmp 0xe665c
movq -0xff0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x1000(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
callq 0x2f290
movq %rax, %rdi
callq 0x30650
movaps %xmm0, %xmm1
movsd -0x1000(%rbp), %xmm0
subsd %xmm1, %xmm0
movl $0x2, %edi
callq 0x8e5b0
movsd %xmm0, -0xff8(%rbp)
jmp 0xe66b6
movsd -0xff8(%rbp), %xmm0
callq 0x2fc60
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa4c(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0x1008(%rbp)
jmp 0xe66fb
movq -0x1008(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb28(%rbp)
leaq -0xb28(%rbp), %rsi
callq 0xb2f50
movq %rax, -0x1010(%rbp)
jmp 0xe6723
movq -0x1010(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x1028(%rbp)
movss -0xa4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x1020(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
callq 0xe7380
movq %rax, -0x1018(%rbp)
jmp 0xe6776
movq -0x1018(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb2c(%rbp)
leaq -0xb2c(%rbp), %rsi
callq 0xb2f50
movq %rax, -0x1030(%rbp)
jmp 0xe679e
movsd -0x1028(%rbp), %xmm0
movq -0x1030(%rbp), %rax
movsd -0x1020(%rbp), %xmm1
addsd (%rax), %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa50(%rbp)
jmp 0xe67ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0xb18(%rbp), %rdi
callq 0x311e8
jmp 0xe6fd8
jmp 0xe692f
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfa255(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
jne 0xe692d
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xfa224(%rip), %rsi     # 0x1e0a66
xorl %eax, %eax
movl %eax, %edx
callq 0x30830
cmpq $-0x1, %rax
jne 0xe692d
movq 0x1ee6f4(%rip), %rdi    # 0x2d4f50
leaq 0xfa225(%rip), %rsi     # 0x1e0a88
callq 0x2ff50
movq %rax, -0x1038(%rbp)
jmp 0xe6871
movq -0x1038(%rbp), %rdi
movq 0x1ee749(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6886
movq 0x1ee6c3(%rip), %rdi    # 0x2d4f50
leaq 0xfa234(%rip), %rsi     # 0x1e0ac8
callq 0x2ff50
movq %rax, -0x1040(%rbp)
jmp 0xe68a2
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq -0x1040(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x1048(%rbp)
jmp 0xe68ce
movq -0x1048(%rbp), %rdi
leaq 0xfa201(%rip), %rsi     # 0x1e0add
callq 0x2ff50
movq %rax, -0x1050(%rbp)
jmp 0xe68ea
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq -0x1050(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x1058(%rbp)
jmp 0xe6916
movq -0x1058(%rbp), %rdi
movq 0x1ee6a4(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe692b
jmp 0xe692d
jmp 0xe692f
jmp 0xe6931
jmp 0xe6933
movq 0x1ee616(%rip), %rdi    # 0x2d4f50
leaq 0xfa1b1(%rip), %rsi     # 0x1e0af2
callq 0x2ff50
movq %rax, -0x1060(%rbp)
jmp 0xe694f
movq -0x1060(%rbp), %rdi
movss -0xa50(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0x1068(%rbp)
jmp 0xe696c
movq -0x1068(%rbp), %rdi
movq 0x1ee64e(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6981
movss 0xec67b(%rip), %xmm0    # 0x1d3004
ucomiss -0xa50(%rbp), %xmm0
jb 0xe6b23
movss -0xa50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xe6b23
movss -0xa50(%rbp), %xmm0
addss -0xa58(%rbp), %xmm0
movss %xmm0, -0xa58(%rbp)
movss 0xec63a(%rip), %xmm0    # 0x1d3004
ucomiss -0xa50(%rbp), %xmm0
jbe 0xe6a07
movss -0xa4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0xa54(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
movsd 0xf9ef5(%rip), %xmm2    # 0x1e08e8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa54(%rbp)
movss -0xa50(%rbp), %xmm0
movss 0xec5ed(%rip), %xmm1    # 0x1d3004
ucomiss %xmm1, %xmm0
jne 0xe6b0b
jp 0xe6b0b
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, -0x1070(%rbp)
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0x1070(%rbp), %rsi
movq %rax, %rdx
leaq -0xb70(%rbp), %rdi
callq 0x50f10
jmp 0xe6a6d
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq %rax, %rdx
leaq -0xb50(%rbp), %rdi
leaq -0xb70(%rbp), %rsi
callq 0x44760
jmp 0xe6a99
leaq -0xa78(%rbp), %rdi
leaq -0xb50(%rbp), %rsi
callq 0xb39c0
jmp 0xe6aae
leaq -0xb50(%rbp), %rdi
callq 0x311e8
leaq -0xb70(%rbp), %rdi
callq 0x311e8
jmp 0xe6b0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
jmp 0xe6afa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x448(%rbp)
movl %eax, -0x44c(%rbp)
leaq -0xb50(%rbp), %rdi
callq 0x311e8
leaq -0xb70(%rbp), %rdi
callq 0x311e8
jmp 0xe6fd8
xorps %xmm0, %xmm0
movss %xmm0, -0xa50(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0xa4c(%rbp)
jmp 0xe6b87
movq 0x1ee426(%rip), %rdi    # 0x2d4f50
leaq 0xf9fc9(%rip), %rsi     # 0x1e0afa
callq 0x2ff50
movq %rax, -0x1078(%rbp)
jmp 0xe6b3f
movq -0x1078(%rbp), %rdi
movss -0xa50(%rbp), %xmm0
callq 0x30ce0
movq %rax, -0x1080(%rbp)
jmp 0xe6b5c
movq -0x1080(%rbp), %rdi
movq 0x1ee45e(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6b71
xorps %xmm0, %xmm0
movss %xmm0, -0xa50(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0xa4c(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xed05e(%rip), %rsi     # 0x1d3bff
callq 0x44930
movb %al, -0x1081(%rbp)
jmp 0xe6bae
movb -0x1081(%rbp), %al
testb $0x1, %al
jne 0xe6bf0
jmp 0xe6bba
xorl %eax, %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rdi
leaq 0xf9df2(%rip), %rsi     # 0x1e09c6
callq 0x44930
movb %al, -0x1082(%rbp)
jmp 0xe6be1
movb -0x1082(%rbp), %al
testb $0x1, %al
jne 0xe6bf0
jmp 0xe6c8e
cmpl $0x0, -0xa5c(%rbp)
jne 0xe6c8e
xorl %eax, %eax
movl %eax, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0xe7380
movq %rax, -0x1090(%rbp)
jmp 0xe6c25
movq -0x1090(%rbp), %rdi
movl -0xa80(%rbp), %eax
movl %eax, -0xb74(%rbp)
leaq -0xb74(%rbp), %rsi
callq 0xb2f50
movq %rax, -0x1098(%rbp)
jmp 0xe6c4d
movq -0x1098(%rbp), %rax
movsd (%rax), %xmm0
leaq -0x650(%rbp), %rdi
callq 0x30710
movq %rax, -0x10a0(%rbp)
jmp 0xe6c6d
movq -0x10a0(%rbp), %rdi
leaq 0xf2884(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6c82
movl $0x1, -0xa5c(%rbp)
jmp 0xe6cd5
cmpl $0x0, -0xa5c(%rbp)
jne 0xe6cd3
movl -0xa80(%rbp), %esi
incl %esi
leaq -0x650(%rbp), %rdi
callq 0x30640
movq %rax, -0x10a8(%rbp)
jmp 0xe6cb4
movq -0x10a8(%rbp), %rdi
leaq 0xf283d(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6cc9
movl $0x1, -0xa5c(%rbp)
jmp 0xe6cd5
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
movq 0x1ee25d(%rip), %rdi    # 0x2d4f50
callq 0x2f780
movq %rax, -0x10b0(%rbp)
jmp 0xe6d01
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0x10b0(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x10b8(%rbp)
jmp 0xe6d2d
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq -0x10b8(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x10c0(%rbp)
jmp 0xe6d59
movq -0x10c0(%rbp), %rdi
leaq 0xf2798(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6d6e
movss -0xa50(%rbp), %xmm0
movq 0x1ee1d3(%rip), %rdi    # 0x2d4f50
callq 0x30ce0
movq %rax, -0x10c8(%rbp)
jmp 0xe6d8b
movq -0x10c8(%rbp), %rdi
movq 0x1ee22f(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6da0
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x670(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x650(%rbp), %rdi
callq 0x2f780
movq %rax, -0x10d0(%rbp)
jmp 0xe6dcc
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x6a0(%rbp), %rdi
callq 0x449e0
movq -0x10d0(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x10d8(%rbp)
jmp 0xe6df8
movl -0xa7c(%rbp), %eax
movl %eax, %esi
leaq -0x688(%rbp), %rdi
callq 0x449e0
movq -0x10d8(%rbp), %rdi
movq %rax, %rsi
callq 0x2f780
movq %rax, -0x10e0(%rbp)
jmp 0xe6e24
movq -0x10e0(%rbp), %rdi
leaq 0xf26cd(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6e39
movss -0xa50(%rbp), %xmm0
leaq -0x650(%rbp), %rdi
callq 0x30ce0
movq %rax, -0x10e8(%rbp)
jmp 0xe6e56
movq -0x10e8(%rbp), %rdi
movq 0x1ee164(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6e6b
jmp 0xe6e6d
jmp 0xe6e6f
movl -0xa84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa84(%rbp)
jmp 0xe568b
jmp 0xe6e85
movl -0xa80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa80(%rbp)
jmp 0xe5629
jmp 0xe6e9b
movl -0xa7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa7c(%rbp)
jmp 0xe549a
movss -0xa58(%rbp), %xmm0
leaq -0x650(%rbp), %rdi
callq 0x30ce0
movq %rax, -0x10f0(%rbp)
jmp 0xe6ecc
movq -0x10f0(%rbp), %rdi
leaq 0xf2625(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6ee1
movl $0x0, -0xb78(%rbp)
movl -0xb78(%rbp), %eax
movq %rax, -0x10f8(%rbp)
leaq -0xa78(%rbp), %rdi
callq 0x44960
movq %rax, %rcx
movq -0x10f8(%rbp), %rax
cmpq %rcx, %rax
jae 0xe6f67
movl -0xb78(%rbp), %eax
movl %eax, %esi
leaq -0xa78(%rbp), %rdi
callq 0x449e0
movq %rax, %rsi
leaq -0x650(%rbp), %rdi
callq 0x2f780
movq %rax, -0x1100(%rbp)
jmp 0xe6f3f
movq -0x1100(%rbp), %rdi
leaq 0xf25b2(%rip), %rsi     # 0x1d94ff
callq 0x2ff50
jmp 0xe6f54
jmp 0xe6f56
movl -0xb78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb78(%rbp)
jmp 0xe6eeb
movss -0xa54(%rbp), %xmm0
leaq -0x650(%rbp), %rdi
callq 0x30ce0
movq %rax, -0x1108(%rbp)
jmp 0xe6f84
movq -0x1108(%rbp), %rdi
movq 0x1ee036(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xe6f99
leaq -0xa78(%rbp), %rdi
callq 0x451d0
leaq -0x650(%rbp), %rdi
callq 0x30910
jmp 0xe6fb3
movss -0xa58(%rbp), %xmm0
movss %xmm0, -0x4(%rbp)
movl $0x1, -0x804(%rbp)
leaq -0xa78(%rbp), %rdi
callq 0x448d0
jmp 0xe6fe9
leaq -0xa78(%rbp), %rdi
callq 0x448d0
jmp 0xe70b7
leaq -0x800(%rbp), %rdi
callq 0x311e8
leaq -0x7e0(%rbp), %rdi
callq 0x311e8
leaq -0x7a0(%rbp), %rdi
callq 0x311e8
leaq -0x780(%rbp), %rdi
callq 0xe7560
leaq -0x750(%rbp), %rdi
callq 0xe7560
leaq -0x720(%rbp), %rdi
callq 0x311e8
leaq -0x700(%rbp), %rdi
callq 0x448d0
leaq -0x6e8(%rbp), %rdi
callq 0x448d0
leaq -0x6d0(%rbp), %rdi
callq 0x448d0
leaq -0x6b8(%rbp), %rdi
callq 0x448d0
leaq -0x6a0(%rbp), %rdi
callq 0x448d0
leaq -0x688(%rbp), %rdi
callq 0x448d0
leaq -0x670(%rbp), %rdi
callq 0x448d0
leaq -0x650(%rbp), %rdi
callq 0x304f0
leaq -0x440(%rbp), %rdi
callq 0x2f0e0
leaq -0x238(%rbp), %rdi
callq 0x2f0e0
movss -0x4(%rbp), %xmm0
addq $0x1110, %rsp           # imm = 0x1110
popq %rbp
retq
leaq -0x800(%rbp), %rdi
callq 0x311e8
leaq -0x7e0(%rbp), %rdi
callq 0x311e8
leaq -0x7a0(%rbp), %rdi
callq 0x311e8
leaq -0x780(%rbp), %rdi
callq 0xe7560
leaq -0x750(%rbp), %rdi
callq 0xe7560
leaq -0x720(%rbp), %rdi
callq 0x311e8
leaq -0x700(%rbp), %rdi
callq 0x448d0
leaq -0x6e8(%rbp), %rdi
callq 0x448d0
leaq -0x6d0(%rbp), %rdi
callq 0x448d0
leaq -0x6b8(%rbp), %rdi
callq 0x448d0
leaq -0x6a0(%rbp), %rdi
callq 0x448d0
leaq -0x688(%rbp), %rdi
callq 0x448d0
leaq -0x670(%rbp), %rdi
callq 0x448d0
leaq -0x650(%rbp), %rdi
callq 0x304f0
leaq -0x440(%rbp), %rdi
callq 0x2f0e0
leaq -0x238(%rbp), %rdi
callq 0x2f0e0
movq -0x448(%rbp), %rdi
callq 0x30170
nopw %cs:(%rax,%rax)