// File: /workspace/github_cpp_makefile_star2_O1/manschga[P]M5GB/M5GB.cpp
// Function: M5GB(std::vector<polynomial, std::allocator<polynomial>>&, int)
vector<polynomial> M5GB(vector<polynomial>& system, int n) //table might overflow -> need to redefine inside
{
  auto start = std::chrono::steady_clock::now();
  degrees = create_degrees(n,10); //upper found for degree, have to change for larger examples
  Initialize(system,n);  

#ifdef DEBUG
  cout << "Size of P: " << P.size() << endl;
#endif
  int polys_left = m-2;
  int debug = 1000000;
  int maxiter = debug;
  int last_non_zero = maxiter-debug;
  //signature last_syz(table.size(),m);

  while (Spol_sign.size() > 0 && debug > 0)
    {
#ifdef DEBUG
      //cout << "iteration " << maxiter-debug << endl;
#endif
      if (Spol_sign.size() > 0)
	{
	  signature smallest_sign  = *Spol_sign.begin();
	  /*
	  */
	  Spol_sign.erase(Spol_sign.begin());//remove first item
	  if (Syzygy(smallest_sign,H))
	     {
	       syz_counter ++; //to be precise, take away all spairs of that syzygy
	       debug --;
	       continue;
	     }
	  if (smallest_sign.Get_term() != 0)
	    {
	      auto same_sign_pairs = Spairs_map.equal_range(smallest_sign);
	      for (auto pair = same_sign_pairs.first; pair!= same_sign_pairs.second; ++pair)
		{
		  Lab_poly uF = pair->second.first;
		  //Lab_poly vG = pair->second.second.first;
		  /*
		   if(Syzygy(vG.Get_sign(),H))//meets syzygy criterion
		    {
#ifdef DEBUG
		      cout << "syzygy criterion works for " << vG.Get_sign() << endl;
#endif
		      syz_counter ++;
		      debug --;
		      continue;
		    }
		  */
		   if (isRewritable(uF,pair->second.second)) //changed order, check!, could change first taking maximum w.r.t. rewrite order!
		    {
		      rewrite_counter++;
#ifdef DEBUG
		      cout << "Rewritable criterion works for " << uF << endl;
#endif
		      debug --;
		      continue;
		    }
		   /*
		    if (isRewritable(vG,pair->second.second.second))//Generations_G.find(G.Get_LT())->second)) //changed order, check!, could change first taking maximum w.r.t. rewrite order!)) //changed order, check!
		    {
		      rewrite_counter++;
#ifdef DEBUG
		      cout << "Rewritable criterion works for " << vG << endl;
#endif
		      debug --;
		      continue;
		    }
		   */
		    //Lab_poly Spol = uF - vG;
		   term_vec out = table[smallest_sign.Get_term()].first;
		   for (auto &it : out)
		     {
		       //cout << it;
		     }
		   //cout << endl;
#ifdef LOWER_POL
		   Lab_poly Spol = Low_pol(smallest_sign,uF,pair->second.second,n);
#else
		   Lab_poly Spol = uF;//variant
#endif
		   
		  /*
		  if (Spol.Get_LC() == 0)//is 0-polynomial
		    {
		      H[Spol.Get_sign().Get_index()].emplace_back(Spol.Get_sign().Get_term());//add syzygy signature
		      spol_is_zero ++;
		      debug --;
		      break;
		    }
		  */
#ifdef PRECISE_DEBUG
		  cout << "uF:" << uF<< endl;
		  //cout << "vG:" << vG << endl;
		  cout << "Next signature: " << Spol.Get_sign() << endl;
	  if (((maxiter - debug) % 1000) == 1)
	    {
	      cout << "size of G:" << G_.size() << endl;
	      cout << "iteration " << maxiter - debug << endl;
	      cout << "First Buchberger criterion works: " << BB_counter << endl;
	      cout << "spol is zero: " << spol_is_zero << endl;
	      cout << "rewritten: " << rewrite_counter << endl;
	      cout << "syzygy crit: " << syz_counter << endl;
	      cout << "actually reduced: " << actual_red << endl;
	      cout << "signature: " << Spol.Get_sign() << endl;
	    }
#endif
	  if (((maxiter - debug) % 100) == 33)
	    cout << "signature: " << Spol.Get_sign() << endl;
	  //if not rewriteable
	    
	  actual_red ++;
	  //cout << "signature: " << Spol.Get_sign() << endl;
	  //cout << Spol << endl << endl << endl;
	  if (actual_red == 1500)
	    {
	      debug = 0;
	      continue;
	    }
	  Full_S_Reduce(Spol,n);
	  //cout << " --> " << Spol << endl << endl << endl;
#ifdef DEBUG
	  cout << " --> " << Spol << endl << endl << endl;
#endif
	  if((Spol.Get_poly()).Get_LC() == 0)// 0-polynomial
	    {
	      //cout << maxiter-debug << endl;
	      debug = 0;
	      continue;
	      zero_reductions ++;
	      debug --;
	      H[Spol.Get_sign().Get_index()].emplace_back(Spol.Get_sign().Get_term());//add syzygy signature
	      break; //this signature already reduces to 0
	    }
	  else
	    {
	      last_non_zero = maxiter-debug;
	      Update_syz(Spol);//add new koszul syzygies
	      Update_pairs(Spol,system,n,BB_counter);//system needed? check!
#ifdef PRECISE_DEBUG
	      if (G_.find(Spol.Get_LT()) != G_.end())
		cout << "Same leading term! Error!" << endl;
#endif
	      Add_to_M(Spol);
	      Add_to_G(Spol);
	      /*
	      G_[Spol.Get_LT()] = Spol;
	      M[Spol.Get_LT()] = Spol;
	      Generations_M[Spol.Get_LT()] = G_.size(); //generation for M
	      Generations_G[Spol.Get_LT()] = G_.size(); //generation for G
	      Flags_M[Spol.Get_LT()] = Create_Flag(Spol.Get_poly()); //create flag for M
	      */
	      //Update_step(Spol); -> not needed since done in lazy manner!
	    }
	  debug --;
	  break; //one element of this signature already examined
		}
	    }
	}
    }
  vector<polynomial> basis = Poly(G_,n,p); //remove signatures

  sort(basis);
  Interreduce(basis);
  
#ifdef statistics
  cout << "Number of examined S-polynomials: " << maxiter - debug << endl;
  cout << "discarded since zero:" << spol_is_zero << endl;
  cout << "Discarded by Rewriteable criterion: " << rewrite_counter << endl;
  cout << "discarded by syzygy criterion: " << syz_counter << endl;
  cout << "actually reduced: " << actual_red << endl;
  cout << "Number of full reduction steps:" << full_red_steps << endl;
  cout << "Number of total reductions:" << number_of_reductions << endl;
  cout<< "Number of fast reductions: " <<  straight_m_reduces << endl;
  cout<< "Number of re-reductions: " <<  m_re_reduced << endl;
  cout<< "Number of g-reductions: " <<  g_reduced << endl;
  cout<< "Size of M: " << M.size() << endl;
  cout<< "Size of G: " << G_.size() << endl;
  cout << "Number of Zero reductions:" << zero_reductions << endl;
  cout << "First Buchberger criterion works: " << BB_counter << endl;
  cout << "Last non-zero: " << last_non_zero << endl;
#endif
  if (debug == 0)
    cout << "maximal number of iterations reached!!!"<< endl << endl;
  auto end = chrono::steady_clock::now();
  cout << "Elapsed time in Seconds : "
	 << chrono::duration_cast<chrono::milliseconds>(end - start).count()
	 << " milliseconds " << endl;
  return basis;
  //return G_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r15
callq 0x21d0
movq %rax, 0x20(%rsp)
leaq 0x80(%rsp), %r14
movq %r14, %rdi
movl %ebp, 0xc(%rsp)
movl %ebp, %esi
movl $0xa, %edx
callq 0x37d6
leaq 0x13007(%rip), %rdi     # 0x1a4e8
movq %r14, %rsi
callq 0xd7e4
movq (%r14), %rdi
testq %rdi, %rdi
je 0x7501
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq %r15, 0x28(%rsp)
movq %rbx, %rdi
movl 0xc(%rsp), %esi
callq 0x7e34
cmpq $0x0, 0x12f66(%rip)     # 0x1a480
je 0x7792
movl $0x0, 0x8(%rsp)
movl $0xf4240, %ebx          # imm = 0xF4240
movq 0x12f3c(%rip), %rsi     # 0x1a470
movups 0x20(%rsi), %xmm0
movaps %xmm0, 0x10(%rsp)
leaq 0x12f14(%rip), %rdi     # 0x1a458
callq 0xd824
leaq 0x10(%rsp), %rdi
leaq 0x12eeb(%rip), %rsi     # 0x1a440
callq 0x8174
testb %al, %al
je 0x756b
incl 0x12c64(%rip)           # 0x1a1c8
decl %ebx
jmp 0x777e
cmpq $0x0, 0x18(%rsp)
je 0x777e
leaq 0x12f0a(%rip), %rdi     # 0x1a488
leaq 0x10(%rsp), %rsi
callq 0xd860
cmpq %rdx, %rax
je 0x777e
movq %rax, %r14
movq %rdx, %r12
movl %ebx, %r13d
leaq 0x30(%r14), %rsi
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
callq 0x6314
movl 0x48(%r14), %eax
movl %eax, 0x98(%rsp)
movl 0x60(%r14), %eax
leaq 0xa0(%rsp), %rcx
movl %eax, 0x10(%rcx)
movups 0x50(%r14), %xmm0
movups %xmm0, (%rcx)
movq %rbx, %rdi
callq 0x8223
testb %al, %al
je 0x75f0
incl 0x12bde(%rip)           # 0x1a1c0
decl %r13d
movb $0x1, %r15b
movl %r13d, %ebx
jmp 0x7745
movq 0x18(%rsp), %rax
leaq (%rax,%rax,2), %rsi
shlq $0x4, %rsi
leaq 0x12b64(%rip), %rax     # 0x1a168
addq (%rax), %rsi
leaq 0x68(%rsp), %rdi
callq 0x405e
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x8416
movl $0xf4240, %ebp          # imm = 0xF4240
subl %r13d, %ebp
movslq %ebp, %rax
imulq $0x51eb851f, %rax, %rcx # imm = 0x51EB851F
movq %rcx, %rdx
shrq $0x3f, %rdx
sarq $0x25, %rcx
addl %edx, %ecx
imull $0x64, %ecx, %ecx
subl %ecx, %eax
cmpl $0x21, %eax
jne 0x76a4
movl $0xb, %edx
movq 0x1297b(%rip), %rdi     # 0x19fd8
leaq 0xbb53(%rip), %rsi      # 0x131b7
callq 0x21a0
movq 0x12968(%rip), %rdi     # 0x19fd8
leaq 0x50(%rsp), %rsi
callq 0x121c5
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movl 0x12b22(%rip), %eax     # 0x1a1cc
incl %eax
movl %eax, 0x12b1a(%rip)     # 0x1a1cc
xorl %ebx, %ebx
movb $0x1, %r15b
cmpl $0x5dc, %eax            # imm = 0x5DC
je 0x7717
leaq 0x30(%rsp), %rdi
movl 0xc(%rsp), %esi
callq 0x8850
movq 0x30(%rsp), %rax
cmpl $0x0, 0x8(%rax)
je 0x7717
leaq 0x30(%rsp), %rdi
callq 0x909c
leaq 0x30(%rsp), %rdi
movl 0xc(%rsp), %edx
leaq 0x12ae3(%rip), %rcx     # 0x1a1d4
callq 0x9161
leaq 0x30(%rsp), %rdi
callq 0x9823
leaq 0x30(%rsp), %rdi
callq 0x9997
decl %r13d
xorl %r15d, %r15d
movl %ebp, 0x8(%rsp)
movl %r13d, %ebx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x772e
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7745
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x7762
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
testb %r15b, %r15b
je 0x777e
movq %r14, %rdi
callq 0x2100
movq %rax, %r14
movl %ebx, %r13d
cmpq %r12, %rax
jne 0x759a
cmpq $0x0, 0x12cfa(%rip)     # 0x1a480
je 0x779f
testl %ebx, %ebx
jg 0x752d
jmp 0x779f
movl $0xf4240, %ebx          # imm = 0xF4240
movl $0x0, 0x8(%rsp)
movl %ebx, %ebp
movq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x9aab
movq %r14, %rdi
callq 0x11295
movq %r14, %rdi
callq 0x9b67
movq 0x12813(%rip), %rdi     # 0x19fd8
leaq 0xb9f7(%rip), %rsi      # 0x131c3
movl $0x22, %edx
callq 0x21a0
movl $0xf4240, %esi          # imm = 0xF4240
subl %ebp, %esi
movq 0x127f4(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x127be(%rip), %rdi     # 0x19fd8
leaq 0xb9c5(%rip), %rsi      # 0x131e6
movl $0x15, %edx
callq 0x21a0
movl 0x12993(%rip), %esi     # 0x1a1c4
movq 0x127a0(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x1276a(%rip), %rdi     # 0x19fd8
leaq 0xb987(%rip), %rsi      # 0x131fc
movl $0x24, %edx
callq 0x21a0
movl 0x1293b(%rip), %esi     # 0x1a1c0
movq 0x1274c(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x12716(%rip), %rdi     # 0x19fd8
leaq 0xb958(%rip), %rsi      # 0x13221
movl $0x1f, %edx
callq 0x21a0
movl 0x128ef(%rip), %esi     # 0x1a1c8
movq 0x126f8(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x126c2(%rip), %rdi     # 0x19fd8
leaq 0xb924(%rip), %rsi      # 0x13241
movl $0x12, %edx
callq 0x21a0
movl 0x1289f(%rip), %esi     # 0x1a1cc
movq 0x126a4(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x1266e(%rip), %rdi     # 0x19fd8
leaq 0xb8e3(%rip), %rsi      # 0x13254
movl $0x1f, %edx
callq 0x21a0
movl 0x1282b(%rip), %esi     # 0x1a1ac
movq 0x12650(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x1261a(%rip), %rdi     # 0x19fd8
leaq 0xb8af(%rip), %rsi      # 0x13274
movl $0x1b, %edx
callq 0x21a0
movl 0x127db(%rip), %esi     # 0x1a1b0
movq 0x125fc(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x125c6(%rip), %rdi     # 0x19fd8
leaq 0xb877(%rip), %rsi      # 0x13290
movl $0x1b, %edx
callq 0x21a0
movl 0x1278b(%rip), %esi     # 0x1a1b4
movq 0x125a8(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x12572(%rip), %rdi     # 0x19fd8
leaq 0xb83f(%rip), %rsi      # 0x132ac
movl $0x19, %edx
callq 0x21a0
movl 0x1273b(%rip), %esi     # 0x1a1b8
movq 0x12554(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x1251e(%rip), %rdi     # 0x19fd8
leaq 0xb805(%rip), %rsi      # 0x132c6
movl $0x18, %edx
callq 0x21a0
movl 0x126eb(%rip), %esi     # 0x1a1bc
movq 0x12500(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x124ca(%rip), %rdi     # 0x19fd8
leaq 0xb7ca(%rip), %rsi      # 0x132df
movl $0xb, %edx
callq 0x21a0
movq 0x127e2(%rip), %rsi     # 0x1a308
movq 0x124ab(%rip), %rdi     # 0x19fd8
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x12475(%rip), %rdi     # 0x19fd8
leaq 0xb781(%rip), %rsi      # 0x132eb
movl $0xb, %edx
callq 0x21a0
movq 0x12755(%rip), %rsi     # 0x1a2d0
movq 0x12456(%rip), %rdi     # 0x19fd8
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x12420(%rip), %rdi     # 0x19fd8
leaq 0xb738(%rip), %rsi      # 0x132f7
movl $0x1a, %edx
callq 0x21a0
movl 0x12601(%rip), %esi     # 0x1a1d0
movq 0x12402(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x123cc(%rip), %rdi     # 0x19fd8
leaq 0xb6ff(%rip), %rsi      # 0x13312
movl $0x22, %edx
callq 0x21a0
movl 0x125b1(%rip), %esi     # 0x1a1d4
movq 0x123ae(%rip), %rdi     # 0x19fd8
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq 0x12378(%rip), %rdi     # 0x19fd8
leaq 0xb6ce(%rip), %rsi      # 0x13335
movl $0xf, %edx
callq 0x21a0
movq 0x12360(%rip), %rdi     # 0x19fd8
movl 0x8(%rsp), %esi
callq 0x2230
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
testl %ebp, %ebp
jne 0x7d1f
movq 0x12322(%rip), %rbx     # 0x19fd8
leaq 0xb688(%rip), %rsi      # 0x13345
movl $0x27, %edx
movq %rbx, %rdi
callq 0x21a0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq 0x122f0(%rip), %rdi     # 0x19fd8
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
callq 0x21d0
movq %rax, %rbx
movq 0x122aa(%rip), %rdi     # 0x19fd8
leaq 0xb638(%rip), %rsi      # 0x1336d
movl $0x1a, %edx
callq 0x21a0
subq 0x20(%rsp), %rbx
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
movq %rbx, %rax
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x12, %rdx
addq %rdx, %rsi
movq 0x1226f(%rip), %rdi     # 0x19fd8
callq 0x2150
movq %rax, %rbx
leaq 0xb610(%rip), %rsi      # 0x13388
movl $0xe, %edx
movq %rax, %rdi
callq 0x21a0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20f0
movq %r14, %rax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x7dd1
jmp 0x7dd1
movq %rax, %rbx
jmp 0x7df8
jmp 0x7dcc
movq %rax, %rbx
jmp 0x7e0f
movq %rax, %rbx
movq %r14, %rdi
callq 0x3106
jmp 0x7e2c
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x7df8
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7e0f
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x7e2c
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2180
movq %rbx, %rdi
callq 0x2240