// File: /workspace/github_cpp_makefile_star2_O2/marxn[P]pupp/3rdparty/gmp/mpn/toom_interpolate_16pts.c
// Function: _gmpn_toom_interpolate_16pts
void
mpn_toom_interpolate_16pts (mp_ptr pp, mp_ptr r1, mp_ptr r3, mp_ptr r5, mp_ptr r7,
			mp_size_t n, mp_size_t spt, int half, mp_ptr wsi)
{
  mp_limb_t cy;
  mp_size_t n3;
  mp_size_t n3p1;
  n3 = 3 * n;
  n3p1 = n3 + 1;

#define   r6    (pp + n3)			/* 3n+1 */
#define   r4    (pp + 7 * n)			/* 3n+1 */
#define   r2    (pp +11 * n)			/* 3n+1 */
#define   r0    (pp +15 * n)			/* s+t <= 2*n */

  ASSERT( spt <= 2 * n );
  /******************************* interpolation *****************************/
  if( half != 0) {
    cy = mpn_sub_n (r4, r4, r0, spt);
    MPN_DECR_U (r4 + spt, n3p1 - spt, cy);

    cy = DO_mpn_sublsh_n (r3, r0, spt, 14, wsi);
    MPN_DECR_U (r3 + spt, n3p1 - spt, cy);
    DO_mpn_subrsh(r6, n3p1, r0, spt, 2, wsi);

    cy = DO_mpn_sublsh_n (r2, r0, spt, 28, wsi);
    MPN_DECR_U (r2 + spt, n3p1 - spt, cy);
    DO_mpn_subrsh(r5, n3p1, r0, spt, 4, wsi);

    cy = DO_mpn_sublsh_n (r1 + BIT_CORRECTION, r0, spt, 42 - CORRECTION_BITS, wsi);
#if BIT_CORRECTION
    cy = mpn_sub_1 (r1 + spt + BIT_CORRECTION, r1 + spt + BIT_CORRECTION,
		    n3p1 - spt - BIT_CORRECTION, cy);
    ASSERT (BIT_CORRECTION > 0 || cy == 0);
    /* FIXME: assumes r7[n3p1] is writable (it is if r5 follows). */
    cy = r7[n3p1];
    r7[n3p1] = 0x80;
#else
    MPN_DECR_U (r1 + spt + BIT_CORRECTION, n3p1 - spt - BIT_CORRECTION, cy);
#endif
    DO_mpn_subrsh(r7, n3p1 + BIT_CORRECTION, r0, spt, 6, wsi);
#if BIT_CORRECTION
    /* FIXME: assumes r7[n3p1] is writable. */
    ASSERT ( BIT_CORRECTION > 0 || r7[n3p1] == 0x80 );
    r7[n3p1] = cy;
#endif
  };

  r5[n3] -= DO_mpn_sublsh_n (r5 + n, pp, 2 * n, 28, wsi);
  DO_mpn_subrsh(r2 + n, 2 * n + 1, pp, 2 * n, 4, wsi);

#if HAVE_NATIVE_mpn_add_n_sub_n
  mpn_add_n_sub_n (r2, r5, r5, r2, n3p1);
#else
  mpn_sub_n (wsi, r5, r2, n3p1); /* can be negative */
  ASSERT_NOCARRY(mpn_add_n (r2, r2, r5, n3p1));
  MP_PTR_SWAP(r5, wsi);
#endif

  r6[n3] -= DO_mpn_sublsh_n (r6 + n, pp, 2 * n, 14, wsi);
  DO_mpn_subrsh(r3 + n, 2 * n + 1, pp, 2 * n, 2, wsi);

#if HAVE_NATIVE_mpn_add_n_sub_n
  mpn_add_n_sub_n (r3, r6, r6, r3, n3p1);
#else
  ASSERT_NOCARRY(mpn_add_n (wsi, r3, r6, n3p1));
  mpn_sub_n (r6, r6, r3, n3p1); /* can be negative */
  MP_PTR_SWAP(r3, wsi);
#endif

  cy = DO_mpn_sublsh_n (r7 + n + BIT_CORRECTION, pp, 2 * n, 42 - CORRECTION_BITS, wsi);
#if BIT_CORRECTION
  MPN_DECR_U (r1 + n, 2 * n + 1, pp[0] >> 6);
  cy = DO_mpn_sublsh_n (r1 + n, pp + 1, 2 * n - 1, GMP_NUMB_BITS - 6, wsi);
  cy = mpn_sub_1(r1 + 3 * n - 1, r1 + 3 * n - 1, 2, cy);
  ASSERT ( BIT_CORRECTION > 0 || cy != 0 );
#else
  r7[n3] -= cy;
  DO_mpn_subrsh(r1 + n, 2 * n + 1, pp, 2 * n, 6, wsi);
#endif

#if HAVE_NATIVE_mpn_add_n_sub_n
  mpn_add_n_sub_n (r1, r7, r7, r1, n3p1);
#else
  mpn_sub_n (wsi, r7, r1, n3p1); /* can be negative */
  mpn_add_n (r1, r1, r7, n3p1);  /* if BIT_CORRECTION != 0, can give a carry. */
  MP_PTR_SWAP(r7, wsi);
#endif

  r4[n3] -= mpn_sub_n (r4+n, r4+n, pp, 2 * n);

#if AORSMUL_FASTER_2AORSLSH
  mpn_submul_1 (r5, r6, n3p1, 1028); /* can be negative */
#else
  DO_mpn_sublsh_n (r5, r6, n3p1, 2, wsi); /* can be negative */
  DO_mpn_sublsh_n (r5, r6, n3p1,10, wsi); /* can be negative */
#endif

  mpn_submul_1 (r7, r5, n3p1, 1300); /* can be negative */
#if AORSMUL_FASTER_3AORSLSH
  mpn_submul_1 (r7, r6, n3p1, 1052688); /* can be negative */
#else
  DO_mpn_sublsh_n (r7, r6, n3p1, 4, wsi); /* can be negative */
  DO_mpn_sublsh_n (r7, r6, n3p1,12, wsi); /* can be negative */
  DO_mpn_sublsh_n (r7, r6, n3p1,20, wsi); /* can be negative */
#endif
  mpn_divexact_by255x188513325(r7, r7, n3p1);

  mpn_submul_1 (r5, r7, n3p1, 12567555); /* can be negative */
  /* A division by 2835x64 follows. Warning: the operand can be negative! */
  mpn_divexact_by2835x64(r5, r5, n3p1);
  if ((r5[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-7))) != 0)
    r5[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-6));

