// File: redpony[P]libpopt/./lbfgs.h
// Function: scitbx::lbfgs::detail::mcsrch<double, unsigned long>::mcstep(double&, double&, double&, double&, double&, double&, double&, double, double, bool&, double, double)
int mcsrch<FloatType, SizeType>::mcstep(
      FloatType& stx,
      FloatType& fx,
      FloatType& dx,
      FloatType& sty,
      FloatType& fy,
      FloatType& dy,
      FloatType& stp,
      FloatType fp,
      FloatType dp,
      bool& brackt,
      FloatType stpmin,
      FloatType stpmax)
    {
      bool bound;
      FloatType gamma, p, q, r, s, sgnd, stpc, stpf, stpq, theta;
      int info = 0;
      if (   (   brackt && (stp <= std::min(stx, sty)
              || stp >= std::max(stx, sty)))
          || dx * (stp - stx) >= FloatType(0) || stpmax < stpmin) {
        return 0;
      }
      // Determine if the derivatives have opposite sign.
      sgnd = dp * (dx / abs(dx));
      if (fp > fx) {
        // First case. A higher function value.
        // The minimum is bracketed. If the cubic step is closer
        // to stx than the quadratic step, the cubic step is taken,
        // else the average of the cubic and quadratic steps is taken.
        info = 1;
        bound = true;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(pow2(theta / s) - (dx / s) * (dp / s));
        if (stp < stx) gamma = - gamma;
        p = (gamma - dx) + theta;
        q = ((gamma - dx) + gamma) + dp;
        r = p/q;
        stpc = stx + r * (stp - stx);
        stpq = stx
          + ((dx / ((fx - fp) / (stp - stx) + dx)) / FloatType(2))
            * (stp - stx);
        if (abs(stpc - stx) < abs(stpq - stx)) {
          stpf = stpc;
        }
        else {
          stpf = stpc + (stpq - stpc) / FloatType(2);
        }
        brackt = true;
      }
      else if (sgnd < FloatType(0)) {
        // Second case. A lower function value and derivatives of
        // opposite sign. The minimum is bracketed. If the cubic
        // step is closer to stx than the quadratic (secant) step,
        // the cubic step is taken, else the quadratic step is taken.
        info = 2;
        bound = false;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(pow2(theta / s) - (dx / s) * (dp / s));
        if (stp > stx) gamma = - gamma;
        p = (gamma - dp) + theta;
        q = ((gamma - dp) + gamma) + dx;
        r = p/q;
        stpc = stp + r * (stx - stp);
        stpq = stp + (dp / (dp - dx)) * (stx - stp);
        if (abs(stpc - stp) > abs(stpq - stp)) {
          stpf = stpc;
        }
        else {
          stpf = stpq;
        }
        brackt = true;
      }
      else if (abs(dp) < abs(dx)) {
        // Third case. A lower function value, derivatives of the
        // same sign, and the magnitude of the derivative decreases.
        // The cubic step is only used if the cubic tends to infinity
        // in the direction of the step or if the minimum of the cubic
        // is beyond stp. Otherwise the cubic step is defined to be
        // either stpmin or stpmax. The quadratic (secant) step is also
        // computed and if the minimum is bracketed then the the step
        // closest to stx is taken, else the step farthest away is taken.
        info = 3;
        bound = true;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(
          std::max(FloatType(0), pow2(theta / s) - (dx / s) * (dp / s)));
        if (stp > stx) gamma = -gamma;
        p = (gamma - dp) + theta;
        q = (gamma + (dx - dp)) + gamma;
        r = p/q;
        if (r < FloatType(0) && gamma != FloatType(0)) {
          stpc = stp + r * (stx - stp);
        }
        else if (stp > stx) {
          stpc = stpmax;
        }
        else {
          stpc = stpmin;
        }
        stpq = stp + (dp / (dp - dx)) * (stx - stp);
        if (brackt) {
          if (abs(stp - stpc) < abs(stp - stpq)) {
            stpf = stpc;
          }
          else {
            stpf = stpq;
          }
        }
        else {
          if (abs(stp - stpc) > abs(stp - stpq)) {
            stpf = stpc;
          }
          else {
            stpf = stpq;
          }
        }
      }
      else {
        // Fourth case. A lower function value, derivatives of the
        // same sign, and the magnitude of the derivative does
        // not decrease. If the minimum is not bracketed, the step
        // is either stpmin or stpmax, else the cubic step is taken.
        info = 4;
        bound = false;
        if (brackt) {
          theta = FloatType(3) * (fp - fy) / (sty - stp) + dy + dp;
          s = max3(abs(theta), abs(dy), abs(dp));
          gamma = s * std::sqrt(pow2(theta / s) - (dy / s) * (dp / s));
          if (stp > sty) gamma = -gamma;
          p = (gamma - dp) + theta;
          q = ((gamma - dp) + gamma) + dy;
          r = p/q;
          stpc = stp + r * (sty - stp);
          stpf = stpc;
        }
        else if (stp > stx) {
          stpf = stpmax;
        }
        else {
          stpf = stpmin;
        }
      }
      // Update the interval of uncertainty. This update does not
      // depend on the new step or the case analysis above.
      if (fp > fx) {
        sty = stp;
        fy = fp;
        dy = dp;
      }
      else {
        if (sgnd < FloatType(0)) {
          sty = stx;
          fy = fx;
          dy = dx;
        }
        stx = stp;
        fx = fp;
        dx = dp;
      }
      // Compute the new step and safeguard it.
      stpf = std::min(stpmax, stpf);
      stpf = std::max(stpmin, stpf);
      stp = stpf;
      if (brackt && bound) {
        if (sty > stx) {
          stp = std::min(stx + FloatType(0.66) * (sty - stx), stp);
        }
        else {
          stp = std::max(stx + FloatType(0.66) * (sty - stx), stp);
        }
      }
      return info;
    }

