// File: marxn[P]pupp/3rdparty/gmp/mpn/toom63_mul.c
// Function: _gmpn_toom63_mul
void
mpn_toom63_mul (mp_ptr pp,
		mp_srcptr ap, mp_size_t an,
		mp_srcptr bp, mp_size_t bn, mp_ptr scratch)
{
  mp_size_t n, s, t;
  mp_limb_t cy;
  int sign;

  /***************************** decomposition *******************************/
#define a5  (ap + 5 * n)
#define b0  (bp + 0 * n)
#define b1  (bp + 1 * n)
#define b2  (bp + 2 * n)

  ASSERT (an >= bn);
  n = 1 + (an >= 2 * bn ? (an - 1) / (size_t) 6 : (bn - 1) / (size_t) 3);

  s = an - 5 * n;
  t = bn - 2 * n;

  ASSERT (0 < s && s <= n);
  ASSERT (0 < t && t <= n);
  /* WARNING! it assumes s+t>=n */
  ASSERT ( s + t >= n );
  ASSERT ( s + t > 4);
  /* WARNING! it assumes n>1 */
  ASSERT ( n > 2);

#define   r8    pp				/* 2n   */
#define   r7    scratch				/* 3n+1 */
#define   r5    (pp + 3*n)			/* 3n+1 */
#define   v0    (pp + 3*n)			/* n+1 */
#define   v1    (pp + 4*n+1)			/* n+1 */
#define   v2    (pp + 5*n+2)			/* n+1 */
#define   v3    (pp + 6*n+3)			/* n+1 */
#define   r3    (scratch + 3 * n + 1)		/* 3n+1 */
#define   r1    (pp + 7*n)			/* s+t <= 2*n */
#define   ws    (scratch + 6 * n + 2)		/* ??? */

  /* Alloc also 3n+1 limbs for ws... mpn_toom_interpolate_8pts may
     need all of them, when DO_mpn_sublsh_n usea a scratch  */
/*   if (scratch == NULL) scratch = TMP_SALLOC_LIMBS (9 * n + 3); */

  /********************** evaluation and recursive calls *********************/
  /* $\pm4$ */
  sign = mpn_toom_eval_pm2exp (v2, v0, 5, ap, n, s, 2, pp);
  pp[n] = mpn_lshift (pp, b1, n, 2); /* 4b1 */
  /* FIXME: use addlsh */
  v3[t] = mpn_lshift (v3, b2, t, 4);/* 16b2 */
  if ( n == t )
    v3[n]+= mpn_add_n (v3, v3, b0, n); /* 16b2+b0 */
  else
    v3[n] = mpn_add (v3, b0, n, v3, t+1); /* 16b2+b0 */
  sign ^= abs_sub_add_n (v1, v3, pp, n + 1);
  TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-4)*B(-4) */
  TOOM_63_MUL_N_REC(r3, v2, v3, n + 1, ws); /* A(+4)*B(+4) */
  mpn_toom_couple_handling (r3, 2*n+1, pp, sign, n, 2, 4);

  /* $\pm1$ */
  sign = mpn_toom_eval_pm1 (v2, v0, 5, ap, n, s,    pp);
  /* Compute bs1 and bsm1. Code taken from toom33 */
  cy = mpn_add (ws, b0, n, b2, t);
#if HAVE_NATIVE_mpn_add_n_sub_n
  if (cy == 0 && mpn_cmp (ws, b1, n) < 0)
    {
      cy = mpn_add_n_sub_n (v3, v1, b1, ws, n);
      v3[n] = cy >> 1;
      v1[n] = 0;
      sign = ~sign;
    }
  else
    {
      mp_limb_t cy2;
      cy2 = mpn_add_n_sub_n (v3, v1, ws, b1, n);
      v3[n] = cy + (cy2 >> 1);
      v1[n] = cy - (cy2 & 1);
    }
#else
  v3[n] = cy + mpn_add_n (v3, ws, b1, n);
  if (cy == 0 && mpn_cmp (ws, b1, n) < 0)
    {
      mpn_sub_n (v1, b1, ws, n);
      v1[n] = 0;
      sign = ~sign;
    }
  else
    {
      cy -= mpn_sub_n (v1, ws, b1, n);
      v1[n] = cy;
    }