#if AORSMUL_FASTER_AORS_AORSLSH
  mpn_submul_1 (r6, r7, n3p1, 4095); /* can be negative */
#else
  mpn_add_n (r6, r6, r7, n3p1); /* can give a carry */
  DO_mpn_sublsh_n (r6, r7, n3p1, 12, wsi); /* can be negative */
#endif
#if AORSMUL_FASTER_2AORSLSH
  mpn_addmul_1 (r6, r5, n3p1, 240); /* can be negative */
#else
  DO_mpn_addlsh_n (r6, r5, n3p1, 8, wsi); /* can give a carry */
  DO_mpn_sublsh_n (r6, r5, n3p1, 4, wsi); /* can be negative */
#endif
  /* A division by 255x4 follows. Warning: the operand can be negative! */
  mpn_divexact_by255x4(r6, r6, n3p1);
  if ((r6[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-3))) != 0)
    r6[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-2));

  ASSERT_NOCARRY(DO_mpn_sublsh_n (r3, r4, n3p1, 7, wsi));

  ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r4, n3p1, 13, wsi));
  ASSERT_NOCARRY(mpn_submul_1 (r2, r3, n3p1, 400));

  /* If GMP_NUMB_BITS < 42 next operations on r1 can give a carry!*/
  DO_mpn_sublsh_n (r1, r4, n3p1, 19, wsi);
  mpn_submul_1 (r1, r2, n3p1, 1428);
  mpn_submul_1 (r1, r3, n3p1, 112896);
  mpn_divexact_by255x182712915(r1, r1, n3p1);

  ASSERT_NOCARRY(mpn_submul_1 (r2, r1, n3p1, 15181425));
  mpn_divexact_by42525x16(r2, r2, n3p1);

