// File: marxn[P]pupp/3rdparty/gmp/mpn/sbpi1_div_q.c
// Function: _gmpn_sbpi1_div_q
mp_limb_t
mpn_sbpi1_div_q (mp_ptr qp,
		 mp_ptr np, mp_size_t nn,
		 mp_srcptr dp, mp_size_t dn,
		 mp_limb_t dinv)
{
  mp_limb_t qh;
  mp_size_t qn, i;
  mp_limb_t n1, n0;
  mp_limb_t d1, d0;
  mp_limb_t cy, cy1;
  mp_limb_t q;
  mp_limb_t flag;

  mp_size_t dn_orig = dn;
  mp_srcptr dp_orig = dp;
  mp_ptr np_orig = np;

  ASSERT (dn > 2);
  ASSERT (nn >= dn);
  ASSERT ((dp[dn-1] & GMP_NUMB_HIGHBIT) != 0);

  np += nn;

  qn = nn - dn;
  if (qn + 1 < dn)
    {
      dp += dn - (qn + 1);
      dn = qn + 1;
    }

  qh = mpn_cmp (np - dn, dp, dn) >= 0;
  if (qh != 0)
    mpn_sub_n (np - dn, np - dn, dp, dn);

  qp += qn;

  dn -= 2;			/* offset dn by 2 for main division loops,
				   saving two iterations in mpn_submul_1.  */
  d1 = dp[dn + 1];
  d0 = dp[dn + 0];

  np -= 2;

  n1 = np[1];

  for (i = qn - (dn + 2); i >= 0; i--)
    {
      np--;
      if (UNLIKELY (n1 == d1) && np[1] == d0)
	{
	  q = GMP_NUMB_MASK;
	  mpn_submul_1 (np - dn, dp, dn + 2, q);
	  n1 = np[1];		/* update n1, last loop's value will now be invalid */
	}
      else
	{
	  udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv);

	  cy = mpn_submul_1 (np - dn, dp, dn, q);

	  cy1 = n0 < cy;
	  n0 = (n0 - cy) & GMP_NUMB_MASK;
	  cy = n1 < cy1;
	  n1 -= cy1;
	  np[0] = n0;

	  if (UNLIKELY (cy != 0))
	    {
	      n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1);
	      q--;
	    }
	}

      *--qp = q;
    }

  flag = ~CNST_LIMB(0);

  if (dn >= 0)
    {
      for (i = dn; i > 0; i--)
	{
	  np--;
	  if (UNLIKELY (n1 >= (d1 & flag)))
	    {
	      q = GMP_NUMB_MASK;
	      cy = mpn_submul_1 (np - dn, dp, dn + 2, q);

	      if (UNLIKELY (n1 != cy))
		{
		  if (n1 < (cy & flag))
		    {
		      q--;
		      mpn_add_n (np - dn, np - dn, dp, dn + 2);
		    }
		  else
		    flag = 0;
		}
	      n1 = np[1];
	    }
	  else
	    {
	      udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv);

	      cy = mpn_submul_1 (np - dn, dp, dn, q);

	      cy1 = n0 < cy;
	      n0 = (n0 - cy) & GMP_NUMB_MASK;
	      cy = n1 < cy1;
	      n1 -= cy1;
	      np[0] = n0;

	      if (UNLIKELY (cy != 0))
		{
		  n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1);
		  q--;
		}
	    }

	  *--qp = q;

	  /* Truncate operands.  */
	  dn--;
	  dp++;
	}

      np--;
      if (UNLIKELY (n1 >= (d1 & flag)))
	{
	  q = GMP_NUMB_MASK;
	  cy = mpn_submul_1 (np, dp, 2, q);

	  if (UNLIKELY (n1 != cy))
	    {
	      if (n1 < (cy & flag))
		{
		  q--;
		  add_ssaaaa (np[1], np[0], np[1], np[0], dp[1], dp[0]);
		}
	      else
		flag = 0;
	    }
	  n1 = np[1];
	}
      else
	{
	  udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv);

	  np[0] = n0;
	  np[1] = n1;
	}

      *--qp = q;
    }
  ASSERT_ALWAYS (np[1] == n1);
  np += 2;


  dn = dn_orig;
  if (UNLIKELY (n1 < (dn & flag)))
    {
      mp_limb_t q, x;

      /* The quotient may be too large if the remainder is small.  Recompute
	 for above ignored operand parts, until the remainder spills.

	 FIXME: The quality of this code isn't the same as the code above.
	 1. We don't compute things in an optimal order, high-to-low, in order
	    to terminate as quickly as possible.
	 2. We mess with pointers and sizes, adding and subtracting and
	    adjusting to get things right.  It surely could be streamlined.
	 3. The only termination criteria are that we determine that the
	    quotient needs to be adjusted, or that we have recomputed
	    everything.  We should stop when the remainder is so large
	    that no additional subtracting could make it spill.
	 4. If nothing else, we should not do two loops of submul_1 over the
	    data, instead handle both the triangularization and chopping at
	    once.  */

      x = n1;

      if (dn > 2)
	{
	  /* Compensate for triangularization.  */
	  mp_limb_t y;

	  dp = dp_orig;
	  if (qn + 1 < dn)
	    {
	      dp += dn - (qn + 1);
	      dn = qn + 1;
	    }

	  y = np[-2];

	  for (i = dn - 3; i >= 0; i--)
	    {
	      q = qp[i];
	      cy = mpn_submul_1 (np - (dn - i), dp, dn - i - 2, q);

	      if (y < cy)
		{
		  if (x == 0)
		    {
		      cy = mpn_sub_1 (qp, qp, qn, 1);
		      ASSERT_ALWAYS (cy == 0);
		      return qh - cy;
		    }
		  x--;
		}
	      y -= cy;
	    }
	  np[-2] = y;
	}

      dn = dn_orig;
      if (qn + 1 < dn)
	{
	  /* Compensate for ignored dividend and divisor tails.  */

	  dp = dp_orig;
	  np = np_orig;

	  if (qh != 0)
	    {
	      cy = mpn_sub_n (np + qn, np + qn, dp, dn - (qn + 1));
	      if (cy != 0)
		{
		  if (x == 0)
		    {
		      if (qn != 0)
			cy = mpn_sub_1 (qp, qp, qn, 1);
		      return qh - cy;
		    }
		  x--;
		}
	    }

	  if (qn == 0)
	    return qh;

	  for (i = dn - qn - 2; i >= 0; i--)
	    {
	      cy = mpn_submul_1 (np + i, qp, qn, dp[i]);
	      cy = mpn_sub_1 (np + qn + i, np + qn + i, dn - qn - i - 1, cy);
	      if (cy != 0)
		{
		  if (x == 0)
		    {
		      cy = mpn_sub_1 (qp, qp, qn, 1);
		      return qh;
		    }
		  x--;
		}
	    }
	}
    }

  return qh;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