#endif
  TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-1)*B(-1) */
  TOOM_63_MUL_N_REC(r7, v2, v3, n + 1, ws); /* A(1)*B(1) */
  mpn_toom_couple_handling (r7, 2*n+1, pp, sign, n, 0, 0);

  /* $\pm2$ */
  sign = mpn_toom_eval_pm2 (v2, v0, 5, ap, n, s, pp);
  pp[n] = mpn_lshift (pp, b1, n, 1); /* 2b1 */
  /* FIXME: use addlsh or addlsh2 */
  v3[t] = mpn_lshift (v3, b2, t, 2);/* 4b2 */
  if ( n == t )
    v3[n]+= mpn_add_n (v3, v3, b0, n); /* 4b2+b0 */
  else
    v3[n] = mpn_add (v3, b0, n, v3, t+1); /* 4b2+b0 */
  sign ^= abs_sub_add_n (v1, v3, pp, n + 1);
  TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-2)*B(-2) */
  TOOM_63_MUL_N_REC(r5, v2, v3, n + 1, ws); /* A(+2)*B(+2) */
  mpn_toom_couple_handling (r5, 2*n+1, pp, sign, n, 1, 2);

  /* A(0)*B(0) */
  TOOM_63_MUL_N_REC(pp, ap, bp, n, ws);

  /* Infinity */
  if (s > t) {
    TOOM_63_MUL_REC(r1, a5, s, b2, t, ws);
  } else {
    TOOM_63_MUL_REC(r1, b2, t, a5, s, ws);
  };

  mpn_toom_interpolate_8pts (pp, n, r3, r7, s + t, ws);