#if AORSMUL_FASTER_AORS_2AORSLSH
  ASSERT_NOCARRY(mpn_submul_1 (r3, r1, n3p1, 3969));
#else
  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r1, n3p1));
  ASSERT_NOCARRY(DO_mpn_addlsh_n (r3, r1, n3p1, 7, wsi));
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r3, r1, n3p1, 12, wsi));
#endif
  ASSERT_NOCARRY(mpn_submul_1 (r3, r2, n3p1, 900));
  mpn_divexact_by9x16(r3, r3, n3p1);

  ASSERT_NOCARRY(mpn_sub_n (r4, r4, r1, n3p1));
  ASSERT_NOCARRY(mpn_sub_n (r4, r4, r3, n3p1));
  ASSERT_NOCARRY(mpn_sub_n (r4, r4, r2, n3p1));

  mpn_add_n (r6, r2, r6, n3p1);
  ASSERT_NOCARRY(mpn_rshift(r6, r6, n3p1, 1));
  ASSERT_NOCARRY(mpn_sub_n (r2, r2, r6, n3p1));

  mpn_sub_n (r5, r3, r5, n3p1);
  ASSERT_NOCARRY(mpn_rshift(r5, r5, n3p1, 1));
  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, n3p1));

  mpn_add_n (r7, r1, r7, n3p1);
  ASSERT_NOCARRY(mpn_rshift(r7, r7, n3p1, 1));
  ASSERT_NOCARRY(mpn_sub_n (r1, r1, r7, n3p1));

  /* last interpolation steps... */
  /* ... could be mixed with recomposition
	||H-r7|M-r7|L-r7|   ||H-r5|M-r5|L-r5|
  */

  /***************************** recomposition *******************************/
  /*
    pp[] prior to operations:
    |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|___||H r6|M r6|L r6|____|H_r8|L r8|pp

    summation scheme for remaining operations:
    |__16|n_15|n_14|n_13|n_12|n_11|n_10|n__9|n__8|n__7|n__6|n__5|n__4|n__3|n__2|n___|n___|pp
    |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|___||H r6|M r6|L r6|____|H_r8|L r8|pp
	||H r1|M r1|L r1|   ||H r3|M r3|L r3|   ||H_r5|M_r5|L_r5|   ||H r7|M r7|L r7|
  */

  cy = mpn_add_n (pp + n, pp + n, r7, n);
  cy = mpn_add_1 (pp + 2 * n, r7 + n, n, cy);
#if HAVE_NATIVE_mpn_add_nc
  cy = r7[n3] + mpn_add_nc(pp + n3, pp + n3, r7 + 2 * n, n, cy);
#else
  MPN_INCR_U (r7 + 2 * n, n + 1, cy);
  cy = r7[n3] + mpn_add_n (pp + n3, pp + n3, r7 + 2 * n, n);
#endif
  MPN_INCR_U (pp + 4 * n, 2 * n + 1, cy);

  pp[2 * n3]+= mpn_add_n (pp + 5 * n, pp + 5 * n, r5, n);
  cy = mpn_add_1 (pp + 2 * n3, r5 + n, n, pp[2 * n3]);
#if HAVE_NATIVE_mpn_add_nc
  cy = r5[n3] + mpn_add_nc(pp + 7 * n, pp + 7 * n, r5 + 2 * n, n, cy);
#else
  MPN_INCR_U (r5 + 2 * n, n + 1, cy);
  cy = r5[n3] + mpn_add_n (pp + 7 * n, pp + 7 * n, r5 + 2 * n, n);
