// File: /workspace/github_c_makefile_star2_O0/fukunagatsu[P]RIblast/gapped_extension.cpp
// Function: GappedExtension::extension(Hit&, std::vector<unsigned char, std::allocator<unsigned char>>&, std::vector<unsigned char, std::allocator<unsigned char>>&, std::vector<float, std::allocator<float>>&, std::vector<float, std::allocator<float>>&, std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>&, std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>&, bool)
void GappedExtension::extension(Hit &candidate, vector<unsigned char> &query_seq, vector<unsigned char> &db_seq, vector<float> &query_accessibility, vector<float> &query_conditional_accessibility, vector<vector<float> > &db_accessibility,vector<vector<float> > &db_conditional_accessibility, bool flag){
  CheckStemCandidate stem_check(_drop_out_score);
  double min_energy = candidate.GetEnergy();
  double first_a_energy = candidate.GetAccessibilityEnergy();
  double min_a_energy = first_a_energy;
  int q_start = 0;
  int db_start = 0;
  if(flag == 0){
    q_start = candidate.GetQSp();  
    db_start = candidate.GetDbSp(); 
  }else{
    q_start = candidate.GetQSp()+ candidate.GetQLength()-1;
    db_start = candidate.GetDbSp()+ candidate.GetDbLength()-1;
  }
   
  int max_q_extension = MAX_EXTENSION;
  int max_db_extension = MAX_EXTENSION;
  int db_seq_id = candidate.GetDbSeqId();
  int db_seq_id_start = candidate.GetDbSeqIdStart();
  int db_seq_id_end = db_seq_id_start + candidate.GetDbLength()-1;

  int min_q_start = q_start;
  int min_db_start = db_start;
  int q_length = candidate.GetQLength(); 
  int db_length = candidate.GetDbLength();
  int min_q_length = candidate.GetQLength(); 
  int min_db_length = candidate.GetDbLength();
  int min_db_seq_id_start = db_seq_id_start;

  int length = 0;
  int min_length = 0;
  vector<vector<Cell> > matrix_c; matrix_c.resize(100,vector<Cell>(100, Cell(-1,-1, 0, INF)));
  vector<double> extension_q_accessibility; extension_q_accessibility.reserve(100);
  vector<double> extension_db_accessibility;extension_db_accessibility.reserve(100);

  int q_char = GetChar(query_seq,q_start);
  int db_char = GetChar(db_seq,db_start);
  int type = BP_pair[q_char][db_char];
  
  if(flag == 0){type = rtype[type];}
  matrix_c[0][0].set(-1,-1,type,min_energy);
  vector<Stem> stem_candidate; stem_candidate.reserve(100);
  Stem temp_stem(0,0, type);
  stem_candidate.push_back(temp_stem);
  
  while(true){
    length++;
    stem_check.SetLength(length);
    if(flag == 0){
      if(max_q_extension == MAX_EXTENSION){
	if(q_start-length < 0 || query_seq[q_start-length] < 2){ max_q_extension = length-1;}
      }
      if(max_db_extension == MAX_EXTENSION){
	if(db_start-length < 0 || db_seq[db_start-length] < 2){max_db_extension = length-1;}
      }
    }else{
      if(max_q_extension == MAX_EXTENSION){
	if(query_seq[q_start+length] < 2){ max_q_extension = length-1;}
      }
      if(max_db_extension == MAX_EXTENSION){
	if(db_seq[db_start+length]  < 2){max_db_extension = length-1;}
      }
    }
    
    if(flag == 0){
      if(length == 1){
	if(max_q_extension == MAX_EXTENSION){
	  extension_q_accessibility.push_back(query_accessibility[q_start-length] - query_accessibility[q_start-length+1] + query_conditional_accessibility[q_start-length+_min_accessible_length]);
	}
	if(max_db_extension == MAX_EXTENSION){
	  extension_db_accessibility.push_back(db_conditional_accessibility[db_seq_id][db_seq_id_end+length]);
	}
      }else{
	if(max_q_extension == MAX_EXTENSION){
	  extension_q_accessibility.push_back(extension_q_accessibility[length-2]+query_accessibility[q_start-length] - query_accessibility[q_start-length+1] + query_conditional_accessibility[q_start-length+_min_accessible_length]);
	}
	if(max_db_extension == MAX_EXTENSION){
	  extension_db_accessibility.push_back(extension_db_accessibility[length-2]+db_conditional_accessibility[db_seq_id][db_seq_id_end+length]);
	}
      }
    }else{
      if(length == 1){
	if(max_q_extension == MAX_EXTENSION){
	  extension_q_accessibility.push_back(query_conditional_accessibility[q_start+length]);
	}
	if(max_db_extension == MAX_EXTENSION){
	  extension_db_accessibility.push_back(db_accessibility[db_seq_id][db_seq_id_start-length] - db_accessibility[db_seq_id][db_seq_id_start-length+1] + db_conditional_accessibility[db_seq_id][db_seq_id_start-length+_min_accessible_length]);
	}
      }else{
	if(max_q_extension == MAX_EXTENSION){
	  extension_q_accessibility.push_back(extension_q_accessibility[length-2]+query_conditional_accessibility[q_start+length]);
	}
	if(max_db_extension == MAX_EXTENSION){
	  extension_db_accessibility.push_back(extension_db_accessibility[length-2]+db_accessibility[db_seq_id][db_seq_id_start-length] - db_accessibility[db_seq_id][db_seq_id_start-length+1] + db_conditional_accessibility[db_seq_id][db_seq_id_start-length+_min_accessible_length]);
	}
      }
    }
    if(length-2 > _drop_out_score){      
      stem_candidate.erase(remove_if(stem_candidate.begin(), stem_candidate.end(),stem_check), stem_candidate.end());
    }
    for(int i = 1; i <= length-1; i++){
      int j = length-i;
      
      if(i<=max_q_extension && j <=max_db_extension){
	int type = CheckHelixLength(flag, query_seq, db_seq, q_start, db_start, i, j, matrix_c);
	
	if(type!=0){
	  int min_k = -1;
	  int sc_size = stem_candidate.size();
	  double hybrid_energy = INF;
	  
	  for(int k = 0; k < sc_size; k++){
	    Stem this_candidate = stem_candidate[k];
	    if(this_candidate.first < i && this_candidate.second < j){
	      double this_energy = 0.0;
	      if(flag == 0){
		this_energy =  LoopEnergy(type, this_candidate.type, q_start-i, db_start-j, q_start-this_candidate.first, db_start-this_candidate.second, query_seq, db_seq);
	      }else{
	        this_energy =  LoopEnergy(this_candidate.type, type, q_start+this_candidate.first, db_start+this_candidate.second, q_start+i, db_start+j, query_seq, db_seq);
	      }
	      this_energy += matrix_c[this_candidate.first][this_candidate.second].hybrid_energy;
	      
	      if(this_energy < hybrid_energy){
		hybrid_energy =  this_energy;
		min_k = k;
	      }
	    }
	  }
	  
	  matrix_c[i][j].set(stem_candidate[min_k].first, stem_candidate[min_k].second, stem_candidate[min_k].type, hybrid_energy);
	  
	  double interaction_energy = extension_q_accessibility[i-1] + extension_db_accessibility[j-1] + hybrid_energy;
	  
	  stem_candidate.push_back(Stem(i,j,rtype[type]));
	  if(interaction_energy < min_energy){
	    min_energy = interaction_energy;
	    min_a_energy = first_a_energy + extension_q_accessibility[i-1] + extension_db_accessibility[j-1];
	    min_length = length;
	    if(flag == 0){
	      min_q_start = q_start-i;
	      min_db_start = db_start-j;
	    }else{
	      min_db_seq_id_start = db_seq_id_start -j;
	    }
	    min_q_length = q_length+i;
	    min_db_length = db_length+j;
	  }
	}
      }
      
      if(i+1 == matrix_c.size()){
	for(int x = 0; x< matrix_c.size();x++){
	  matrix_c[x].push_back(Cell(-1,-1,0,INF));
	}
	vector<Cell> tempcell_vector; tempcell_vector.resize(matrix_c.size()+1, Cell(-1,-1,0,INF));
	matrix_c.push_back(tempcell_vector);
      }
    }
     
    if(length-min_length>=_drop_out_score){break;}
    if(max_q_extension != MAX_EXTENSION && max_db_extension != MAX_EXTENSION){break;}
  }
 
  if(q_length-min_q_length != 0 && db_length-min_db_length != 0){
    if(flag == 0){
      traceback(candidate,matrix_c, q_start-min_q_start, q_start, db_start-min_db_start,db_start, flag);
    }else{
      traceback(candidate,matrix_c, min_q_length-q_length ,q_start, min_db_length-db_length ,db_start, flag);
    }
  }
  candidate.SetDbSeqIdStart(min_db_seq_id_start);
  if(flag == 0){
    candidate.SetQSp(min_q_start);
    candidate.SetDbSp(min_db_start);
  }
  candidate.SetQLength(min_q_length);
  candidate.SetDbLength(min_db_length);
  candidate.SetEnergy(min_energy);
  candidate.SetAccessibilityEnergy(min_a_energy);
  candidate.SetHybridizationEnergy(min_energy-min_a_energy);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x3c8, %rsp            # imm = 0x3C8
movb 0x20(%rbp), %al
movq 0x18(%rbp), %r10
movq 0x10(%rbp), %r10
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
andb $0x1, %al
movb %al, -0x39(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x280(%rbp)
movl 0x4(%rax), %esi
leaq -0x44(%rbp), %rdi
callq 0x2eb40
movq -0x18(%rbp), %rdi
callq 0x20800
movsd %xmm0, -0x50(%rbp)
movq -0x18(%rbp), %rdi
callq 0x207c0
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movl $0x0, -0x64(%rbp)
movl $0x0, -0x68(%rbp)
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2cb86
movq -0x18(%rbp), %rdi
callq 0x1fb10
movl %eax, -0x64(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1faf0
movl %eax, -0x68(%rbp)
jmp 0x2cbde
movq -0x18(%rbp), %rdi
callq 0x1fb10
movl %eax, -0x288(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb50
movw %ax, %cx
movl -0x288(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0x64(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1faf0
movl %eax, -0x284(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb30
movw %ax, %cx
movl -0x284(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0x68(%rbp)
movl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
movl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
movq -0x18(%rbp), %rdi
callq 0x207b0
movl %eax, -0x74(%rbp)
movq -0x18(%rbp), %rdi
callq 0x29930
movl %eax, -0x78(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x28c(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb30
movl -0x28c(%rbp), %ecx
movzwl %ax, %edx
movl %ecx, %eax
movl %edx, %ecx
leal -0x1(%rax,%rcx), %eax
movl %eax, -0x7c(%rbp)
movl -0x64(%rbp), %eax
movl %eax, -0x80(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x84(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb50
movzwl %ax, %eax
movl %eax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb30
movzwl %ax, %eax
movl %eax, -0x8c(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb50
movzwl %ax, %eax
movl %eax, -0x90(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1fb30
movzwl %ax, %eax
movl %eax, -0x94(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x98(%rbp)
movl $0x0, -0x9c(%rbp)
movl $0x0, -0xa0(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2eb60
leaq -0xe8(%rbp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
movsd 0xc088(%rip), %xmm0     # 0x38d48
movl %edx, %esi
callq 0x2ec30
jmp 0x2ccc9
leaq -0xf5(%rbp), %rdi
movq %rdi, -0x298(%rbp)
callq 0x2ec70
movq -0x298(%rbp), %rcx
leaq -0xd0(%rbp), %rdi
movl $0x64, %esi
leaq -0xe8(%rbp), %rdx
callq 0x2ec90
jmp 0x2ccfd
leaq -0xb8(%rbp), %rdi
movl $0x64, %esi
leaq -0xd0(%rbp), %rdx
callq 0x2eb80
jmp 0x2cd17
leaq -0xd0(%rbp), %rdi
callq 0x2ed10
leaq -0xf5(%rbp), %rdi
callq 0x2ed70
leaq -0x110(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0xbef0
movq -0x2a0(%rbp), %rdi
movl $0x64, %esi
callq 0x2b170
jmp 0x2cd55
leaq -0x128(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
callq 0xbef0
movq -0x2a8(%rbp), %rdi
movl $0x64, %esi
callq 0x2b170
jmp 0x2cd7b
movq -0x280(%rbp), %rdi
movq -0x20(%rbp), %rsi
movl -0x64(%rbp), %edx
callq 0x2e270
movl %eax, -0x2ac(%rbp)
jmp 0x2cd96
movq -0x280(%rbp), %rdi
movl -0x2ac(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x28(%rbp), %rsi
movl -0x68(%rbp), %edx
callq 0x2e270
movl %eax, -0x2b0(%rbp)
jmp 0x2cdbd
movl -0x2b0(%rbp), %eax
movl %eax, -0x130(%rbp)
movslq -0x12c(%rbp), %rcx
leaq 0xb2379(%rip), %rax     # 0xdf150
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movslq -0x130(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x134(%rbp)
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2cea3
movslq -0x134(%rbp), %rcx
leaq 0xb23b3(%rip), %rax     # 0xdf1c0
movl (%rax,%rcx,4), %eax
movl %eax, -0x134(%rbp)
jmp 0x2cea3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
jmp 0x2df75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
jmp 0x2ce64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x2ed10
leaq -0xf5(%rbp), %rdi
callq 0x2ed70
jmp 0x2df75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
jmp 0x2df69
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
jmp 0x2df5d
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x2b8(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2ed90
movq -0x2b8(%rbp), %rsi
movq %rax, %rdi
callq 0x2edb0
movq %rax, %rdi
movl -0x134(%rbp), %ecx
movsd -0x50(%rbp), %xmm0
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %edx, %esi
callq 0x2edd0
jmp 0x2cee5
leaq -0x150(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x2ee10
movq -0x2c0(%rbp), %rdi
movl $0x64, %esi
callq 0x2ee30
jmp 0x2cf0b
movl -0x134(%rbp), %ecx
leaq -0x15c(%rbp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x2ef30
jmp 0x2cf23
leaq -0x150(%rbp), %rdi
leaq -0x15c(%rbp), %rsi
callq 0x2ef60
jmp 0x2cf38
jmp 0x2cf3a
jmp 0x2cf3c
movl -0x9c(%rbp), %eax
incl %eax
movl %eax, -0x9c(%rbp)
movl -0x9c(%rbp), %esi
leaq -0x44(%rbp), %rdi
callq 0x2efd0
jmp 0x2cf5b
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2d00b
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2cfc7
movl -0x64(%rbp), %eax
subl -0x9c(%rbp), %eax
cmpl $0x0, %eax
jl 0x2cfa0
movq -0x20(%rbp), %rdi
movl -0x64(%rbp), %eax
subl -0x9c(%rbp), %eax
movslq %eax, %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x2cfc5
movl -0x9c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x2cfc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
jmp 0x2df51
jmp 0x2cfc7
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d009
movl -0x68(%rbp), %eax
subl -0x9c(%rbp), %eax
cmpl $0x0, %eax
jl 0x2cffb
movq -0x28(%rbp), %rdi
movl -0x68(%rbp), %eax
subl -0x9c(%rbp), %eax
movslq %eax, %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x2d007
movl -0x9c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0x2d009
jmp 0x2d075
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2d03f
movq -0x20(%rbp), %rdi
movl -0x64(%rbp), %eax
addl -0x9c(%rbp), %eax
movslq %eax, %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x2d03d
movl -0x9c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x2d03f
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d073
movq -0x28(%rbp), %rdi
movl -0x68(%rbp), %eax
addl -0x9c(%rbp), %eax
movslq %eax, %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x2d071
movl -0x9c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0x2d073
jmp 0x2d075
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2d32b
cmpl $0x1, -0x9c(%rbp)
jne 0x2d1a1
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2d149
movq -0x30(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss (%rax), %xmm0
movss %xmm0, -0x2c8(%rbp)
movq -0x30(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
incl %eax
movslq %eax, %rsi
callq 0x15690
movss -0x2c8(%rbp), %xmm0
movq -0x280(%rbp), %rcx
movss (%rax), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x2c4(%rbp)
movq -0x38(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %edx
subl %edx, %eax
movl (%rcx), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss -0x2c4(%rbp), %xmm0
movss (%rax), %xmm1
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x168(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x2b270
jmp 0x2d147
jmp 0x2d149
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d19c
movq 0x18(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x7c(%rbp), %eax
movl -0x9c(%rbp), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x170(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x2b270
jmp 0x2d19a
jmp 0x2d19c
jmp 0x2d326
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2d296
movl -0x9c(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
leaq -0x110(%rbp), %rdi
movq %rdi, -0x2d0(%rbp)
callq 0x150c0
movsd (%rax), %xmm0
movsd %xmm0, -0x2e8(%rbp)
movq -0x30(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x2e8(%rbp), %xmm0
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e0(%rbp)
movq -0x30(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
incl %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x2e0(%rbp), %xmm0
movq -0x280(%rbp), %rcx
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x2d8(%rbp)
movq -0x38(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %edx
subl %edx, %eax
movl (%rcx), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x2d8(%rbp), %xmm0
movq -0x2d0(%rbp), %rdi
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x178(%rbp)
leaq -0x178(%rbp), %rsi
callq 0x2b270
jmp 0x2d294
jmp 0x2d296
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d324
movl -0x9c(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
leaq -0x128(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0x150c0
movsd (%rax), %xmm0
movsd %xmm0, -0x2f8(%rbp)
movq 0x18(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x7c(%rbp), %eax
movl -0x9c(%rbp), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x2f8(%rbp), %xmm0
movq -0x2f0(%rbp), %rdi
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x180(%rbp)
leaq -0x180(%rbp), %rsi
callq 0x2b270
jmp 0x2d322
jmp 0x2d324
jmp 0x2d326
jmp 0x2d5f9
cmpl $0x1, -0x9c(%rbp)
jne 0x2d45e
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2d37f
movq -0x38(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x188(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x2b270
jmp 0x2d37d
jmp 0x2d37f
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d459
movq 0x10(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss (%rax), %xmm0
movss %xmm0, -0x300(%rbp)
movq 0x10(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
incl %eax
movslq %eax, %rsi
callq 0x15690
movss -0x300(%rbp), %xmm0
movss (%rax), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x2fc(%rbp)
movq 0x18(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq -0x280(%rbp), %rcx
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %edx
subl %edx, %eax
movl (%rcx), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movss -0x2fc(%rbp), %xmm0
movss (%rax), %xmm1
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x190(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2b270
jmp 0x2d457
jmp 0x2d459
jmp 0x2d5f7
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
jne 0x2d4dc
movl -0x9c(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
leaq -0x110(%rbp), %rdi
movq %rdi, -0x308(%rbp)
callq 0x150c0
movsd (%rax), %xmm0
movsd %xmm0, -0x310(%rbp)
movq -0x38(%rbp), %rdi
movl -0x64(%rbp), %eax
movl -0x9c(%rbp), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x310(%rbp), %xmm0
movq -0x308(%rbp), %rdi
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x198(%rbp)
leaq -0x198(%rbp), %rsi
callq 0x2b270
jmp 0x2d4da
jmp 0x2d4dc
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
jne 0x2d5f5
movl -0x9c(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
leaq -0x128(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x150c0
movsd (%rax), %xmm0
movsd %xmm0, -0x330(%rbp)
movq 0x10(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x330(%rbp), %xmm0
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x328(%rbp)
movq 0x10(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
incl %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x328(%rbp), %xmm0
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x320(%rbp)
movq 0x18(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0x29950
movq -0x280(%rbp), %rcx
movq %rax, %rdi
movl -0x78(%rbp), %eax
movl -0x9c(%rbp), %edx
subl %edx, %eax
movl (%rcx), %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0x15690
movsd -0x320(%rbp), %xmm0
movq -0x318(%rbp), %rdi
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x1a0(%rbp)
leaq -0x1a0(%rbp), %rsi
callq 0x2b270
jmp 0x2d5f3
jmp 0x2d5f5
jmp 0x2d5f7
jmp 0x2d5f9
movq -0x280(%rbp), %rcx
movl -0x9c(%rbp), %eax
subl $0x2, %eax
cmpl 0x4(%rcx), %eax
jle 0x2d6ec
leaq -0x150(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0x2f0e0
movq -0x340(%rbp), %rdi
movq %rax, -0x1b8(%rbp)
callq 0x2f110
movq %rax, -0x1c0(%rbp)
movq -0x44(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x1b8(%rbp), %rdi
movq -0x1c0(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
callq 0x2f080
movq %rax, -0x338(%rbp)
jmp 0x2d66d
movq -0x338(%rbp), %rax
movq %rax, -0x1b0(%rbp)
leaq -0x1a8(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x2f140
leaq -0x150(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0x2f110
movq %rax, -0x1d8(%rbp)
leaq -0x1d0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x2f140
movq -0x350(%rbp), %rdi
movq -0x1a8(%rbp), %rsi
movq -0x1d0(%rbp), %rdx
callq 0x2eff0
movq %rax, -0x348(%rbp)
jmp 0x2d6de
movq -0x348(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movl $0x1, -0x1e4(%rbp)
movl -0x1e4(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jg 0x2dd77
movl -0x9c(%rbp), %eax
subl -0x1e4(%rbp), %eax
movl %eax, -0x1e8(%rbp)
movl -0x1e4(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jg 0x2dbf6
movl -0x1e8(%rbp), %eax
cmpl -0x70(%rbp), %eax
jg 0x2dbf6
movq -0x280(%rbp), %rdi
movzbl -0x39(%rbp), %esi
andl $0x1, %esi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movl -0x64(%rbp), %r8d
movl -0x68(%rbp), %r9d
movl -0x1e4(%rbp), %r10d
movl -0x1e8(%rbp), %r11d
movq %rsp, %rax
leaq -0xb8(%rbp), %rbx
movq %rbx, 0x10(%rax)
movl %r11d, 0x8(%rax)
movl %r10d, (%rax)
callq 0x2e300
movl %eax, -0x354(%rbp)
jmp 0x2d78b
movl -0x354(%rbp), %eax
movl %eax, -0x1ec(%rbp)
cmpl $0x0, -0x1ec(%rbp)
je 0x2dbf4
movl $0xffffffff, -0x1f0(%rbp) # imm = 0xFFFFFFFF
leaq -0x150(%rbp), %rdi
callq 0x2f180
movl %eax, -0x1f4(%rbp)
movsd 0xb580(%rip), %xmm0     # 0x38d48
movsd %xmm0, -0x200(%rbp)
movl $0x0, -0x204(%rbp)
movl -0x204(%rbp), %eax
cmpl -0x1f4(%rbp), %eax
jge 0x2d9c6
movslq -0x204(%rbp), %rsi
leaq -0x150(%rbp), %rdi
callq 0x2f1b0
movq (%rax), %rcx
movq %rcx, -0x210(%rbp)
movl 0x8(%rax), %eax
movl %eax, -0x208(%rbp)
movl -0x210(%rbp), %eax
cmpl -0x1e4(%rbp), %eax
jge 0x2d9b0
movl -0x20c(%rbp), %eax
cmpl -0x1e8(%rbp), %eax
jge 0x2d9b0
xorps %xmm0, %xmm0
movsd %xmm0, -0x218(%rbp)
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2d8ca
movq -0x280(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x208(%rbp), %edx
movl -0x64(%rbp), %r9d
movl -0x1e4(%rbp), %eax
movl %r9d, %ecx
subl %eax, %ecx
movl -0x68(%rbp), %r10d
movl -0x1e8(%rbp), %eax
movl %r10d, %r8d
subl %eax, %r8d
movl -0x210(%rbp), %r11d
movl -0x20c(%rbp), %eax
subl %r11d, %r9d
subl %eax, %r10d
movq -0x20(%rbp), %r11
movq -0x28(%rbp), %rbx
movq %rsp, %rax
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movl %r10d, (%rax)
callq 0x2e490
movsd %xmm0, -0x360(%rbp)
jmp 0x2d8b8
movsd -0x360(%rbp), %xmm0
movsd %xmm0, -0x218(%rbp)
jmp 0x2d945
movq -0x280(%rbp), %rdi
movl -0x208(%rbp), %esi
movl -0x1ec(%rbp), %edx
movl -0x64(%rbp), %r9d
movl -0x210(%rbp), %r8d
movl -0x20c(%rbp), %eax
movl %r9d, %ecx
addl %r8d, %ecx
movl -0x68(%rbp), %r10d
movl %r10d, %r8d
addl %eax, %r8d
movl -0x1e4(%rbp), %eax
addl %eax, %r9d
movl -0x1e8(%rbp), %eax
addl %eax, %r10d
movq -0x20(%rbp), %r11
movq -0x28(%rbp), %rbx
movq %rsp, %rax
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movl %r10d, (%rax)
callq 0x2e490
movsd %xmm0, -0x368(%rbp)
jmp 0x2d935
movsd -0x368(%rbp), %xmm0
movsd %xmm0, -0x218(%rbp)
movslq -0x210(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x2ed90
movq %rax, %rdi
movslq -0x20c(%rbp), %rsi
callq 0x2edb0
movsd 0x8(%rax), %xmm0
addsd -0x218(%rbp), %xmm0
movsd %xmm0, -0x218(%rbp)
movsd -0x218(%rbp), %xmm1
movsd -0x200(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2d9ae
movsd -0x218(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
movl -0x204(%rbp), %eax
movl %eax, -0x1f0(%rbp)
jmp 0x2d9b0
jmp 0x2d9b2
movl -0x204(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x204(%rbp)
jmp 0x2d7da
movslq -0x1e4(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x2ed90
movq %rax, %rdi
movslq -0x1e8(%rbp), %rsi
callq 0x2edb0
movq %rax, -0x378(%rbp)
movslq -0x1f0(%rbp), %rsi
leaq -0x150(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x2f1b0
movq -0x380(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x370(%rbp)
movslq -0x1f0(%rbp), %rsi
callq 0x2f1b0
movq -0x380(%rbp), %rdi
movl 0x4(%rax), %eax
movl %eax, -0x36c(%rbp)
movslq -0x1f0(%rbp), %rsi
callq 0x2f1b0
movq -0x378(%rbp), %rdi
movl -0x370(%rbp), %esi
movl -0x36c(%rbp), %edx
movl 0x8(%rax), %ecx
movsd -0x200(%rbp), %xmm0
callq 0x2edd0
jmp 0x2da65
movl -0x1e4(%rbp), %eax
decl %eax
movslq %eax, %rsi
leaq -0x110(%rbp), %rdi
callq 0x150c0
movsd (%rax), %xmm0
movsd %xmm0, -0x388(%rbp)
movl -0x1e8(%rbp), %eax
decl %eax
movslq %eax, %rsi
leaq -0x128(%rbp), %rdi
callq 0x150c0
movsd -0x388(%rbp), %xmm0
movsd (%rax), %xmm1
addsd %xmm1, %xmm0
movsd -0x200(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x220(%rbp)
movl -0x1e4(%rbp), %esi
movl -0x1e8(%rbp), %edx
movslq -0x1ec(%rbp), %rcx
leaq 0xb16e3(%rip), %rax     # 0xdf1c0
movl (%rax,%rcx,4), %ecx
leaq -0x22c(%rbp), %rdi
callq 0x2ef30
jmp 0x2daee
leaq -0x150(%rbp), %rdi
leaq -0x22c(%rbp), %rsi
callq 0x2f1d0
jmp 0x2db03
movsd -0x220(%rbp), %xmm1
movsd -0x50(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2dbf2
movsd -0x220(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x398(%rbp)
movl -0x1e4(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq -0x110(%rbp), %rdi
callq 0x150c0
movsd -0x398(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, -0x390(%rbp)
movl -0x1e8(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq -0x128(%rbp), %rdi
callq 0x150c0
movsd -0x390(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
movl -0x9c(%rbp), %eax
movl %eax, -0xa0(%rbp)
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2dbbf
movl -0x64(%rbp), %eax
subl -0x1e4(%rbp), %eax
movl %eax, -0x80(%rbp)
movl -0x68(%rbp), %eax
subl -0x1e8(%rbp), %eax
movl %eax, -0x84(%rbp)
jmp 0x2dbce
movl -0x78(%rbp), %eax
subl -0x1e8(%rbp), %eax
movl %eax, -0x98(%rbp)
movl -0x88(%rbp), %eax
addl -0x1e4(%rbp), %eax
movl %eax, -0x90(%rbp)
movl -0x8c(%rbp), %eax
addl -0x1e8(%rbp), %eax
movl %eax, -0x94(%rbp)
jmp 0x2dbf4
jmp 0x2dbf6
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
cltq
movq %rax, -0x3a0(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2f200
movq %rax, %rcx
movq -0x3a0(%rbp), %rax
cmpq %rcx, %rax
jne 0x2dd61
movl $0x0, -0x230(%rbp)
movslq -0x230(%rbp), %rax
movq %rax, -0x3a8(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2f200
movq %rax, %rcx
movq -0x3a8(%rbp), %rax
cmpq %rcx, %rax
jae 0x2dcbe
movslq -0x230(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x2ed90
movq %rax, -0x3b0(%rbp)
leaq -0x248(%rbp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
movsd 0xb0be(%rip), %xmm0     # 0x38d48
movl %edx, %esi
callq 0x2ec30
jmp 0x2dc93
movq -0x3b0(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x2f230
jmp 0x2dca8
jmp 0x2dcaa
movl -0x230(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x230(%rbp)
jmp 0x2dc31
leaq -0x260(%rbp), %rdi
callq 0x2f260
leaq -0xb8(%rbp), %rdi
callq 0x2f200
incq %rax
movq %rax, -0x3b8(%rbp)
leaq -0x278(%rbp), %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
movsd 0xb052(%rip), %xmm0     # 0x38d48
movl %edx, %esi
callq 0x2ec30
jmp 0x2dcff
movq -0x3b8(%rbp), %rsi
leaq -0x260(%rbp), %rdi
leaq -0x278(%rbp), %rdx
callq 0x2f280
jmp 0x2dd1b
leaq -0xb8(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x2f330
jmp 0x2dd30
leaq -0x260(%rbp), %rdi
callq 0x2ed10
jmp 0x2dd61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x2ed10
jmp 0x2df51
jmp 0x2dd63
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e4(%rbp)
jmp 0x2d6f6
movq -0x280(%rbp), %rcx
movl -0x9c(%rbp), %eax
subl -0xa0(%rbp), %eax
cmpl 0x4(%rcx), %eax
jl 0x2dd91
jmp 0x2ddaa
cmpl $0x186a0, -0x6c(%rbp)   # imm = 0x186A0
je 0x2dda5
cmpl $0x186a0, -0x70(%rbp)   # imm = 0x186A0
je 0x2dda5
jmp 0x2ddaa
jmp 0x2cf3a
movl -0x88(%rbp), %eax
subl -0x90(%rbp), %eax
cmpl $0x0, %eax
je 0x2de7d
movl -0x8c(%rbp), %eax
subl -0x94(%rbp), %eax
cmpl $0x0, %eax
je 0x2de7d
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2de29
movq -0x280(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x64(%rbp), %r8d
movl -0x80(%rbp), %eax
movl %r8d, %ecx
subl %eax, %ecx
movl -0x68(%rbp), %edx
movl -0x84(%rbp), %eax
movl %edx, %r9d
subl %eax, %r9d
movzbl -0x39(%rbp), %r10d
andl $0x1, %r10d
movq %rsp, %rax
movl %r10d, 0x8(%rax)
movl %edx, (%rax)
leaq -0xb8(%rbp), %rdx
callq 0x2e950
jmp 0x2de27
jmp 0x2de7b
movq -0x280(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x90(%rbp), %ecx
movl -0x88(%rbp), %eax
subl %eax, %ecx
movl -0x64(%rbp), %r8d
movl -0x94(%rbp), %r9d
movl -0x8c(%rbp), %eax
subl %eax, %r9d
movl -0x68(%rbp), %edx
movzbl -0x39(%rbp), %r10d
andl $0x1, %r10d
movq %rsp, %rax
movl %r10d, 0x8(%rax)
movl %edx, (%rax)
leaq -0xb8(%rbp), %rdx
callq 0x2e950
jmp 0x2de79
jmp 0x2de7b
jmp 0x2de7d
movq -0x18(%rbp), %rdi
movl -0x98(%rbp), %esi
callq 0x29970
jmp 0x2de8e
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2debc
movq -0x18(%rbp), %rdi
movl -0x80(%rbp), %esi
callq 0x29990
jmp 0x2dea9
movq -0x18(%rbp), %rdi
movl -0x84(%rbp), %esi
callq 0x299b0
jmp 0x2deba
jmp 0x2debc
movq -0x18(%rbp), %rdi
movl -0x90(%rbp), %esi
callq 0x299d0
jmp 0x2decd
movq -0x18(%rbp), %rdi
movl -0x94(%rbp), %esi
callq 0x299f0
jmp 0x2dede
movq -0x18(%rbp), %rdi
movsd -0x50(%rbp), %xmm0
callq 0x29a10
jmp 0x2deee
movq -0x18(%rbp), %rdi
movsd -0x60(%rbp), %xmm0
callq 0x29a30
jmp 0x2defe
movq -0x18(%rbp), %rdi
movsd -0x50(%rbp), %xmm0
movsd -0x60(%rbp), %xmm1
subsd %xmm1, %xmm0
callq 0x29a50
jmp 0x2df17
leaq -0x150(%rbp), %rdi
callq 0x2f3a0
leaq -0x128(%rbp), %rdi
callq 0xc690
leaq -0x110(%rbp), %rdi
callq 0xc690
leaq -0xb8(%rbp), %rdi
callq 0x2f400
addq $0x3c8, %rsp            # imm = 0x3C8
popq %rbx
popq %rbp
retq
leaq -0x150(%rbp), %rdi
callq 0x2f3a0
leaq -0x128(%rbp), %rdi
callq 0xc690
leaq -0x110(%rbp), %rdi
callq 0xc690
leaq -0xb8(%rbp), %rdi
callq 0x2f400
movq -0xf0(%rbp), %rdi
callq 0x34d0
nopl (%rax)