// File: JRLamontagne[P]cdice_sa/CDICE_doeclim.cpp
// Function: doeclim_init(double, double, int, int, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*)
void doeclim_init(double t2co, double kappa, int dt, int ns, 
		  double *flnd, double *powtoheat, double *cal, double *cas, double *taucfl,
		  double *taukls, double *taucfs, double *tauksl, double *bsi, 
		  double *IB, double *A, double *fso, double *taudif, double *Ker)
{
  
  // Define and initialize parameters
  double pi = 3.141592653589793;
  double B[4] = {0.0, 0.0, 0.0, 0.0};
  double C[4] = {0.0, 0.0, 0.0, 0.0};
  double KT0[ns];
  double KTA1[ns];
  double KTB1[ns];
  double KTA2[ns];
  double KTB2[ns];
  double KTA3[ns];
  double KTB3[ns];

  for(int i=0; i<ns; i++) {
    KT0[i] = 0.0;
    KTA1[i] = 0.0;
    KTB1[i] = 0.0;
    KTA2[i] = 0.0;
    KTB2[i] = 0.0;
    KTA3[i] = 0.0;
    KTB3[i] = 0.0;
  }

  // Define the doeclim parameters
  double ak = 0.31;
  double bk = 1.59;
  double csw = 0.13;
  double earth_area = 5100656 * pow(10.0, 8);
  double kcon = 3155.0;
  double q2co = 3.7; 
  double rlam = 1.43;
  double secs_per_Year = 31556926.0;
  double zbot = 4000.0;
  *bsi = 1.3;
  *cal = 0.52;
  *cas = 7.80;
  *flnd = 0.29;
  *fso = 0.95;
  
  // Dependent Model Parameters
  double ocean_area = (1.0 - *flnd) * earth_area;
  double cnum = rlam * *flnd + *bsi * (1.0 - *flnd);
  double cden = rlam * *flnd - ak * (rlam - *bsi);
  double cfl = *flnd * cnum / cden * q2co / t2co - bk * (rlam - *bsi) / cden;
  double cfs = (rlam * *flnd - ak / (1.0 - *flnd) * (rlam - *bsi)) * cnum / cden * q2co / t2co + rlam * *flnd / (1.0 - *flnd) * bk * (rlam - *bsi) / cden;
  double kls = bk * rlam * *flnd / cden - ak * *flnd * cnum / cden * q2co / t2co; 
  double keff = kcon * kappa;
  double taubot = pow(zbot,2) / keff;
  *powtoheat = ocean_area * secs_per_Year / pow(10.0,22);
  *taucfs = *cas / cfs;
  *taucfl = *cal / cfl;
  *taudif = pow(*cas,2) / pow(csw,2) * pi / keff;
  *tauksl  = (1.0 - *flnd) * *cas / kls;
  *taukls  = *flnd * *cal / kls;
  
  // First order
  KT0[ns-1] = 4.0 - 2.0 * pow(2.0, 0.5);
  KTA1[ns-1] = -8.0 * exp(-taubot / double(dt)) + 4.0 * pow(2.0, 0.5) * exp(-0.5 * taubot / double(dt));
  KTB1[ns-1] = 4.0 * pow((pi * taubot / double(dt)), 0.5) * (1.0 + erf(pow(0.5 * taubot / double(dt), 0.5)) - 2.0 * erf(pow(taubot / double(dt), 0.5)));

  // Second order
  KTA2[ns-1] =  8.0 * exp(-4.0 * taubot / double(dt)) - 4.0 * pow(2.0, 0.5) * exp(-2.0 * taubot / double(dt));
  KTB2[ns-1] = -8.0 * pow((pi * taubot / double(dt)), 0.5) * (1.0 + erf(pow((2.0 * taubot / double(dt)), 0.5)) - 2.0 * erf(2.0 * pow((taubot / double(dt)), 0.5)) );

  // Third order
  KTA3[ns-1] = -8.0 * exp(-9.0 * taubot / double(dt)) + 4.0 * pow(2.0, 0.5) * exp(-4.5 * taubot / double(dt));
  KTB3[ns-1] = 12.0 * pow((pi * taubot / double(dt)), 0.5) * (1.0 + erf(pow((4.5 * taubot / double(dt)), 0.5)) - 2.0 * erf(3.0 * pow((taubot / double(dt)), 0.5)) );

  // Calculate the kernel component vectors
  for(int i=0; i<(ns-1); i++) {
    
    // First order
    KT0[i] = 4.0 * pow((double(ns-i)), 0.5) - 2.0 * pow((double(ns+1-i)), 0.5) - 2.0 * pow(double(ns-1-i), 0.5);      
    KTA1[i] = -8.0 * pow(double(ns-i), 0.5) * exp(-taubot / double(dt) / double(ns-i)) + 4.0 * pow(double(ns+1-i), 0.5) * exp(-taubot / double(dt) / double(ns+1-i)) + 4.0 * pow(double(ns-1-i), 0.5) * exp(-taubot/double(dt) / double(ns-1-i));
    KTB1[i] =  4.0 * pow((pi * taubot / double(dt)), 0.5) * ( erf(pow((taubot / double(dt) / double(ns-1-i)), 0.5)) + erf(pow((taubot / double(dt) / double(ns+1-i)), 0.5)) - 2.0 * erf(pow((taubot / double(dt) / double(ns-i)), 0.5)) );

    // Second order
    KTA2[i] =  8.0 * pow(double(ns-i), 0.5) * exp(-4.0 * taubot / double(dt) / double(ns-i)) - 4.0 * pow(double(ns+1-i), 0.5) * exp(-4.0 * taubot / double(dt) / double(ns+1-i)) - 4.0 * pow(double(ns-1-i), 0.5) * exp(-4.0 * taubot / double(dt) / double(ns-1-i));
    KTB2[i] = -8.0 * pow((pi * taubot / double(dt)), 0.5) * ( erf(2.0 * pow((taubot / double(dt) / double(ns-1-i)), 0.5)) + erf(2.0 * pow((taubot / double(dt) / double(ns+1-i)), 0.5)) - 2.0 * erf(2.0 * pow((taubot / double(dt) / double(ns-i)), 0.5)) );

    // Third order
    KTA3[i] = -8.0 * pow(double(ns-i), 0.5) * exp(-9.0 * taubot / double(dt) / double(ns-i)) + 4.0 * pow(double(ns+1-i), 0.5) * exp(-9.0 * taubot / double(dt) / double(ns+1-i)) + 4.0 * pow(double(ns-1-i), 0.5) * exp(-9.0 * taubot / double(dt) / double(ns-1-i)); 
    KTB3[i] = 12.0 * pow((pi * taubot / double(dt)), 0.5) * ( erf(3.0 * pow((taubot / double(dt) / double(ns-1-i)), 0.5)) + erf(3.0 * pow((taubot / double(dt) / double(ns+1-i)), 0.5)) - 2.0 * erf(3.0 * pow((taubot / double(dt) / double(ns-i)), 0.5)) );

  }

  // Sum up the kernel components
  for(int i=0; i<ns; i++) {
    
    Ker[i] = KT0[i] + KTA1[i] + KTB1[i] + KTA2[i] + KTB2[i] + KTA3[i] + KTB3[i];

  }

  // Switched on (To switch off, comment out lines below)
  C[0] = 1.0 / pow(*taucfl, 2.0) + 1.0 / pow(*taukls, 2.0) + 2.0 / *taucfl / *taukls + *bsi / *taukls / *tauksl;
  C[1] = -1 * *bsi / pow(*taukls, 2.0) - *bsi / *taucfl / *taukls - *bsi / *taucfs / *taukls - pow(*bsi, 2.0) / *taukls / *tauksl;
  C[2] = -1 * *bsi / pow(*tauksl, 2.0) - 1.0 / *taucfs / *tauksl - 1.0 / *taucfl / *tauksl -1.0 / *taukls / *tauksl;
  C[3] = 1.0 / pow(*taucfs, 2.0) + pow(*bsi, 2.0) / pow(*tauksl, 2.0) + 2.0 * *bsi / *taucfs / *tauksl + *bsi / *taukls / *tauksl;
  for(int i=0; i<4; i++) {
    C[i] = C[i] * (pow(double(dt), 2.0) / 12.0);
  }

  //------------------------------------------------------------------
  // Matrices of difference equation system B*T(i+1) = Q(i) + A*T(i)
  // T = (TL,TO)
  // (Equation A.27, EK05, or Equations 2.3.24 and 2.3.27, TK07)
  B[0] = 1.0 + double(dt) / (2.0 * *taucfl) + double(dt) / (2.0 * *taukls);
  B[1] = double(-dt) / (2.0 * *taukls) * *bsi;
  B[2] = double(-dt) / (2.0 * *tauksl);
  B[3] = 1.0 + double(dt) / (2.0 * *taucfs) + double(dt) / (2.0 * *tauksl) * *bsi + 2.0 * *fso * pow((double(dt) / *taudif), 0.5);

  A[0] = 1.0 - double(dt) / (2.0 * *taucfl) - double(dt) / (2.0 * *taukls);
  A[1] = double(dt) / (2.0 * *taukls) * *bsi;
  A[2] = double(dt) / (2.0 * *tauksl);
  A[3] = 1.0 - double(dt) / (2.0 * *taucfs) - double(dt) / (2.0 * *tauksl) * *bsi + Ker[ns-1] * *fso * pow((double(dt) / *taudif), 0.5);

  for (int i=0; i<4; i++) {
    B[i] = B[i] + C[i];
    A[i] = A[i] + C[i];
  }

  // Calculate the inverse of B
  invert_1d_2x2_matrix(B, IB);

  return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x330, %rsp            # imm = 0x330
movq 0x58(%rbp), %rax
movq 0x50(%rbp), %rax
movq 0x48(%rbp), %rax
movq 0x40(%rbp), %rax
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movsd %xmm0, -0x8(%rbp)
movsd %xmm1, -0x10(%rbp)
movl %edi, -0x14(%rbp)
movl %esi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movabsq $0x400921fb54442d18, %rax # imm = 0x400921FB54442D18
movq %rax, -0x40(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
movaps %xmm0, -0x60(%rbp)
movaps %xmm0, -0x70(%rbp)
movaps %xmm0, -0x80(%rbp)
movl -0x18(%rbp), %eax
movq %rsp, %rcx
movq %rcx, -0x88(%rbp)
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x198(%rbp)
movq %rcx, %rsp
movq %rax, -0x90(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x190(%rbp)
movq %rcx, %rsp
movq %rax, -0x98(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x188(%rbp)
movq %rcx, %rsp
movq %rax, -0xa0(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x180(%rbp)
movq %rcx, %rsp
movq %rax, -0xa8(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x178(%rbp)
movq %rcx, %rsp
movq %rax, -0xb0(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x170(%rbp)
movq %rcx, %rsp
movq %rax, -0xb8(%rbp)
movl -0x18(%rbp), %eax
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x168(%rbp)
movq %rcx, %rsp
movq %rax, -0xc0(%rbp)
movl $0x0, -0xc4(%rbp)
movl -0xc4(%rbp), %eax
cmpl -0x18(%rbp), %eax
jge 0x18ea2
movq -0x168(%rbp), %rax
movq -0x170(%rbp), %rcx
movq -0x178(%rbp), %rdx
movq -0x180(%rbp), %rsi
movq -0x188(%rbp), %rdi
movq -0x190(%rbp), %r8
movq -0x198(%rbp), %r9
movslq -0xc4(%rbp), %r10
xorps %xmm0, %xmm0
movsd %xmm0, (%r9,%r10,8)
movslq -0xc4(%rbp), %r9
xorps %xmm0, %xmm0
movsd %xmm0, (%r8,%r9,8)
movslq -0xc4(%rbp), %r8
xorps %xmm0, %xmm0
movsd %xmm0, (%rdi,%r8,8)
movslq -0xc4(%rbp), %rdi
xorps %xmm0, %xmm0
movsd %xmm0, (%rsi,%rdi,8)
movslq -0xc4(%rbp), %rsi
xorps %xmm0, %xmm0
movsd %xmm0, (%rdx,%rsi,8)
movslq -0xc4(%rbp), %rdx
xorps %xmm0, %xmm0
movsd %xmm0, (%rcx,%rdx,8)
movslq -0xc4(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0xc4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc4(%rbp)
jmp 0x18de2
movsd 0x341e(%rip), %xmm0     # 0x1c2c8
movsd %xmm0, -0xd0(%rbp)
movsd 0x3406(%rip), %xmm0     # 0x1c2c0
movsd %xmm0, -0xd8(%rbp)
movsd 0x33ee(%rip), %xmm0     # 0x1c2b8
movsd %xmm0, -0xe0(%rbp)
movsd 0x32c6(%rip), %xmm0     # 0x1c1a0
movl $0x8, %edi
callq 0x1b4a0
movaps %xmm0, %xmm1
movsd 0x33c1(%rip), %xmm0     # 0x1c2b0
mulsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
movsd 0x33a5(%rip), %xmm0     # 0x1c2a8
movsd %xmm0, -0xf0(%rbp)
movsd 0x338d(%rip), %xmm0     # 0x1c2a0
movsd %xmm0, -0xf8(%rbp)
movsd 0x3375(%rip), %xmm0     # 0x1c298
movsd %xmm0, -0x100(%rbp)
movsd 0x335d(%rip), %xmm0     # 0x1c290
movsd %xmm0, -0x108(%rbp)
movsd 0x3345(%rip), %xmm0     # 0x1c288
movsd %xmm0, -0x110(%rbp)
movq 0x30(%rbp), %rax
movsd 0x3329(%rip), %xmm0     # 0x1c280
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rax
movsd 0x3311(%rip), %xmm0     # 0x1c278
movsd %xmm0, (%rax)
movq -0x38(%rbp), %rax
movsd 0x32f9(%rip), %xmm0     # 0x1c270
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x32e1(%rip), %xmm0     # 0x1c268
movsd %xmm0, (%rax)
movq 0x48(%rbp), %rax
movsd 0x32c9(%rip), %xmm0     # 0x1c260
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x3061(%rip), %xmm0     # 0x1c008
subsd (%rax), %xmm0
mulsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0x100(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm2
movq 0x30(%rbp), %rax
movsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x3029(%rip), %xmm3     # 0x1c008
subsd (%rax), %xmm3
mulsd %xmm3, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
movsd -0x100(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm2
movsd -0xd0(%rbp), %xmm1
movsd -0x100(%rbp), %xmm3
movq 0x30(%rbp), %rax
subsd (%rax), %xmm3
mulsd %xmm3, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x128(%rbp)
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
mulsd -0x120(%rbp), %xmm0
divsd -0x128(%rbp), %xmm0
mulsd -0xf8(%rbp), %xmm0
divsd -0x8(%rbp), %xmm0
movsd -0xd8(%rbp), %xmm1
movsd -0x100(%rbp), %xmm2
movq 0x30(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x128(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movsd -0x100(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm2
movsd -0xd0(%rbp), %xmm1
movq -0x20(%rbp), %rax
movsd 0x2f45(%rip), %xmm3     # 0x1c008
subsd (%rax), %xmm3
divsd %xmm3, %xmm1
movsd -0x100(%rbp), %xmm3
movq 0x30(%rbp), %rax
subsd (%rax), %xmm3
mulsd %xmm3, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
mulsd -0x120(%rbp), %xmm0
divsd -0x128(%rbp), %xmm0
mulsd -0xf8(%rbp), %xmm0
divsd -0x8(%rbp), %xmm0
movsd -0x100(%rbp), %xmm1
movq -0x20(%rbp), %rax
mulsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x2ed1(%rip), %xmm2     # 0x1c008
subsd (%rax), %xmm2
divsd %xmm2, %xmm1
mulsd -0xd8(%rbp), %xmm1
movsd -0x100(%rbp), %xmm2
movq 0x30(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x128(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x138(%rbp)
movsd -0xd8(%rbp), %xmm0
mulsd -0x100(%rbp), %xmm0
movq -0x20(%rbp), %rax
mulsd (%rax), %xmm0
divsd -0x128(%rbp), %xmm0
movsd -0xd0(%rbp), %xmm1
movq -0x20(%rbp), %rax
mulsd (%rax), %xmm1
mulsd -0x120(%rbp), %xmm1
divsd -0x128(%rbp), %xmm1
mulsd -0xf8(%rbp), %xmm1
divsd -0x8(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x140(%rbp)
movsd -0xf0(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x110(%rbp), %xmm0
movl $0x2, %edi
callq 0x1b4a0
divsd -0x148(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x118(%rbp), %xmm0
mulsd -0x108(%rbp), %xmm0
movsd %xmm0, -0x208(%rbp)
movsd 0x2f81(%rip), %xmm0     # 0x1c1a0
movl $0x16, %edi
callq 0x1b4a0
movaps %xmm0, %xmm1
movsd -0x208(%rbp), %xmm0
divsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x38(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x138(%rbp), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x130(%rbp), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x38(%rbp), %rax
movsd (%rax), %xmm0
movl $0x2, %edi
callq 0x1b4a0
movsd %xmm0, -0x200(%rbp)
movsd -0xe0(%rbp), %xmm0
movl $0x2, %edi
callq 0x1b4a0
movaps %xmm0, %xmm1
movsd -0x200(%rbp), %xmm0
divsd %xmm1, %xmm0
mulsd -0x40(%rbp), %xmm0
divsd -0x148(%rbp), %xmm0
movq 0x50(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x2d3c(%rip), %xmm0     # 0x1c008
subsd (%rax), %xmm0
movq -0x38(%rbp), %rax
mulsd (%rax), %xmm0
divsd -0x140(%rbp), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x30(%rbp), %rax
mulsd (%rax), %xmm0
divsd -0x140(%rbp), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
movsd 0x2e78(%rip), %xmm0     # 0x1c188
movsd 0x2ee8(%rip), %xmm1     # 0x1c200
callq 0x9c60
movq -0x198(%rbp), %rax
movaps %xmm0, %xmm1
addsd %xmm1, %xmm1
movsd 0x2efd(%rip), %xmm0     # 0x1c230
subsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x150(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x1f0(%rbp)
movsd 0x2e06(%rip), %xmm0     # 0x1c188
movsd 0x2e76(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2e96(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1f8(%rbp)
movsd 0x2eaa(%rip), %xmm0     # 0x1c258
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x1f8(%rbp), %xmm1
movq -0x190(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1f0(%rbp), %xmm0
mulsd %xmm2, %xmm1
movsd 0x2e36(%rip), %xmm2     # 0x1c220
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2de2(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2e02(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e0(%rbp)
movsd 0x2dbe(%rip), %xmm0     # 0x1c200
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2da5(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movaps %xmm0, %xmm1
movsd 0x2b98(%rip), %xmm0     # 0x1c008
addsd %xmm1, %xmm0
movsd %xmm0, -0x1e8(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2d6b(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movsd -0x1e8(%rbp), %xmm1
movq -0x188(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1e0(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd 0x2d75(%rip), %xmm0     # 0x1c250
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x1d0(%rbp)
movsd 0x2c87(%rip), %xmm0     # 0x1c188
movsd 0x2cf7(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2d17(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1d8(%rbp)
movsd 0x2d1b(%rip), %xmm0     # 0x1c248
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x1d8(%rbp), %xmm1
movq -0x180(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1d0(%rbp), %xmm0
mulsd %xmm2, %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
movsd 0x2cc0(%rip), %xmm2     # 0x1c240
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2c4c(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2c5c(%rip), %xmm0     # 0x1c220
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1c0(%rbp)
movsd 0x2bb0(%rip), %xmm0     # 0x1c188
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2c0f(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movaps %xmm0, %xmm1
movsd 0x2a02(%rip), %xmm0     # 0x1c008
addsd %xmm1, %xmm0
movsd %xmm0, -0x1c8(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2bd5(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2b4d(%rip), %xmm0     # 0x1c188
mulsd %xmm1, %xmm0
callq 0x9910
movsd -0x1c8(%rbp), %xmm1
movq -0x178(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1c0(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd 0x2bb8(%rip), %xmm0     # 0x1c238
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x1b0(%rbp)
movsd 0x2ae2(%rip), %xmm0     # 0x1c188
movsd 0x2b52(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2b72(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1b8(%rbp)
movsd 0x2b56(%rip), %xmm0     # 0x1c228
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x1b8(%rbp), %xmm1
movq -0x170(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1b0(%rbp), %xmm0
mulsd %xmm2, %xmm1
movsd 0x2b12(%rip), %xmm2     # 0x1c220
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2abe(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2ab6(%rip), %xmm0     # 0x1c208
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1a0(%rbp)
movsd 0x2ab2(%rip), %xmm0     # 0x1c218
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2a81(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movaps %xmm0, %xmm1
movsd 0x2874(%rip), %xmm0     # 0x1c008
addsd %xmm1, %xmm0
movsd %xmm0, -0x1a8(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2a47(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2a47(%rip), %xmm0     # 0x1c210
mulsd %xmm1, %xmm0
callq 0x9910
movsd -0x1a8(%rbp), %xmm1
movq -0x168(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x1a0(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movl $0x0, -0x154(%rbp)
movl -0x154(%rbp), %eax
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1a1ef
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x29c7(%rip), %xmm1     # 0x1c200
callq 0x9c60
movsd %xmm0, -0x2d8(%rbp)
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x29a2(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm2
movsd -0x2d8(%rbp), %xmm0
movsd 0x2912(%rip), %xmm1     # 0x1c188
mulsd %xmm2, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x2997(%rip), %xmm2     # 0x1c230
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2d0(%rbp)
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x293f(%rip), %xmm1     # 0x1c200
callq 0x9c60
movq -0x198(%rbp), %rax
movaps %xmm0, %xmm1
movsd -0x2d0(%rbp), %xmm0
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x28ff(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x290f(%rip), %xmm0     # 0x1c220
mulsd %xmm1, %xmm0
movsd %xmm0, -0x2b8(%rbp)
movsd -0x150(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x2c0(%rbp)
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x2885(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x28a5(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x2c8(%rbp)
movsd -0x150(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x2c8(%rbp), %xmm1
movsd -0x2c0(%rbp), %xmm2
movaps %xmm0, %xmm3
movsd -0x2b8(%rbp), %xmm0
mulsd %xmm3, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2b0(%rbp)
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x27e1(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2801(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x2a8(%rbp)
movsd -0x150(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x2b0(%rbp), %xmm1
movq -0x190(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x2a8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2738(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2758(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x290(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x26ef(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movsd %xmm0, -0x2a0(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x26b0(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movaps %xmm0, %xmm1
movsd -0x2a0(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x298(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x2665(%rip), %xmm1     # 0x1c200
callq 0x9c60
callq 0x9910
movsd -0x298(%rbp), %xmm1
movq -0x188(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x290(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x2614(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2644(%rip), %xmm0     # 0x1c240
mulsd %xmm1, %xmm0
movsd %xmm0, -0x278(%rbp)
movsd 0x2640(%rip), %xmm0     # 0x1c250
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x280(%rbp)
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x25a9(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x25c9(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x288(%rbp)
movsd 0x25d5(%rip), %xmm0     # 0x1c250
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x288(%rbp), %xmm1
movsd -0x280(%rbp), %xmm2
movaps %xmm0, %xmm3
movsd -0x278(%rbp), %xmm0
mulsd %xmm3, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x270(%rbp)
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x24fd(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x251d(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x268(%rbp)
movsd 0x2529(%rip), %xmm0     # 0x1c250
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x270(%rbp), %xmm1
movq -0x180(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x268(%rbp), %xmm0
movq %xmm0, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x244c(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x245c(%rip), %xmm0     # 0x1c220
mulsd %xmm1, %xmm0
movsd %xmm0, -0x250(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x2403(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x237b(%rip), %xmm0     # 0x1c188
mulsd %xmm1, %xmm0
callq 0x9910
movsd %xmm0, -0x260(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x23b5(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x232d(%rip), %xmm0     # 0x1c188
mulsd %xmm1, %xmm0
callq 0x9910
movaps %xmm0, %xmm1
movsd -0x260(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x258(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x235b(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x22d3(%rip), %xmm0     # 0x1c188
mulsd %xmm1, %xmm0
callq 0x9910
movsd -0x258(%rbp), %xmm1
movq -0x178(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x250(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x22fb(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x230b(%rip), %xmm0     # 0x1c220
mulsd %xmm1, %xmm0
movsd %xmm0, -0x238(%rbp)
movsd 0x230f(%rip), %xmm0     # 0x1c238
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd %xmm0, -0x240(%rbp)
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x2290(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x22b0(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x248(%rbp)
movsd 0x22a4(%rip), %xmm0     # 0x1c238
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x248(%rbp), %xmm1
movsd -0x240(%rbp), %xmm2
movaps %xmm0, %xmm3
movsd -0x238(%rbp), %xmm0
mulsd %xmm3, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x230(%rbp)
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd 0x21fb(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x221b(%rip), %xmm0     # 0x1c230
mulsd %xmm1, %xmm0
movsd %xmm0, -0x228(%rbp)
movsd 0x220f(%rip), %xmm0     # 0x1c238
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
callq 0x9ca0
movsd -0x230(%rbp), %xmm1
movq -0x170(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x228(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
mulsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd 0x2161(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2159(%rip), %xmm0     # 0x1c208
mulsd %xmm1, %xmm0
movsd %xmm0, -0x210(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x2118(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2118(%rip), %xmm0     # 0x1c210
mulsd %xmm1, %xmm0
callq 0x9910
movsd %xmm0, -0x220(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
addl $0x1, %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x20ca(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x20ca(%rip), %xmm0     # 0x1c210
mulsd %xmm1, %xmm0
callq 0x9910
movaps %xmm0, %xmm1
movsd -0x220(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x218(%rbp)
movsd -0x150(%rbp), %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
divsd %xmm1, %xmm0
movl -0x18(%rbp), %eax
subl -0x154(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x2070(%rip), %xmm1     # 0x1c200
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x2070(%rip), %xmm0     # 0x1c210
mulsd %xmm1, %xmm0
callq 0x9910
movsd -0x218(%rbp), %xmm1
movq -0x168(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x210(%rbp), %xmm0
addsd %xmm2, %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movslq -0x154(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x154(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x154(%rbp)
jmp 0x19810
movl $0x0, -0x158(%rbp)
movl -0x158(%rbp), %eax
cmpl -0x18(%rbp), %eax
jge 0x1a2b4
movq -0x168(%rbp), %rax
movq -0x170(%rbp), %rcx
movq -0x178(%rbp), %rdx
movq -0x180(%rbp), %rsi
movq -0x188(%rbp), %rdi
movq -0x190(%rbp), %r8
movq -0x198(%rbp), %r9
movslq -0x158(%rbp), %r10
movsd (%r9,%r10,8), %xmm0
movslq -0x158(%rbp), %r9
addsd (%r8,%r9,8), %xmm0
movslq -0x158(%rbp), %r8
addsd (%rdi,%r8,8), %xmm0
movslq -0x158(%rbp), %rdi
addsd (%rsi,%rdi,8), %xmm0
movslq -0x158(%rbp), %rsi
addsd (%rdx,%rsi,8), %xmm0
movslq -0x158(%rbp), %rdx
addsd (%rcx,%rdx,8), %xmm0
movslq -0x158(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movq 0x58(%rbp), %rax
movslq -0x158(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x158(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x158(%rbp)
jmp 0x1a1f9
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1ec4(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x1d34(%rip), %xmm0     # 0x1c008
divsd %xmm1, %xmm0
movsd %xmm0, -0x308(%rbp)
movq 0x18(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1e98(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm2
movsd -0x308(%rbp), %xmm0
movsd 0x1d00(%rip), %xmm1     # 0x1c008
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd 0x1e6c(%rip), %xmm1     # 0x1c188
divsd (%rax), %xmm1
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
addsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm1
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movq 0x30(%rbp), %rax
movsd 0x1e1f(%rip), %xmm0     # 0x1c178
mulsd (%rax), %xmm0
movsd %xmm0, -0x300(%rbp)
movq 0x18(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1e13(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd -0x300(%rbp), %xmm0
divsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm1
movq 0x10(%rbp), %rax
divsd (%rax), %xmm1
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm1
movq 0x20(%rbp), %rax
divsd (%rax), %xmm1
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x2f8(%rbp)
movq 0x30(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1daf(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd -0x2f8(%rbp), %xmm0
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x30(%rbp), %rax
movsd 0x1d6a(%rip), %xmm0     # 0x1c178
mulsd (%rax), %xmm0
movsd %xmm0, -0x2f0(%rbp)
movq 0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1d5e(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd -0x2f0(%rbp), %xmm0
divsd %xmm1, %xmm0
movq 0x20(%rbp), %rax
movsd 0x1bbe(%rip), %xmm1     # 0x1c008
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd 0x1ba2(%rip), %xmm1     # 0x1c008
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movq 0x18(%rbp), %rax
movsd 0x1b86(%rip), %xmm1     # 0x1c008
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x20(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1ce1(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd 0x1b51(%rip), %xmm0     # 0x1c008
divsd %xmm1, %xmm0
movsd %xmm0, -0x2e0(%rbp)
movq 0x30(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1cb5(%rip), %xmm1     # 0x1c188
callq 0x9c60
movsd %xmm0, -0x2e8(%rbp)
movq 0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x1c98(%rip), %xmm1     # 0x1c188
callq 0x9c60
movsd -0x2e8(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2e0(%rbp), %xmm0
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
movsd 0x1c6c(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
movq 0x20(%rbp), %rax
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
addsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm1
movq 0x18(%rbp), %rax
divsd (%rax), %xmm1
movq 0x28(%rbp), %rax
divsd (%rax), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movl $0x0, -0x15c(%rbp)
cmpl $0x4, -0x15c(%rbp)
jge 0x1a5c8
movslq -0x15c(%rbp), %rax
movsd -0x80(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x310(%rbp)
cvtsi2sdl -0x14(%rbp), %xmm0
movsd 0x1bfe(%rip), %xmm1     # 0x1c188
callq 0x9c60
movaps %xmm0, %xmm1
movsd -0x310(%rbp), %xmm0
movsd 0x1c66(%rip), %xmm2     # 0x1c208
divsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movslq -0x15c(%rbp), %rax
movsd %xmm0, -0x80(%rbp,%rax,8)
movl -0x15c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x15c(%rbp)
jmp 0x1a55f
cvtsi2sdl -0x14(%rbp), %xmm1
movq 0x10(%rbp), %rax
movsd 0x1baf(%rip), %xmm0     # 0x1c188
mulsd (%rax), %xmm0
divsd %xmm0, %xmm1
movsd 0x1a1f(%rip), %xmm0     # 0x1c008
addsd %xmm1, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
movq 0x18(%rbp), %rax
movsd 0x1b8a(%rip), %xmm2     # 0x1c188
mulsd (%rax), %xmm2
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
xorl %eax, %eax
subl -0x14(%rbp), %eax
cvtsi2sd %eax, %xmm0
movq 0x18(%rbp), %rax
movsd 0x1b64(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
mulsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
xorl %eax, %eax
subl -0x14(%rbp), %eax
cvtsi2sd %eax, %xmm0
movq 0x28(%rbp), %rax
movsd 0x1b3a(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x20(%rbp), %rax
movsd 0x1b1c(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd 0x198c(%rip), %xmm1     # 0x1c008
addsd %xmm0, %xmm1
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x28(%rbp), %rax
movsd 0x1af7(%rip), %xmm2     # 0x1c188
mulsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x330(%rbp)
movq 0x48(%rbp), %rax
movsd 0x1acb(%rip), %xmm0     # 0x1c188
mulsd (%rax), %xmm0
movsd %xmm0, -0x328(%rbp)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x50(%rbp), %rax
divsd (%rax), %xmm0
movsd 0x1b22(%rip), %xmm1     # 0x1c200
callq 0x9c60
movsd -0x330(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x328(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
cvtsi2sdl -0x14(%rbp), %xmm1
movq 0x10(%rbp), %rax
movsd 0x1a74(%rip), %xmm0     # 0x1c188
mulsd (%rax), %xmm0
divsd %xmm0, %xmm1
movsd 0x18e4(%rip), %xmm0     # 0x1c008
subsd %xmm1, %xmm0
cvtsi2sdl -0x14(%rbp), %xmm1
movq 0x18(%rbp), %rax
movsd 0x1a4f(%rip), %xmm2     # 0x1c188
mulsd (%rax), %xmm2
divsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movsd %xmm0, (%rax)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x18(%rbp), %rax
movsd 0x1a2a(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x30(%rbp), %rax
mulsd (%rax), %xmm0
movq 0x40(%rbp), %rax
movsd %xmm0, 0x8(%rax)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x28(%rbp), %rax
movsd 0x1a00(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movsd %xmm0, 0x10(%rax)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x20(%rbp), %rax
movsd 0x19de(%rip), %xmm1     # 0x1c188
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd 0x184e(%rip), %xmm1     # 0x1c008
subsd %xmm0, %xmm1
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x28(%rbp), %rax
movsd 0x19b9(%rip), %xmm2     # 0x1c188
mulsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq 0x30(%rbp), %rax
movsd (%rax), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x320(%rbp)
movq 0x58(%rbp), %rax
movl -0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq 0x48(%rbp), %rax
mulsd (%rax), %xmm0
movsd %xmm0, -0x318(%rbp)
cvtsi2sdl -0x14(%rbp), %xmm0
movq 0x50(%rbp), %rax
divsd (%rax), %xmm0
movsd 0x19c3(%rip), %xmm1     # 0x1c200
callq 0x9c60
movsd -0x320(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x318(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movsd %xmm0, 0x18(%rax)
movl $0x0, -0x160(%rbp)
cmpl $0x4, -0x160(%rbp)
jge 0x1a8de
movslq -0x160(%rbp), %rax
movsd -0x60(%rbp,%rax,8), %xmm0
movslq -0x160(%rbp), %rax
addsd -0x80(%rbp,%rax,8), %xmm0
movslq -0x160(%rbp), %rax
movsd %xmm0, -0x60(%rbp,%rax,8)
movq 0x40(%rbp), %rax
movslq -0x160(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movslq -0x160(%rbp), %rax
addsd -0x80(%rbp,%rax,8), %xmm0
movq 0x40(%rbp), %rax
movslq -0x160(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x160(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x160(%rbp)
jmp 0x1a870
leaq -0x60(%rbp), %rdi
movq 0x38(%rbp), %rsi
callq 0x180b0
movq -0x88(%rbp), %rax
movq %rax, %rsp
movq %rbp, %rsp
popq %rbp
retq
nopw (%rax,%rax)