#endif
  MPN_INCR_U (pp + 8 * n, 2 * n + 1, cy);

  pp[10 * n]+= mpn_add_n (pp + 9 * n, pp + 9 * n, r3, n);
  cy = mpn_add_1 (pp + 10 * n, r3 + n, n, pp[10 * n]);
#if HAVE_NATIVE_mpn_add_nc
  cy = r3[n3] + mpn_add_nc(pp +11 * n, pp +11 * n, r3 + 2 * n, n, cy);
#else
  MPN_INCR_U (r3 + 2 * n, n + 1, cy);
  cy = r3[n3] + mpn_add_n (pp +11 * n, pp +11 * n, r3 + 2 * n, n);
#endif
  MPN_INCR_U (pp +12 * n, 2 * n + 1, cy);

  pp[14 * n]+=mpn_add_n (pp +13 * n, pp +13 * n, r1, n);
  if ( half ) {
    cy = mpn_add_1 (pp + 14 * n, r1 + n, n, pp[14 * n]);
#if HAVE_NATIVE_mpn_add_nc
    if(LIKELY(spt > n)) {
      cy = r1[n3] + mpn_add_nc(pp + 15 * n, pp + 15 * n, r1 + 2 * n, n, cy);
      MPN_INCR_U (pp + 16 * n, spt - n, cy);
    } else {
      ASSERT_NOCARRY(mpn_add_nc(pp + 15 * n, pp + 15 * n, r1 + 2 * n, spt, cy));
    }
#else
    MPN_INCR_U (r1 + 2 * n, n + 1, cy);
    if(LIKELY(spt > n)) {
      cy = r1[n3] + mpn_add_n (pp + 15 * n, pp + 15 * n, r1 + 2 * n, n);
      MPN_INCR_U (pp + 16 * n, spt - n, cy);
    } else {
      ASSERT_NOCARRY(mpn_add_n (pp + 15 * n, pp + 15 * n, r1 + 2 * n, spt));
    }
#endif
  } else {
    ASSERT_NOCARRY(mpn_add_1 (pp + 14 * n, r1 + n, spt, pp[14 * n]));
  }