// Assembly:
subq $0x208, %rsp            # imm = 0x208
movq 0x218(%rsp), %rax
movq 0x210(%rsp), %rax
movq %rdi, 0x1f8(%rsp)
movq %rsi, 0x1f0(%rsp)
movq %rdx, 0x1e8(%rsp)
movq %rcx, 0x1e0(%rsp)
movq %r8, 0x1d8(%rsp)
movq %r9, 0x1d0(%rsp)
movsd %xmm0, 0x1c8(%rsp)
movsd %xmm1, 0x1c0(%rsp)
movsd %xmm2, 0x1b8(%rsp)
movsd %xmm3, 0x1b0(%rsp)
movl $0x0, 0x154(%rsp)
movq 0x218(%rsp), %rax
testb $0x1, (%rax)
je 0xc59d
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x68(%rsp)
movq 0x1f8(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
callq 0x7c90
movsd 0x68(%rsp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jae 0xc5e6
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x60(%rsp)
movq 0x1f8(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
callq 0x5cb0
movsd 0x60(%rsp), %xmm0
ucomisd (%rax), %xmm0
jae 0xc5e6
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm1
mulsd %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jae 0xc5e6
movsd 0x1b0(%rsp), %xmm1
movsd 0x1b8(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xc5f6
movl $0x0, 0x204(%rsp)
jmp 0xd76e
movsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x58(%rsp)
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x50(%rsp)
movq 0x1e8(%rsp), %rdi
callq 0xc450
movsd 0x50(%rsp), %xmm1
movaps %xmm0, %xmm2
movsd 0x58(%rsp), %xmm0
divsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x178(%rsp)
movsd 0x1c8(%rsp), %xmm0
movq 0x1f0(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xca19
movl $0x1, 0x154(%rsp)
movb $0x1, 0x1af(%rsp)
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm1
subsd 0x1c8(%rsp), %xmm1
movsd 0x1d41(%rip), %xmm0     # 0xe3d0
mulsd %xmm1, %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x1e8(%rsp), %rax
addsd (%rax), %xmm0
addsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
leaq 0x158(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x148(%rsp)
movq 0x1e8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x140(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x138(%rsp)
leaq 0x148(%rsp), %rdi
leaq 0x140(%rsp), %rsi
leaq 0x138(%rsp), %rdx
callq 0xd810
movsd (%rax), %xmm0
movsd %xmm0, 0x180(%rsp)
movsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movsd 0x158(%rsp), %xmm0
divsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x130(%rsp)
leaq 0x130(%rsp), %rdi
callq 0xd8b0
movaps %xmm0, %xmm1
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
divsd 0x180(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
divsd 0x180(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x31b0
movaps %xmm0, %xmm1
movsd 0x48(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xc81b
movsd 0x1a0(%rsp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movsd 0x1a0(%rsp), %xmm0
movq 0x1e8(%rsp), %rax
subsd (%rax), %xmm0
addsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x198(%rsp)
movsd 0x1a0(%rsp), %xmm0
movq 0x1e8(%rsp), %rax
subsd (%rax), %xmm0
addsd 0x1a0(%rsp), %xmm0
addsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x190(%rsp)
movsd 0x198(%rsp), %xmm0
divsd 0x190(%rsp), %xmm0
movsd %xmm0, 0x188(%rsp)
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x188(%rsp), %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm2
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x170(%rsp)
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm2
subsd 0x1c8(%rsp), %xmm2
movq 0x210(%rsp), %rax
movsd (%rax), %xmm3
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm3
divsd %xmm3, %xmm2
movq 0x1e8(%rsp), %rax
addsd (%rax), %xmm2
divsd %xmm2, %xmm0
movsd 0x1704(%rip), %xmm2     # 0xe030
divsd %xmm2, %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm2
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x160(%rsp)
movsd 0x170(%rsp), %xmm0
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, 0x128(%rsp)
leaq 0x128(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x40(%rsp)
movsd 0x160(%rsp), %xmm0
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, 0x120(%rsp)
leaq 0x120(%rsp), %rdi
callq 0xc450
movsd 0x40(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xc9d5
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xca09
movsd 0x170(%rsp), %xmm0
movsd 0x160(%rsp), %xmm1
subsd 0x170(%rsp), %xmm1
movsd 0x1638(%rip), %xmm2     # 0xe030
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x168(%rsp)
movq 0x218(%rsp), %rax
movb $0x1, (%rax)
jmp 0xd51c
xorps %xmm0, %xmm0
ucomisd 0x178(%rsp), %xmm0
jbe 0xcd88
movl $0x2, 0x154(%rsp)
movb $0x0, 0x1af(%rsp)
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm1
subsd 0x1c8(%rsp), %xmm1
movsd 0x1975(%rip), %xmm0     # 0xe3d0
mulsd %xmm1, %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x1e8(%rsp), %rax
addsd (%rax), %xmm0
addsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
leaq 0x158(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x118(%rsp)
movq 0x1e8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x110(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x108(%rsp)
leaq 0x118(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq 0x108(%rsp), %rdx
callq 0xd810
movsd (%rax), %xmm0
movsd %xmm0, 0x180(%rsp)
movsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x38(%rsp)
movsd 0x158(%rsp), %xmm0
divsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x100(%rsp)
leaq 0x100(%rsp), %rdi
callq 0xd8b0
movaps %xmm0, %xmm1
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
divsd 0x180(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
divsd 0x180(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x31b0
movaps %xmm0, %xmm1
movsd 0x38(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xcbe3
movsd 0x1a0(%rsp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movsd 0x1a0(%rsp), %xmm0
subsd 0x1c0(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x198(%rsp)
movsd 0x1a0(%rsp), %xmm0
subsd 0x1c0(%rsp), %xmm0
addsd 0x1a0(%rsp), %xmm0
movq 0x1e8(%rsp), %rax
addsd (%rax), %xmm0
movsd %xmm0, 0x190(%rsp)
movsd 0x198(%rsp), %xmm0
divsd 0x190(%rsp), %xmm0
movsd %xmm0, 0x188(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x188(%rsp), %xmm0
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm2
movq 0x210(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x170(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x1c0(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
movq 0x1e8(%rsp), %rax
subsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm2
movq 0x210(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x160(%rsp)
movsd 0x170(%rsp), %xmm0
movq 0x210(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, 0xf8(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x30(%rsp)
movsd 0x160(%rsp), %xmm0
movq 0x210(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, 0xf0(%rsp)
leaq 0xf0(%rsp), %rdi
callq 0xc450
movaps %xmm0, %xmm1
movsd 0x30(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xcd66
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xcd78
movsd 0x160(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
movq 0x218(%rsp), %rax
movb $0x1, (%rax)
jmp 0xd51a
leaq 0x1c0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x28(%rsp)
movq 0x1e8(%rsp), %rdi
callq 0xc450
movsd 0x28(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xd24a
movl $0x3, 0x154(%rsp)
movb $0x1, 0x1af(%rsp)
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm1
subsd 0x1c8(%rsp), %xmm1
movsd 0x15e8(%rip), %xmm0     # 0xe3d0
mulsd %xmm1, %xmm0
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x1e8(%rsp), %rax
addsd (%rax), %xmm0
addsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
leaq 0x158(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0xe8(%rsp)
movq 0x1e8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0xe0(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0xd8(%rsp)
leaq 0xe8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0xd810
movsd (%rax), %xmm0
movsd %xmm0, 0x180(%rsp)
movsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0xd0(%rsp)
movsd 0x158(%rsp), %xmm0
divsd 0x180(%rsp), %xmm0
movsd %xmm0, 0xc0(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0xd8b0
movaps %xmm0, %xmm1
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
divsd 0x180(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
divsd 0x180(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xc8(%rsp)
leaq 0xd0(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x5cb0
movsd (%rax), %xmm0
callq 0x31b0
movaps %xmm0, %xmm1
movsd 0x20(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xcf9e
movsd 0x1a0(%rsp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movsd 0x1a0(%rsp), %xmm0
subsd 0x1c0(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x198(%rsp)
movsd 0x1a0(%rsp), %xmm0
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm1
subsd 0x1c0(%rsp), %xmm1
addsd %xmm1, %xmm0
addsd 0x1a0(%rsp), %xmm0
movsd %xmm0, 0x190(%rsp)
movsd 0x198(%rsp), %xmm0
divsd 0x190(%rsp), %xmm0
movsd %xmm0, 0x188(%rsp)
xorps %xmm0, %xmm0
ucomisd 0x188(%rsp), %xmm0
jbe 0xd075
movsd 0x1a0(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xd035
jp 0xd035
jmp 0xd075
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x188(%rsp), %xmm0
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm2
movq 0x210(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x170(%rsp)
jmp 0xd0b7
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xd0a3
movsd 0x1b0(%rsp), %xmm0
movsd %xmm0, 0x170(%rsp)
jmp 0xd0b5
movsd 0x1b8(%rsp), %xmm0
movsd %xmm0, 0x170(%rsp)
jmp 0xd0b7
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x1c0(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
movq 0x1e8(%rsp), %rax
subsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm2
movq 0x210(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x160(%rsp)
movq 0x218(%rsp), %rax
testb $0x1, (%rax)
je 0xd1b2
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
subsd 0x170(%rsp), %xmm0
movsd %xmm0, 0xb8(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x18(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
subsd 0x160(%rsp), %xmm0
movsd %xmm0, 0xb0(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0xc450
movsd 0x18(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xd19b
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd1ad
movsd 0x160(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd245
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
subsd 0x170(%rsp), %xmm0
movsd %xmm0, 0xa8(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x10(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
subsd 0x160(%rsp), %xmm0
movsd %xmm0, 0xa0(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0xc450
movaps %xmm0, %xmm1
movsd 0x10(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xd231
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd243
movsd 0x160(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd245
jmp 0xd518
movl $0x4, 0x154(%rsp)
movb $0x0, 0x1af(%rsp)
movq 0x218(%rsp), %rax
testb $0x1, (%rax)
je 0xd4d4
movsd 0x1c8(%rsp), %xmm1
movq 0x1d8(%rsp), %rax
subsd (%rax), %xmm1
movsd 0x1145(%rip), %xmm0     # 0xe3d0
mulsd %xmm1, %xmm0
movq 0x1e0(%rsp), %rax
movsd (%rax), %xmm1
movq 0x210(%rsp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq 0x1d0(%rsp), %rax
addsd (%rax), %xmm0
addsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0x158(%rsp)
leaq 0x158(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x98(%rsp)
movq 0x1d0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x90(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0xc450
movsd %xmm0, 0x88(%rsp)
leaq 0x98(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0xd810
movsd (%rax), %xmm0
movsd %xmm0, 0x180(%rsp)
movsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x158(%rsp), %xmm0
divsd 0x180(%rsp), %xmm0
movsd %xmm0, 0x80(%rsp)
leaq 0x80(%rsp), %rdi
callq 0xd8b0
movaps %xmm0, %xmm1
movq 0x1d0(%rsp), %rax
movsd (%rax), %xmm0
divsd 0x180(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm2
divsd 0x180(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x31b0
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1e0(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xd413
movsd 0x1a0(%rsp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, 0x1a0(%rsp)
movsd 0x1a0(%rsp), %xmm0
subsd 0x1c0(%rsp), %xmm0
addsd 0x158(%rsp), %xmm0
movsd %xmm0, 0x198(%rsp)
movsd 0x1a0(%rsp), %xmm0
subsd 0x1c0(%rsp), %xmm0
addsd 0x1a0(%rsp), %xmm0
movq 0x1d0(%rsp), %rax
addsd (%rax), %xmm0
movsd %xmm0, 0x190(%rsp)
movsd 0x198(%rsp), %xmm0
divsd 0x190(%rsp), %xmm0
movsd %xmm0, 0x188(%rsp)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm1
movsd 0x188(%rsp), %xmm0
movq 0x1e0(%rsp), %rax
movsd (%rax), %xmm2
movq 0x210(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x170(%rsp)
movsd 0x170(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd516
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xd502
movsd 0x1b0(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd514
movsd 0x1b8(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
jmp 0xd516
jmp 0xd518
jmp 0xd51a
jmp 0xd51c
movsd 0x1c8(%rsp), %xmm0
movq 0x1f0(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xd57a
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1e0(%rsp), %rax
movsd %xmm0, (%rax)
movsd 0x1c8(%rsp), %xmm0
movq 0x1d8(%rsp), %rax
movsd %xmm0, (%rax)
movsd 0x1c0(%rsp), %xmm0
movq 0x1d0(%rsp), %rax
movsd %xmm0, (%rax)
jmp 0xd612
xorps %xmm0, %xmm0
ucomisd 0x178(%rsp), %xmm0
jbe 0xd5d0
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1e0(%rsp), %rax
movsd %xmm0, (%rax)
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1d8(%rsp), %rax
movsd %xmm0, (%rax)
movq 0x1e8(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1d0(%rsp), %rax
movsd %xmm0, (%rax)
movq 0x210(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
movsd %xmm0, (%rax)
movsd 0x1c8(%rsp), %xmm0
movq 0x1f0(%rsp), %rax
movsd %xmm0, (%rax)
movsd 0x1c0(%rsp), %xmm0
movq 0x1e8(%rsp), %rax
movsd %xmm0, (%rax)
leaq 0x1b0(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x7c90
movsd (%rax), %xmm0
movsd %xmm0, 0x168(%rsp)
leaq 0x1b8(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x5cb0
movsd (%rax), %xmm0
movsd %xmm0, 0x168(%rsp)
movsd 0x168(%rsp), %xmm0
movq 0x210(%rsp), %rax
movsd %xmm0, (%rax)
movq 0x218(%rsp), %rax
testb $0x1, (%rax)
je 0xd760
testb $0x1, 0x1af(%rsp)
je 0xd760
movq 0x1e0(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
ucomisd (%rax), %xmm0
jbe 0xd702
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1e0(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm0
movsd 0xcf8(%rip), %xmm2      # 0xe3c8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x78(%rsp)
movq 0x210(%rsp), %rsi
leaq 0x78(%rsp), %rdi
callq 0x7c90
movsd (%rax), %xmm0
movq 0x210(%rsp), %rax
movsd %xmm0, (%rax)
jmp 0xd75e
movq 0x1f8(%rsp), %rax
movsd (%rax), %xmm1
movq 0x1e0(%rsp), %rax
movsd (%rax), %xmm0
movq 0x1f8(%rsp), %rax
subsd (%rax), %xmm0
movsd 0xc9a(%rip), %xmm2      # 0xe3c8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x70(%rsp)
movq 0x210(%rsp), %rsi
leaq 0x70(%rsp), %rdi
callq 0x5cb0
movsd (%rax), %xmm0
movq 0x210(%rsp), %rax
movsd %xmm0, (%rax)
jmp 0xd760
movl 0x154(%rsp), %eax
movl %eax, 0x204(%rsp)
movl 0x204(%rsp), %eax
addq $0x208, %rsp            # imm = 0x208
retq
nopl (%rax)