#undef a5
#undef b0
#undef b1
#undef b2
#undef r1
#undef r3
#undef r5
#undef v0
#undef v1
#undef v2
#undef v3
#undef r7
#undef r8
#undef ws
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
jmp 0x41ea5
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
shlq %rcx
cmpq %rcx, %rax
jl 0x41ecd
movq -0x18(%rbp), %rax
subq $0x1, %rax
movl $0x6, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, -0x60(%rbp)
jmp 0x41ee3
movq -0x28(%rbp), %rax
subq $0x1, %rax
movl $0x3, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
imulq $0x5, -0x38(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
shlq %rcx
subq %rcx, %rax
movq %rax, -0x48(%rbp)
jmp 0x41f13
jmp 0x41f15
jmp 0x41f17
jmp 0x41f19
jmp 0x41f1b
jmp 0x41f1d
jmp 0x41f1f
jmp 0x41f21
jmp 0x41f23
movq -0x8(%rbp), %rdi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq -0x8(%rbp), %rax
movl $0x5, %edx
movl $0x2, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x4a270
movl %eax, -0x54(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
movl $0x2, %ecx
callq 0x37320
movq %rax, %rdx
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x4, %ecx
callq 0x37320
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x48(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
movq -0x38(%rbp), %rax
cmpq -0x48(%rbp), %rax
jne 0x42062
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x8(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x18, %rsi
movq -0x20(%rbp), %rdx
imulq $0x0, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x38(%rbp), %rcx
callq 0x36c80
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
addq 0x18(%rax,%rcx,8), %rdx
movq %rdx, 0x18(%rax,%rcx,8)
jmp 0x420c7
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x20(%rbp), %rsi
imulq $0x0, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
movq -0x8(%rbp), %rcx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
addq $0x18, %rcx
movq -0x48(%rbp), %r8
addq $0x1, %r8
callq 0x36b60
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x8(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x18, %rsi
movq -0x8(%rbp), %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x42810
xorl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x8, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
jmp 0x42143
movq -0x30(%rbp), %rdi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x8(%rbp), %rsi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x8(%rbp), %rdx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x18, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x30(%rbp), %rdi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x38(%rbp), %rsi
shlq %rsi
addq $0x1, %rsi
movq -0x8(%rbp), %rdx
movl -0x54(%rbp), %ecx
movq -0x38(%rbp), %r8
movl $0x2, %r9d
movl $0x4, (%rsp)
callq 0x48bc0
movq -0x8(%rbp), %rdi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq -0x8(%rbp), %rax
movl $0x5, %edx
movq %rax, (%rsp)
callq 0x49d70
movl %eax, -0x54(%rbp)
movq -0x30(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x20(%rbp), %rsi
imulq $0x0, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x48(%rbp), %r8
callq 0x36b60
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x30(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x38(%rbp), %rcx
callq 0x36c80
movq -0x68(%rbp), %rdx
addq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
cmpq $0x0, -0x50(%rbp)
jne 0x42372
movq -0x30(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
callq 0x3b060
cmpl $0x0, %eax
jge 0x42372
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x30(%rbp), %rdx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x10, %rdx
movq -0x38(%rbp), %rcx
callq 0x36fe0
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rcx
shlq $0x2, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq $0x0, 0x8(%rax,%rcx,8)
movl -0x54(%rbp), %eax
xorl $-0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x423e7
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x30(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x38(%rbp), %rcx
callq 0x36fe0
movq %rax, %rcx
movq -0x50(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdx
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rcx
shlq $0x2, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq %rdx, 0x8(%rax,%rcx,8)
jmp 0x423e9
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x8, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
jmp 0x42423
movq -0x30(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x8(%rbp), %rdx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x18, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
shlq %rsi
addq $0x1, %rsi
movq -0x8(%rbp), %rdx
movl -0x54(%rbp), %ecx
movq -0x38(%rbp), %r8
xorl %r9d, %r9d
movl $0x0, (%rsp)
callq 0x48bc0
movq -0x8(%rbp), %rdi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq -0x8(%rbp), %rax
movl $0x5, %edx
movq %rax, (%rsp)
callq 0x49f90
movl %eax, -0x54(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq $0x0, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
movl $0x1, %ecx
callq 0x37320
movq %rax, %rdx
movq -0x8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x2, %ecx
callq 0x37320
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x48(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
movq -0x38(%rbp), %rax
cmpq -0x48(%rbp), %rax
jne 0x425bc
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x8(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x18, %rsi
movq -0x20(%rbp), %rdx
imulq $0x0, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x38(%rbp), %rcx
callq 0x36c80
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
addq 0x18(%rax,%rcx,8), %rdx
movq %rdx, 0x18(%rax,%rcx,8)
jmp 0x42621
movq -0x8(%rbp), %rdi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x20(%rbp), %rsi
imulq $0x0, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x38(%rbp), %rdx
movq -0x8(%rbp), %rcx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
addq $0x18, %rcx
movq -0x48(%rbp), %r8
addq $0x1, %r8
callq 0x36b60
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0x6, -0x38(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x8(%rbp), %rsi
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x18, %rsi
movq -0x8(%rbp), %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x42810
xorl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x38(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x8, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
jmp 0x4269d
movq -0x8(%rbp), %rdi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x8(%rbp), %rdx
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x18, %rdx
movq -0x38(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x8(%rbp), %rdi
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x38(%rbp), %rsi
shlq %rsi
addq $0x1, %rsi
movq -0x8(%rbp), %rdx
movl -0x54(%rbp), %ecx
movq -0x38(%rbp), %r8
movl $0x1, %r9d
movl $0x2, (%rsp)
callq 0x48bc0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x39000
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
jle 0x4277c
jmp 0x4273b
movq -0x8(%rbp), %rdi
imulq $0x7, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x48(%rbp), %r8
callq 0x37f00
jmp 0x427bf
jmp 0x4277e
movq -0x8(%rbp), %rdi
imulq $0x7, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x38(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movq -0x10(%rbp), %rcx
imulq $0x5, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x40(%rbp), %r8
callq 0x37f00
jmp 0x427bf
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
imulq $0x3, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
addq $0x8, %rdx
movq -0x30(%rbp), %rcx
movq -0x40(%rbp), %r8
addq -0x48(%rbp), %r8
movq -0x30(%rbp), %r9
imulq $0x6, -0x38(%rbp), %rax
shlq $0x3, %rax
addq %rax, %r9
addq $0x10, %r9
callq 0x4b930
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)