#undef   r0
#undef   r2
#undef   r4
#undef   r6
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %r9, %r13
movq %r8, 0x38(%rsp)
movq %rcx, %r12
movq %rdx, 0x48(%rsp)
movq %rsi, 0x40(%rsp)
movq %rdi, %r14
movq 0xe0(%rsp), %rbp
movl 0xd8(%rsp), %eax
movq 0xd0(%rsp), %rbx
leaq (%r9,%r9,2), %rcx
movq %rcx, 0x18(%rsp)
leaq (%r9,%r9,2), %rcx
incq %rcx
movq %rcx, 0x70(%rsp)
movl %eax, 0x64(%rsp)
testl %eax, %eax
movq %r12, 0x50(%rsp)
movq %rbp, 0x10(%rsp)
movq %rdi, 0x8(%rsp)
movq %r9, (%rsp)
je 0x246b4
imulq $0x38, (%rsp), %r13
addq 0x8(%rsp), %r13
imulq $0x78, (%rsp), %r12
movq 0x8(%rsp), %rax
leaq (%rax,%r12), %rbp
movq %r13, %rdi
movq %r13, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x17ed0
leaq (,%rbx,8), %rcx
addq %r13, %rcx
subq %rax, (%rcx)
jae 0x24508
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x244fd
pushq $0xe
popq %rcx
movq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq 0x10(%rsp), %r8
callq 0x24ec4
leaq (%r14,%rbx,8), %rcx
subq %rax, (%rcx)
jae 0x24537
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x2452c
movq 0x8(%rsp), %rax
leaq (%rax,%r12), %r14
addq $0x8, %r14
movq -0x8(%r14), %rax
shrq $0x2, %rax
movq 0x8(%rsp), %rcx
movq 0x18(%rsp), %rdx
leaq (%rcx,%rdx,8), %r12
movq %r12, %rcx
subq %rax, (%rcx)
jae 0x2456d
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24562
leaq -0x1(%rbx), %r15
pushq $0x3e
popq %rcx
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq 0x10(%rsp), %r8
callq 0x24ec4
leaq (%r12,%rbx,8), %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x2459f
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24594
imulq $0x58, (%rsp), %r12
addq 0x8(%rsp), %r12
pushq $0x1c
popq %rcx
movq %r12, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq 0x10(%rsp), %r8
callq 0x24ec4
leaq (%r12,%rbx,8), %rcx
movq 0x50(%rsp), %r12
subq %rax, (%rcx)
jae 0x245d8
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x245cd
movq -0x8(%r14), %rax
shrq $0x4, %rax
movq %r12, %rcx
subq %rax, (%rcx)
jae 0x245f3
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x245e8
pushq $0x3c
popq %rcx
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq 0x10(%rsp), %r8
callq 0x24ec4
leaq (%r12,%rbx,8), %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x24621
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24616
pushq $0x2a
popq %rcx
movq 0x40(%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq 0x10(%rsp), %r8
callq 0x24ec4
leaq (,%rbx,8), %rcx
addq %r13, %rcx
subq %rax, (%rcx)
jae 0x24657
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x2464c
movq -0x8(%r14), %rax
shrq $0x6, %rax
movq 0x38(%rsp), %r13
movq %r13, %rcx
subq %rax, (%rcx)
jae 0x24677
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x2466c
pushq $0x3a
popq %rcx
movq %r13, %rdi
movq %r14, %rsi
movq 0x8(%rsp), %r14
movq 0x10(%rsp), %rbp
movq %r15, %rdx
movq %rbp, %r8
callq 0x24ec4
leaq -0x8(,%rbx,8), %rcx
addq %r13, %rcx
movq (%rsp), %r13
subq %rax, (%rcx)
jae 0x246b4
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x246a9
movq %rbx, 0x68(%rsp)
leaq (%r12,%r13,8), %rdi
leaq (,%r13,2), %rdx
movq %rdx, 0x20(%rsp)
pushq $0x1c
popq %rcx
movq %rdi, 0x90(%rsp)
movq %r14, %rsi
movq %rbp, %r8
callq 0x24ec4
movq 0x18(%rsp), %rcx
subq %rax, (%r12,%rcx,8)
movq (%r14), %rax
shrq $0x4, %rax
imulq $0x58, %r13, %rbx
addq %r14, %rbx
movq %r12, %r15
leaq (%rbx,%r13,8), %r12
movq %r12, %rcx
subq %rax, (%rcx)
jae 0x24711
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24706
leaq 0x8(%r14), %rsi
movq %rsi, 0x30(%rsp)
leaq -0x1(,%r13,2), %rdx
movq %rdx, 0x28(%rsp)
pushq $0x3c
popq %rcx
movq %r12, %rdi
movq %rbp, %r8
callq 0x24ec4
movq %r13, %rcx
shlq $0x4, %rcx
movq %rcx, 0x78(%rsp)
addq %r12, %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x24758
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x2474d
movq 0x10(%rsp), %rdi
movq %r15, %rsi
movq %rbx, %rdx
movq 0x70(%rsp), %r12
movq %r12, %rcx
callq 0x17ed0
movq %rbx, %rdi
movq %rbx, 0x80(%rsp)
movq %rbx, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x17cf0
movq 0x18(%rsp), %rbx
leaq (%r14,%rbx,8), %r12
leaq (%r12,%r13,8), %rdi
pushq $0xe
popq %rcx
movq %r14, %rsi
movq 0x20(%rsp), %rdx
movq %r15, %r8
callq 0x24ec4
subq %rax, (%r12,%rbx,8)
movq (%r14), %rax
shrq $0x2, %rax
movq 0x48(%rsp), %r14
leaq (%r14,%r13,8), %r13
movq %r13, %rcx
subq %rax, (%rcx)
jae 0x247d0
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x247c5
pushq $0x3e
popq %rcx
movq %r13, %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq %r15, %r8
callq 0x24ec4
movq %r13, 0x88(%rsp)
movq 0x78(%rsp), %rcx
addq %r13, %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x2480c
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24801
movq %r15, %rdi
movq 0x70(%rsp), %r15
movq %r14, %rsi
movq %r12, 0x58(%rsp)
movq %r12, %rdx
movq %r15, %rcx
callq 0x17cf0
movq %r12, %rdi
movq %r12, %rsi
movq %r14, %rdx
movq %r15, %rcx
callq 0x17ed0
movq 0x38(%rsp), %rbp
movq (%rsp), %r12
leaq (,%r12,8), %rdi
addq %rbp, %rdi
pushq $0x2a
popq %rcx
movq 0x8(%rsp), %r13
movq %r13, %rsi
movq 0x20(%rsp), %rdx
movq %r14, %r8
callq 0x24ec4
subq %rax, (%rbp,%rbx,8)
movq (%r13), %rax
shrq $0x6, %rax
movq 0x40(%rsp), %rbx
leaq (%rbx,%r12,8), %r13
movq %r13, %rcx
subq %rax, (%rcx)
jae 0x2488d
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24882
pushq $0x3a
popq %rcx
movq %r13, %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq %r14, %r8
callq 0x24ec4
movq %r13, 0x28(%rsp)
movq 0x78(%rsp), %rcx
addq %r13, %rcx
addq $-0x8, %rcx
movq 0x10(%rsp), %r13
subq %rax, (%rcx)
jae 0x248cb
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x248c0
movq %r14, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0x17ed0
movq %rbx, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
movq %r15, %rcx
callq 0x17cf0
imulq $0x38, %r12, %rbp
movq 0x8(%rsp), %rdx
addq %rdx, %rbp
leaq (,%r12,8), %rdi
addq %rbp, %rdi
movq %rdi, %rsi
movq 0x20(%rsp), %rcx
callq 0x17ed0
movq %rbp, 0x30(%rsp)
movq 0x18(%rsp), %rcx
subq %rax, (%rbp,%rcx,8)
movl $0x404, %ecx            # imm = 0x404
movq %r13, %rdi
movq 0x58(%rsp), %rbx
movq %rbx, %rsi
movq %r15, %rdx
callq 0x29f90
movl $0x514, %ecx            # imm = 0x514
movq %r14, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x29f90
movl $0x101010, %ecx         # imm = 0x101010
movq %r14, %rdi
movq %rbx, %r12
movq %rbx, %rsi
movq %r15, %rdx
callq 0x29f90
movabsq $0xad91658ad, %rax      # imm = 0xAD91658AD
leaq 0x58295826(%rax), %rcx
movabsq $0x6db993a6864275b, %r8 # imm = 0x6DB993A6864275B
movq %r14, %rdi
movq %r14, %rsi
movq %r15, %rdx
xorl %r9d, %r9d
callq 0x28f98
movl $0xbfc403, %ecx         # imm = 0xBFC403
movq %r13, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x29f90
movabsq $-0x6c7338faac1c88e5, %r8 # imm = 0x938CC70553E3771B
pushq $0x6
popq %r9
movl $0xb13, %ecx            # imm = 0xB13
movq %r13, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x28f98
movq 0x18(%rsp), %rdx
movq (%r13,%rdx,8), %rax
movq %rax, %rcx
shrq $0x39, %rcx
je 0x249e6
movabsq $-0x400000000000000, %rcx # imm = 0xFC00000000000000
orq %rcx, %rax
movq %rax, (%r13,%rdx,8)
movl $0xfff, %ecx            # imm = 0xFFF
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x29f90
movl $0xf0, %ecx
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x29e80
movabsq $-0x101010101010101, %r8 # imm = 0xFEFEFEFEFEFEFEFF
pushq $0x2
popq %r9
movl $0xff, %ecx
movq %r12, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x28f98
movq 0x18(%rsp), %rdx
movq (%r12,%rdx,8), %rax
movq %rax, %rcx
shrq $0x3d, %rcx
je 0x24a50
movabsq $-0x4000000000000000, %rcx # imm = 0xC000000000000000
orq %rcx, %rax
movq %rax, (%r12,%rdx,8)
pushq $0x7
popq %rcx
movq 0x50(%rsp), %r14
movq %r14, %rdi
movq 0x30(%rsp), %rbp
movq %rbp, %rsi
movq %r15, %rdx
movq 0x38(%rsp), %r13
movq %r13, %r8
callq 0x24ec4
pushq $0xd
popq %rcx
movq 0x80(%rsp), %r12
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
movq %r13, %r8
callq 0x24ec4
movl $0x190, %ecx            # imm = 0x190
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x29f90
pushq $0x13
popq %rcx
movq 0x40(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
movq %r13, %r8
callq 0x24ec4
movl $0x594, %ecx            # imm = 0x594
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x29f90
movl $0x1b900, %ecx          # imm = 0x1B900
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x29f90
movabsq $0x1b649a076fc4cb25, %r8 # imm = 0x1B649A076FC4CB25
movq %rbx, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movabsq $0xad91658ad, %rcx      # imm = 0xAD91658AD
xorl %r9d, %r9d
callq 0x28f98
movl $0xe7a671, %ecx         # imm = 0xE7A671
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x29f90
movabsq $-0x184bf2bb60ceb3cb, %r8 # imm = 0xE7B40D449F314C35
pushq $0x4
popq %r13
movl $0xa61d, %ecx           # imm = 0xA61D
movq %r12, %rdi
movq %r12, %rsi
movq %r15, %rdx
movl %r13d, %r9d
callq 0x28f98
movl $0xf81, %ecx            # imm = 0xF81
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x29f90
movl $0x384, %ecx            # imm = 0x384
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x29f90
pushq $0x9
popq %rcx
movabsq $-0x71c71c71c71c71c7, %r8 # imm = 0x8E38E38E38E38E39
movq %r14, %rdi
movq %r14, %rsi
movq %r15, %rdx
movl %r13d, %r9d
callq 0x28f98
movq %rbp, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0x17ed0
movq %rbp, %rdi
movq %rbp, %rsi
movq %r14, %rdx
movq %r15, %rcx
callq 0x17ed0
movq %rbp, %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x17ed0
movq 0x58(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x17cf0
pushq $0x1
popq %rbp
movq %r13, %rdi
movq %r13, %rsi
movq %r15, %rdx
movl %ebp, %ecx
callq 0x2a0a0
movq %r12, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x17ed0
movq 0x10(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x17ed0
movq %r12, %rdi
movq %r12, %rsi
movq %r15, %rdx
movl %ebp, %ecx
callq 0x2a0a0
movq %r14, %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x17ed0
movq 0x48(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x17cf0
movq %r13, %rdi
movq %r13, %rsi
movq %r15, %rdx
movl %ebp, %ecx
callq 0x2a0a0
movq %rbx, %rdi
movq %rbx, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x17ed0
movq 0x8(%rsp), %r14
movq (%rsp), %rbp
leaq (%r14,%rbp,8), %rdi
movq %rdi, %rsi
movq %r13, %rdx
movq %rbp, %rcx
callq 0x17cf0
movq 0x20(%rsp), %rbx
leaq (%r14,%rbx,8), %rdi
movq 0x88(%rsp), %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0x29e1c
movq 0x18(%rsp), %rcx
movq (%r13,%rcx,8), %rcx
movq %rcx, 0x38(%rsp)
leaq (,%rbx,8), %rdx
addq %r13, %rdx
movq 0x58(%rsp), %rdi
movq %rdi, %rsi
movq %rbp, %rcx
movq %rax, %r8
callq 0x17cd0
addq 0x38(%rsp), %rax
movq %rbp, %rcx
shlq $0x5, %rcx
addq %r14, %rcx
addq %rax, (%rcx)
jae 0x24cdf
addq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24cd4
imulq $0x28, %rbp, %rdi
addq %r14, %rdi
movq %rdi, %rsi
movq %r12, %rdx
movq %rbp, %rcx
callq 0x17cf0
imulq $0x30, %rbp, %rcx
leaq (%r14,%rcx), %rdi
addq (%r14,%rcx), %rax
movq %rax, (%r14,%rcx)
leaq (%r12,%rbp,8), %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0x29e1c
movq 0x18(%rsp), %r13
movq (%r12,%r13,8), %r15
leaq (%r12,%rbx,8), %rdx
movq 0x30(%rsp), %rdi
movq %rdi, %rsi
movq %rbp, %rcx
movq %rax, %r8
callq 0x17cd0
addq %r15, %rax
movq %rbp, %rcx
shlq $0x6, %rcx
addq %r14, %rcx
addq %rax, (%rcx)
jae 0x24d50
addq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24d45
imulq $0x48, %rbp, %rdi
addq %r14, %rdi
movq %rdi, %rsi
movq 0x50(%rsp), %r15
movq %r15, %rdx
movq %rbp, %rcx
callq 0x17cf0
imulq $0x50, %rbp, %rcx
leaq (%r14,%rcx), %rdi
addq (%r14,%rcx), %rax
movq %rax, (%r14,%rcx)
movq 0x90(%rsp), %rsi
movq %rbp, %rdx
movq %rax, %rcx
callq 0x29e1c
movq %r15, %rcx
movq (%r15,%r13,8), %r15
leaq (%rcx,%rbx,8), %rdx
movq 0x40(%rsp), %rbx
movq 0x80(%rsp), %rdi
movq %rdi, %rsi
movq %rbp, %rcx
movq %rax, %r8
callq 0x17cd0
addq %r15, %rax
imulq $0x60, %rbp, %rcx
addq %r14, %rcx
addq %rax, (%rcx)
jae 0x24dcd
addq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x24dc2
imulq $0x68, %rbp, %rdi
addq %r14, %rdi
movq %rdi, %rsi
movq %rbx, %rdx
movq %rbp, %rcx
callq 0x17cf0
imulq $0x70, %rbp, %rcx
leaq (%r14,%rcx), %rdi
addq (%r14,%rcx), %rax
movq %rax, (%r14,%rcx)
cmpl $0x0, 0x64(%rsp)
je 0x24e71
movq 0x28(%rsp), %rsi
movq (%rsp), %r15
movq %r15, %rdx
movq %rax, %rcx
callq 0x29e1c
movq 0x68(%rsp), %rcx
cmpq %r15, %rcx
jle 0x24e94
movq 0x18(%rsp), %rcx
movq (%rbx,%rcx,8), %r15
movq (%rsp), %r12
imulq $0x78, %r12, %rdi
addq %r14, %rdi
movq 0x20(%rsp), %rcx
leaq (%rbx,%rcx,8), %rdx
movq %rdi, %rsi
movq %r12, %rcx
movq %rax, %r8
callq 0x17cd0
addq %r15, %rax
shlq $0x7, %r12
addq %r14, %r12
addq %rax, (%r12)
jae 0x24e5f
addq $0x1, 0x8(%r12)
leaq 0x8(%r12), %r12
jb 0x24e52
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x28(%rsp), %rsi
movq 0x68(%rsp), %rdx
movq %rax, %rcx
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x29e1c
imulq $0x78, (%rsp), %rdx
addq %rdx, %r14
movq 0x20(%rsp), %rdx
leaq (%rbx,%rdx,8), %rdx
movq %r14, %rdi
movq %r14, %rsi
movq %rax, %r8
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x17cd0