// File: wrighteagle2d[P]wrighteaglebase/Debug/../src/InterceptModel.cpp
// Function: InterceptModel::CalcTangPoint(double, double, double, double, double, InterceptModel::InterceptSolution*)
int InterceptModel::CalcTangPoint(double x0, double y0, double vp, double ka,
                                  double cd, InterceptSolution *sol) {
  static const double MINERROR = 0.01;

  const double &alpha = ServerParam::instance().ballDecay();
  const double &ln_alpha = ServerParam::instance().logBallDecay();

  double s, p, alpha_p, f, dfdx, last_f = 1000.0, x;
  int iteration_cycle = 0;

  if (fabs(y0) < FLOAT_EPS) {
    sol->tangc = 0;
    return 0; //没有切点
  }

  x = x0;
  do {
    iteration_cycle += 1;
    if (iteration_cycle > 10) {
      break;
    }
    s = Sqrt((x - x0) * (x - x0) + y0 * y0);
    p = (s - ka) / vp - cd;
    if (p < 0.0)
      p = 0.0;
    alpha_p = pow(alpha, (p));
    f = 1.0 - alpha_p * (1 - x * (x - x0) * ln_alpha / (s * vp));

    if (fabs(f) > fabs(last_f)) {
      sol->tangc = 0;
      return 0; //没有切点
    } else {
      last_f = f;
    }

    dfdx =
        ln_alpha / vp *
        ((x - x0) * (f - 1.0) / s +
         alpha_p * ((x + x - x0) / s - x * (x - x0) * (x - x0) / (s * s * s)));
    dfdx = fabs(dfdx) < FLOAT_EPS ? (Sign(dfdx) * FLOAT_EPS) : dfdx;
    x = x - f / dfdx;
  } while (fabs(f) > MINERROR);

  sol->tangp[0] = x;

  s = Sqrt((x - x0) * (x - x0) + y0 * y0);
  p = (s - ka) / vp - cd;
  if (p < 0.0)
    p = 0.0;
  alpha_p = pow(alpha, (p));
  if (1.0 - alpha_p < FLOAT_EPS) { //表示自己到那里几乎不花时间
    sol->tangv[0] = 1000.0;
    sol->tangc = 1;
    return 1;
  } else {
    sol->tangv[0] = x * (1.0 - alpha) / (1.0 - alpha_p);
  }

  x += 0.5; //检测是否只有一个切点
  s = Sqrt((x - x0) * (x - x0) + y0 * y0);
  p = (s - ka) / vp - cd;
  if (p < 0.0)
    p = 0.0;
  alpha_p = pow(alpha, p);
  f = 1.0 - alpha_p * (1 - x * (x - x0) * ln_alpha / (s * vp));
  if (f > 0.0) {
    sol->tangc = 1;
    return 1; //只有一个切点
  } else {
    do {
      x += 15.0;
      s = Sqrt((x - x0) * (x - x0) + y0 * y0);
      p = (s - ka) / vp - cd;
      if (p < 0.0)
        p = 0.0;
      alpha_p = pow(alpha, p);
      f = 1.0 - alpha_p * (1 - x * (x - x0) * ln_alpha / (s * vp));
    } while (f < 0.0);
    dfdx =
        ln_alpha / vp *
        ((x - x0) * (f - 1.0) / s +
         alpha_p * ((x + x - x0) / s - x * (x - x0) * (x - x0) / (s * s * s)));
    dfdx = fabs(dfdx) < FLOAT_EPS ? (Sign(dfdx) * FLOAT_EPS) : dfdx;
    x = x - f / dfdx;

    iteration_cycle = 0;
    while (fabs(f) > MINERROR) {
      iteration_cycle += 1;
      if (iteration_cycle > 10) {
        break;
      }
      s = Sqrt((x - x0) * (x - x0) + y0 * y0);
      p = (s - ka) / vp - cd;
      if (p < 0.0)
        p = 0.0;
      alpha_p = pow(alpha, p);
      f = 1.0 - alpha_p * (1 - x * (x - x0) * ln_alpha / (s * vp));
      dfdx = ln_alpha / vp *
             ((x - x0) * (f - 1.0) / s +
              alpha_p *
                  ((x + x - x0) / s - x * (x - x0) * (x - x0) / (s * s * s)));
      dfdx = fabs(dfdx) < FLOAT_EPS ? (Sign(dfdx) * FLOAT_EPS) : dfdx;
      x = x - f / dfdx;
    }

    sol->tangp[1] = x;
    s = Sqrt((x - x0) * (x - x0) + y0 * y0);
    p = (s - ka) / vp - cd;
    if (p < 0.0)
      p = 0.0;
    alpha_p = pow(alpha, p);
    if (1.0 - alpha_p < FLOAT_EPS) {
      sol->tangv[1] = 1000.0;
    } else {
      sol->tangv[1] = x * (1.0 - alpha) / (1.0 - alpha_p);
    }
    sol->tangc = 2;
    return 2; //有两个切点
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movsd %xmm1, -0x20(%rbp)
movsd %xmm2, -0x28(%rbp)
movsd %xmm3, -0x30(%rbp)
movsd %xmm4, -0x38(%rbp)
movq %rsi, -0x40(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movq %rax, -0x48(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x4f340
movq %rax, -0x50(%rbp)
movsd 0x74d82(%rip), %xmm0    # 0xc26b8
movsd %xmm0, -0x80(%rbp)
movl $0x0, -0x8c(%rbp)
movsd -0x20(%rbp), %xmm1
movaps 0x7370f(%rip), %xmm0    # 0xc1060
pand %xmm0, %xmm1
movsd 0x736ab(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4d979
movq -0x40(%rbp), %rax
movl $0x0, (%rax)
movl $0x0, -0x4(%rbp)
jmp 0x4e4dc
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
cmpl $0xa, -0x8c(%rbp)
jle 0x4d9a3
jmp 0x4dc1c
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4da13
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd -0x68(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
movsd -0x88(%rbp), %xmm1
subsd -0x18(%rbp), %xmm1
mulsd %xmm1, %xmm2
movq -0x50(%rbp), %rax
mulsd (%rax), %xmm2
movsd -0x58(%rbp), %xmm1
mulsd -0x28(%rbp), %xmm1
divsd %xmm1, %xmm2
movsd 0x735aa(%rip), %xmm1    # 0xc1010
subsd %xmm2, %xmm1
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x73583(%rip), %xmm1    # 0xc1010
addsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
movaps 0x735be(%rip), %xmm1    # 0xc1060
pand %xmm1, %xmm0
movsd -0x80(%rbp), %xmm1
movaps 0x735ae(%rip), %xmm2    # 0xc1060
pand %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x4dad2
movq -0x40(%rbp), %rax
movl $0x0, (%rax)
movl $0x0, -0x4(%rbp)
jmp 0x4e4dc
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x50(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x28(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x70(%rbp), %xmm1
movsd 0x7350d(%rip), %xmm3    # 0xc1010
subsd %xmm3, %xmm1
mulsd %xmm1, %xmm2
divsd -0x58(%rbp), %xmm2
movsd -0x68(%rbp), %xmm1
movsd -0x88(%rbp), %xmm3
addsd -0x88(%rbp), %xmm3
subsd -0x18(%rbp), %xmm3
divsd -0x58(%rbp), %xmm3
movsd -0x88(%rbp), %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
divsd %xmm5, %xmm4
subsd %xmm4, %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm1
movaps 0x734d3(%rip), %xmm0    # 0xc1060
pand %xmm0, %xmm1
movsd 0x7346f(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4dbc2
leaq -0x78(%rbp), %rdi
callq 0x1f2e0
cvtsi2sd %eax, %xmm0
movsd 0x73454(%rip), %xmm1    # 0xc1008
mulsd %xmm1, %xmm0
movsd %xmm0, -0xf8(%rbp)
jmp 0x4dbcf
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd -0xf8(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
divsd -0x78(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x70(%rbp), %xmm0
movaps 0x7345a(%rip), %xmm1    # 0xc1060
pand %xmm1, %xmm0
movsd 0x73abe(%rip), %xmm1    # 0xc16d0
ucomisd %xmm1, %xmm0
ja 0x4d986
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x100(%rbp)
movq -0x40(%rbp), %rdi
addq $0x8, %rdi
movq $0x0, -0xa0(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x4f360
movsd -0x100(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4dcc7
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd 0x7332a(%rip), %xmm1    # 0xc1010
subsd -0x68(%rbp), %xmm1
movsd 0x73315(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4dd3a
movq -0x40(%rbp), %rdi
addq $0x18, %rdi
movq $0x0, -0xb0(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x4f360
movsd 0x74998(%rip), %xmm0    # 0xc26b8
movsd %xmm0, (%rax)
movq -0x40(%rbp), %rax
movl $0x1, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x4e4dc
movsd -0x88(%rbp), %xmm0
movq -0x48(%rbp), %rax
movsd 0x732c2(%rip), %xmm1    # 0xc1010
subsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd 0x732b2(%rip), %xmm1    # 0xc1010
subsd -0x68(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x108(%rbp)
movq -0x40(%rbp), %rdi
addq $0x18, %rdi
movq $0x0, -0xb8(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0x4f360
movsd -0x108(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd 0x7327e(%rip), %xmm0    # 0xc1020
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xc0(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4de22
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd -0x68(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
movsd -0x88(%rbp), %xmm1
subsd -0x18(%rbp), %xmm1
mulsd %xmm1, %xmm2
movq -0x50(%rbp), %rax
mulsd (%rax), %xmm2
movsd -0x58(%rbp), %xmm1
mulsd -0x28(%rbp), %xmm1
divsd %xmm1, %xmm2
movsd 0x7319b(%rip), %xmm1    # 0xc1010
subsd %xmm2, %xmm1
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x73174(%rip), %xmm1    # 0xc1010
addsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x4dec9
movq -0x40(%rbp), %rax
movl $0x1, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x4e4dc
jmp 0x4decb
movsd 0x7384d(%rip), %xmm0    # 0xc1720
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xc8(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4df53
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd -0x68(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
movsd -0x88(%rbp), %xmm1
subsd -0x18(%rbp), %xmm1
mulsd %xmm1, %xmm2
movq -0x50(%rbp), %rax
mulsd (%rax), %xmm2
movsd -0x58(%rbp), %xmm1
mulsd -0x28(%rbp), %xmm1
divsd %xmm1, %xmm2
movsd 0x7306a(%rip), %xmm1    # 0xc1010
subsd %xmm2, %xmm1
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x73043(%rip), %xmm1    # 0xc1010
addsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x70(%rbp), %xmm0
ja 0x4decb
movq -0x50(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x28(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x70(%rbp), %xmm1
movsd 0x73005(%rip), %xmm3    # 0xc1010
subsd %xmm3, %xmm1
mulsd %xmm1, %xmm2
divsd -0x58(%rbp), %xmm2
movsd -0x68(%rbp), %xmm1
movsd -0x88(%rbp), %xmm3
addsd -0x88(%rbp), %xmm3
subsd -0x18(%rbp), %xmm3
divsd -0x58(%rbp), %xmm3
movsd -0x88(%rbp), %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
divsd %xmm5, %xmm4
subsd %xmm4, %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm1
movaps 0x72fcb(%rip), %xmm0    # 0xc1060
pand %xmm0, %xmm1
movsd 0x72f67(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4e0ca
leaq -0x78(%rbp), %rdi
callq 0x1f2e0
cvtsi2sd %eax, %xmm0
movsd 0x72f4c(%rip), %xmm1    # 0xc1008
mulsd %xmm1, %xmm0
movsd %xmm0, -0x110(%rbp)
jmp 0x4e0d7
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
divsd -0x78(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x8c(%rbp)
movsd -0x70(%rbp), %xmm0
movaps 0x72f48(%rip), %xmm1    # 0xc1060
pand %xmm1, %xmm0
movsd 0x735ac(%rip), %xmm1    # 0xc16d0
ucomisd %xmm1, %xmm0
jbe 0x4e361
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
cmpl $0xa, -0x8c(%rbp)
jle 0x4e14b
jmp 0x4e361
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xd0(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4e1bb
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd -0x68(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
movsd -0x88(%rbp), %xmm1
subsd -0x18(%rbp), %xmm1
mulsd %xmm1, %xmm2
movq -0x50(%rbp), %rax
mulsd (%rax), %xmm2
movsd -0x58(%rbp), %xmm1
mulsd -0x28(%rbp), %xmm1
divsd %xmm1, %xmm2
movsd 0x72e02(%rip), %xmm1    # 0xc1010
subsd %xmm2, %xmm1
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x72ddb(%rip), %xmm1    # 0xc1010
addsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x50(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x28(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x70(%rbp), %xmm1
movsd 0x72dab(%rip), %xmm3    # 0xc1010
subsd %xmm3, %xmm1
mulsd %xmm1, %xmm2
divsd -0x58(%rbp), %xmm2
movsd -0x68(%rbp), %xmm1
movsd -0x88(%rbp), %xmm3
addsd -0x88(%rbp), %xmm3
subsd -0x18(%rbp), %xmm3
divsd -0x58(%rbp), %xmm3
movsd -0x88(%rbp), %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x88(%rbp), %xmm5
subsd -0x18(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
mulsd -0x58(%rbp), %xmm5
divsd %xmm5, %xmm4
subsd %xmm4, %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm1
movaps 0x72d71(%rip), %xmm0    # 0xc1060
pand %xmm0, %xmm1
movsd 0x72d0d(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4e324
leaq -0x78(%rbp), %rdi
callq 0x1f2e0
cvtsi2sd %eax, %xmm0
movsd 0x72cf2(%rip), %xmm1    # 0xc1008
mulsd %xmm1, %xmm0
movsd %xmm0, -0x118(%rbp)
jmp 0x4e331
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0x118(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
divsd -0x78(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0x4e10c
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x120(%rbp)
movq -0x40(%rbp), %rdi
addq $0x8, %rdi
movq $0x1, -0xd8(%rbp)
leaq -0xd8(%rbp), %rsi
callq 0x4f360
movsd -0x120(%rbp), %xmm0
movsd %xmm0, (%rax)
movsd -0x88(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x88(%rbp), %xmm2
subsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe0(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x12420
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0x4e40c
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movsd -0x60(%rbp), %xmm1
callq 0xaa50
movsd %xmm0, -0x68(%rbp)
movsd 0x72be5(%rip), %xmm1    # 0xc1010
subsd -0x68(%rbp), %xmm1
movsd 0x72bd0(%rip), %xmm0    # 0xc1008
ucomisd %xmm1, %xmm0
jbe 0x4e46b
movq -0x40(%rbp), %rdi
addq $0x18, %rdi
movq $0x1, -0xe8(%rbp)
leaq -0xe8(%rbp), %rsi
callq 0x4f360
movsd 0x74253(%rip), %xmm0    # 0xc26b8
movsd %xmm0, (%rax)
jmp 0x4e4cb
movsd -0x88(%rbp), %xmm0
movq -0x48(%rbp), %rax
movsd 0x72b91(%rip), %xmm1    # 0xc1010
subsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd 0x72b81(%rip), %xmm1    # 0xc1010
subsd -0x68(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x128(%rbp)
movq -0x40(%rbp), %rdi
addq $0x18, %rdi
movq $0x1, -0xf0(%rbp)
leaq -0xf0(%rbp), %rsi
callq 0x4f360
movsd -0x128(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x40(%rbp), %rax
movl $0x2, (%rax)
movl $0x2, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopl (%rax,%rax)