jmp 0x4f4b6
jmp 0x4f4b8
jmp 0x4f4ba
jmp 0x4f4bc
jmp 0x4f4be
movq -0x20(%rbp), %rax
shlq $0x3, %rax
addq -0x18(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
subq -0x30(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
cmpq -0x30(%rbp), %rax
jge 0x4f50f
movq -0x30(%rbp), %rax
movq -0x48(%rbp), %rcx
addq $0x1, %rcx
subq %rcx, %rax
shlq $0x3, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x3b060
cmpl $0x0, %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0x4f574
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
callq 0x36fe0
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq -0x10(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x30(%rbp), %rax
subq $0x2, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq %rax, -0x68(%rbp)
movq -0x28(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rax
addq $-0x10, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x48(%rbp), %rax
movq -0x30(%rbp), %rcx
addq $0x2, %rcx
subq %rcx, %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jl 0x4f9c3
movq -0x18(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x18(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4f669
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x70(%rbp), %rax
jne 0x4f669
movq $-0x1, -0x88(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
addq $0x2, %rdx
movq -0x88(%rbp), %rcx
callq 0x56760
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x4f998
jmp 0x4f66b
movq -0x58(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, -0x240(%rbp)
mulq -0x240(%rbp)
movq %rax, -0xb0(%rbp)
movq %rdx, -0x88(%rbp)
movq -0x88(%rbp), %rcx
movq -0x58(%rbp), %rsi
movq -0xb0(%rbp), %rax
movq -0x18(%rbp), %rdx
movq 0x8(%rdx), %rdx
movq %rsi, -0x230(%rbp)
movq %rdx, -0x238(%rbp)
addq -0x238(%rbp), %rax
adcq -0x230(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0xb0(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
imulq -0x88(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x220(%rbp)
movq %rdx, -0x228(%rbp)
subq -0x228(%rbp), %rax
sbbq -0x220(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x70(%rbp), %rax
movq -0x88(%rbp), %rcx
movq %rcx, -0x218(%rbp)
mulq -0x218(%rbp)
movq %rax, -0xc0(%rbp)
movq %rdx, -0xb8(%rbp)
movq -0x58(%rbp), %rcx
movq -0xb8(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0xc0(%rbp), %rdx
movq %rsi, -0x208(%rbp)
movq %rdx, -0x210(%rbp)
subq -0x210(%rbp), %rax
sbbq -0x208(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xb0(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
addq -0x88(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0xc8(%rbp), %rsi
andq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0xc8(%rbp), %rdx
andq -0x70(%rbp), %rdx
movq %rsi, -0x1f8(%rbp)
movq %rdx, -0x200(%rbp)
addq -0x200(%rbp), %rax
adcq -0x1f8(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4f890
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
ja 0x4f848
movq -0x60(%rbp), %rax
cmpq -0x70(%rbp), %rax
jb 0x4f88e
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x248(%rbp)
movq %rdx, -0x250(%rbp)
subq -0x250(%rbp), %rax
sbbq -0x248(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
jmp 0x4f890
jmp 0x4f892
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x88(%rbp), %rcx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x78(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x80(%rbp)
movq -0x60(%rbp), %rax
subq -0x78(%rbp), %rax
andq $-0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x80(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x78(%rbp)
movq -0x80(%rbp), %rcx
movq -0x58(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x60(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x0, -0x78(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4f996
movq -0x68(%rbp), %rax
movq %rax, -0x258(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
addq $0x1, %rcx
callq 0x36c80
movq %rax, %rcx
movq -0x258(%rbp), %rax
addq %rcx, %rax
addq -0x58(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x88(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x4f998
movq -0x88(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, -0x10(%rbp)
movq %rcx, -0x8(%rax)
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x4f5dc
movq $-0x1, -0x90(%rbp)
cmpq $0x0, -0x30(%rbp)
jl 0x501e0
movq -0x30(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jle 0x4fe6f
movq -0x18(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x18(%rbp)
movq -0x58(%rbp), %rax
movq -0x68(%rbp), %rcx
andq -0x90(%rbp), %rcx
cmpq %rcx, %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4fafd
movq $-0x1, -0x88(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
addq $0x2, %rdx
movq -0x88(%rbp), %rcx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x78(%rbp), %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4faec
movq -0x58(%rbp), %rax
movq -0x78(%rbp), %rcx
andq -0x90(%rbp), %rcx
cmpq %rcx, %rax
jae 0x4fadf
movq -0x88(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
addq $0x2, %rcx
callq 0x36c80
jmp 0x4faea
movq $0x0, -0x90(%rbp)
jmp 0x4faec
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x4fe2c
jmp 0x4faff
movq -0x58(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, -0x1e0(%rbp)
mulq -0x1e0(%rbp)
movq %rax, -0xd0(%rbp)
movq %rdx, -0x88(%rbp)
movq -0x88(%rbp), %rcx
movq -0x58(%rbp), %rsi
movq -0xd0(%rbp), %rax
movq -0x18(%rbp), %rdx
movq 0x8(%rdx), %rdx
movq %rsi, -0x1d0(%rbp)
movq %rdx, -0x1d8(%rbp)
addq -0x1d8(%rbp), %rax
adcq -0x1d0(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0xd0(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
imulq -0x88(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x1c0(%rbp)
movq %rdx, -0x1c8(%rbp)
subq -0x1c8(%rbp), %rax
sbbq -0x1c0(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x70(%rbp), %rax
movq -0x88(%rbp), %rcx
movq %rcx, -0x1b8(%rbp)
mulq -0x1b8(%rbp)
movq %rax, -0xe0(%rbp)
movq %rdx, -0xd8(%rbp)
movq -0x58(%rbp), %rcx
movq -0xd8(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0xe0(%rbp), %rdx
movq %rsi, -0x1a8(%rbp)
movq %rdx, -0x1b0(%rbp)
subq -0x1b0(%rbp), %rax
sbbq -0x1a8(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xd0(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
addq -0x88(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0xe8(%rbp), %rsi
andq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0xe8(%rbp), %rdx
andq -0x70(%rbp), %rdx
movq %rsi, -0x198(%rbp)
movq %rdx, -0x1a0(%rbp)
addq -0x1a0(%rbp), %rax
adcq -0x198(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4fd24
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
ja 0x4fcdc
movq -0x60(%rbp), %rax
cmpq -0x70(%rbp), %rax
jb 0x4fd22
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x1e8(%rbp)
movq %rdx, -0x1f0(%rbp)
subq -0x1f0(%rbp), %rax
sbbq -0x1e8(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
jmp 0x4fd24
jmp 0x4fd26
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x88(%rbp), %rcx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x78(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x80(%rbp)
movq -0x60(%rbp), %rax
subq -0x78(%rbp), %rax
andq $-0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x80(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x78(%rbp)
movq -0x80(%rbp), %rcx
movq -0x58(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x60(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x0, -0x78(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4fe2a
movq -0x68(%rbp), %rax
movq %rax, -0x260(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
xorl %eax, %eax
subq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
addq $0x1, %rcx
callq 0x36c80
movq %rax, %rcx
movq -0x260(%rbp), %rax
addq %rcx, %rax
addq -0x58(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x88(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x4fe2c
movq -0x88(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, -0x10(%rbp)
movq %rcx, -0x8(%rax)
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x28(%rbp)
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x4f9e1
movq -0x18(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x18(%rbp)
movq -0x58(%rbp), %rax
movq -0x68(%rbp), %rcx
andq -0x90(%rbp), %rcx
cmpq %rcx, %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4ff86
movq $-0x1, -0x88(%rbp)
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x88(%rbp), %rcx
movl $0x2, %edx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x78(%rbp), %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4ff75
movq -0x58(%rbp), %rax
movq -0x78(%rbp), %rcx
andq -0x90(%rbp), %rcx
cmpq %rcx, %rax
jae 0x4ff68
movq -0x88(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rdx
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rsi
movq -0x28(%rbp), %rcx
movq 0x8(%rcx), %r8
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq -0x28(%rbp), %rdi
movq (%rdi), %rdi
movq %r8, -0x188(%rbp)
movq %rdi, -0x190(%rbp)
addq -0x190(%rbp), %rcx
adcq -0x188(%rbp), %rsi
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
jmp 0x4ff73
movq $0x0, -0x90(%rbp)
jmp 0x4ff75
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x501c6
jmp 0x4ff88
movq -0x58(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, -0x170(%rbp)
mulq -0x170(%rbp)
movq %rax, -0xf0(%rbp)
movq %rdx, -0x88(%rbp)
movq -0x88(%rbp), %rcx
movq -0x58(%rbp), %rsi
movq -0xf0(%rbp), %rax
movq -0x18(%rbp), %rdx
movq 0x8(%rdx), %rdx
movq %rsi, -0x160(%rbp)
movq %rdx, -0x168(%rbp)
addq -0x168(%rbp), %rax
adcq -0x160(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0xf0(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
imulq -0x88(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x150(%rbp)
movq %rdx, -0x158(%rbp)
subq -0x158(%rbp), %rax
sbbq -0x150(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x70(%rbp), %rax
movq -0x88(%rbp), %rcx
movq %rcx, -0x148(%rbp)
mulq -0x148(%rbp)
movq %rax, -0x100(%rbp)
movq %rdx, -0xf8(%rbp)
movq -0x58(%rbp), %rcx
movq -0xf8(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0x100(%rbp), %rdx
movq %rsi, -0x138(%rbp)
movq %rdx, -0x140(%rbp)
subq -0x140(%rbp), %rax
sbbq -0x138(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xf0(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
addq -0x88(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0x108(%rbp), %rsi
andq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0x108(%rbp), %rdx
andq -0x70(%rbp), %rdx
movq %rsi, -0x128(%rbp)
movq %rdx, -0x130(%rbp)
addq -0x130(%rbp), %rax
adcq -0x128(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x501ad
movq -0x58(%rbp), %rax
cmpq -0x68(%rbp), %rax
ja 0x50165
movq -0x60(%rbp), %rax
cmpq -0x70(%rbp), %rax
jb 0x501ab
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x58(%rbp), %rcx
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rdx
movq %rsi, -0x178(%rbp)
movq %rdx, -0x180(%rbp)
subq -0x180(%rbp), %rax
sbbq -0x178(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
jmp 0x501ad
jmp 0x501af
movq -0x60(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x88(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, -0x10(%rbp)
movq %rcx, -0x8(%rax)
jmp 0x501e2
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x58(%rbp), %rax
sete %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x50223
leaq 0x138f1(%rip), %rdi     # 0x63b03
movl $0xc6, %esi
leaq 0x138f3(%rip), %rdx     # 0x63b11
callq 0x562c0
jmp 0x50225
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x58(%rbp), %rax
movq -0x30(%rbp), %rcx
andq -0x90(%rbp), %rcx
cmpq %rcx, %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x505d6
movq -0x58(%rbp), %rax
movq %rax, -0x118(%rbp)
cmpq $0x2, -0x30(%rbp)
jle 0x503fd
movq -0xa0(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
cmpq -0x30(%rbp), %rax
jge 0x502c3
movq -0x30(%rbp), %rax
movq -0x48(%rbp), %rcx
addq $0x1, %rcx
subq %rcx, %rax
shlq $0x3, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq -0x10(%rax), %rax
movq %rax, -0x120(%rbp)
movq -0x30(%rbp), %rax
subq $0x3, %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jl 0x503ee
movq -0x10(%rbp), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x110(%rbp)
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rcx
subq -0x50(%rbp), %rcx
xorl %eax, %eax
subq %rcx, %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
subq -0x50(%rbp), %rdx
subq $0x2, %rdx
movq -0x110(%rbp), %rcx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x120(%rbp), %rax
cmpq -0x78(%rbp), %rax
jae 0x503c8
cmpq $0x0, -0x118(%rbp)
jne 0x503b6
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x36e60
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
sete %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x503a3
leaq 0x13771(%rip), %rdi     # 0x63b03
movl $0xf9, %esi
leaq 0x1377f(%rip), %rdx     # 0x63b1d
callq 0x562c0
jmp 0x503a5
movq -0x40(%rbp), %rax
subq -0x78(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x505de
movq -0x118(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x118(%rbp)
movq -0x78(%rbp), %rcx
movq -0x120(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x120(%rbp)
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x502de
movq -0x120(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, -0x10(%rax)
movq -0x98(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
cmpq -0x30(%rbp), %rax
jge 0x505d4
movq -0xa0(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0x504cc
movq -0x18(%rbp), %rdi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x48(%rbp), %rax
addq $0x1, %rax
subq %rax, %rcx
callq 0x36fe0
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0x504ca
cmpq $0x0, -0x118(%rbp)
jne 0x504b8
cmpq $0x0, -0x48(%rbp)
je 0x504a7
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x36e60
movq %rax, -0x78(%rbp)
movq -0x40(%rbp), %rax
subq -0x78(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x505de
movq -0x118(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x118(%rbp)
jmp 0x504cc
cmpq $0x0, -0x48(%rbp)
jne 0x504e0
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x505de
movq -0x30(%rbp), %rax
subq -0x48(%rbp), %rax
subq $0x2, %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jl 0x505d2
movq -0x18(%rbp), %rdi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq -0x28(%rbp), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
callq 0x56760
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rdi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x30(%rbp), %rdx
subq -0x48(%rbp), %rdx
subq -0x50(%rbp), %rdx
subq $0x1, %rdx
movq -0x78(%rbp), %rcx
callq 0x36e60
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0x505bf
cmpq $0x0, -0x118(%rbp)
jne 0x505ad
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x36e60
movq %rax, -0x78(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x505de
movq -0x118(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x118(%rbp)
jmp 0x505c1
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x504f0
jmp 0x505d4
jmp 0x505d6
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
nopl (%rax,%rax)