// File: /workspace/github_cpp_makefile_star2_O1/wrighteagle2d[P]wrighteaglebase/Debug/../src/Kicker.cpp
// Function: Kicker::UpdateKickData(Agent const&)
void Kicker::UpdateKickData(const Agent &agent) {
  if (mAgentID == agent.GetAgentID()) {
    return; /** no need to update */
  }

  mAgentID = agent.GetAgentID();

  const BallState &ball_state = agent.GetWorldState().GetBall();
  const PlayerState &player_state = agent.GetSelf();

  /** absolute values */
  mInput.mBallPos = ball_state.GetPos();
  mInput.mBallVel = ball_state.GetVel();
  mInput.mPlayerPos = player_state.GetPos();
  mInput.mPlayerVel = player_state.GetVel();
  mInput.mPlayerBodyDir = player_state.GetBodyDir();

  /** relative values */
  mInput.mBallPos =
      (mInput.mBallPos - mInput.mPlayerPos).Rotate(-mInput.mPlayerBodyDir);
  mInput.mBallVel = mInput.mBallVel.Rotate(-mInput.mPlayerBodyDir);
  mInput.mPlayerVel = mInput.mPlayerVel.Rotate(-mInput.mPlayerBodyDir);

  /** player type is changed */
  if (mInput.mPlayerType != player_state.GetPlayerType()) {
    mInput.mPlayerType = player_state.GetPlayerType();

    for (int k = 0; k < POINTS_NUM; ++k) {
      mKickRate[k] = GetKickRate(mPoint[k], mInput.mPlayerType);
      mMaxAccel[k] = ServerParam::instance().maxPower() *
                     mKickRate[k]; //计算出对应该点最大的eff_power
    }

    for (int i = 0; i < POINTS_NUM; ++i) //考虑kick_rand
    {
      AngleDeg angle_diff = mPoint[i].Dir();
      angle_diff = GetNormalizeAngleDeg(angle_diff);
      double dir_diff = Deg2Rad(fabs(angle_diff));
      double dist_2_ball = mPoint[i].Mod() -
                           PlayerParam::instance()
                               .HeteroPlayer(mInput.mPlayerType)
                               .playerSize() -
                           ServerParam::instance().ballSize();
      double kick_pos_rand =
          dir_diff / M_PI + dist_2_ball / PlayerParam::instance()
                                              .HeteroPlayer(mInput.mPlayerType)
                                              .kickableMargin();
      mRandEva[i] = mRandCurve.GetOutput(kick_pos_rand);
    }
  }

  /** initial */
  for (int i = 0; i < POINTS_NUM; i++) {
    mPointEva[i] = mRandEva[i];
  }

  /** 排除掉一定不能踢的点 */
  Vector ball_next_pos = mInput.mBallPos + mInput.mBallVel - mInput.mPlayerVel;
  double eff_power =
      ServerParam::instance().maxPower() *
      agent.GetSelf().GetKickRate(); //球在当前位置下的实际可以踢到的最大加速度
  double outside_buf = 0.3;
  Vector temp_pos = Vector(0.0, 0.0);

  double x_max = ServerParam::instance().PITCH_LENGTH * 0.5 -
                 mInput.mPlayerPos.X() - outside_buf;
  double x_min = -ServerParam::instance().PITCH_LENGTH * 0.5 -
                 mInput.mPlayerPos.X() + outside_buf;
  double y_max = ServerParam::instance().PITCH_WIDTH * 0.5 -
                 mInput.mPlayerPos.Y() - outside_buf;
  double y_min = -ServerParam::instance().PITCH_WIDTH * 0.5 -
                 mInput.mPlayerPos.Y() + outside_buf;

  for (int i = 0; i < POINTS_NUM; i++) {
    temp_pos =
        (mInput.mPlayerVel + mPoint[i])
            .Rotate(mInput.mPlayerBodyDir); /** 把x正方向变为和球场一样 */
    if (ball_next_pos.Dist(mPoint[i]) > eff_power /** 踢不到该点 */
        || temp_pos.X() > x_max || temp_pos.X() < x_min ||
        temp_pos.Y() > y_max || temp_pos.Y() < y_min) /** 会出界 */
    {
      mPointEva[i] = 0.0;
      continue;
    }
  }

  /** 考虑近身对手，不用InfoState的东西，接口更简单 */
  int min_unum = 0;
  double min_dist = 100.0;
  for (int i = 1; i <= TEAMSIZE; ++i) {
    double opp_kick_area;
    if (i == agent.GetWorldState().GetOpponentGoalieUnum()) {
      opp_kick_area = ServerParam::instance().maxCatchableArea();
    } else {
      opp_kick_area = agent.GetWorldState().GetOpponent(i).GetKickableArea();
    }
    double dist = agent.GetWorldState().GetOpponent(i).GetPos().Dist(
                      ball_state.GetPos()) -
                  opp_kick_area;

    if (dist < min_dist) {
      min_dist = dist;
      min_unum = i;
    }
  }

  if (min_unum != 0) {
    double opp_kick_area = 0.0;
    Vector opp_next_pos = agent.GetWorldState().GetOpponent(min_unum).GetPos();
    opp_next_pos = (opp_next_pos - (mInput.mPlayerPos + mInput.mPlayerVel))
                       .Rotate(-mInput.mPlayerBodyDir);
    if (min_unum == agent.GetWorldState().GetOpponentGoalieUnum()) {
      opp_kick_area = ServerParam::instance().maxCatchableArea();
    } else {
      opp_kick_area =
          agent.GetWorldState().GetOpponent(min_unum).GetKickableArea();
    }

    if (opp_next_pos.Mod() < opp_kick_area + 2.0) {
      double dist = 0.0;
      for (int i = 0; i < POINTS_NUM; i++) {
        dist = opp_next_pos.Dist(mPoint[i]) - opp_kick_area;
        mPointEva[i] *= mOppCurve.GetOutput(dist);
      }
    }
  }

  /** max kick rand factor */
  mMaxRandFactor = GetMaxKickRand(mInput.mBallPos, ball_state.GetVel(),
                                  player_state.GetPlayerType(),
                                  ServerParam::instance().maxPower());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rsi, %r15
movq %rdi, %rbx
movl 0x8(%rsi), %eax
movq 0x18(%rsi), %rcx
movq 0x10(%rcx), %rcx
movb 0xc(%rsi), %dl
movl %eax, -0x58(%rbp)
movq %rcx, -0x54(%rbp)
movb %dl, -0x4c(%rbp)
movq -0x50(%rbp), %rsi
cmpl %esi, 0x8(%rdi)
jne 0x2defa
movq -0x58(%rbp), %rdi
movq %rdi, %r8
shrq $0x20, %r8
cmpl %r8d, 0x4(%rbx)
jne 0x2defa
cmpl %edi, (%rbx)
jne 0x2defa
shrq $0x20, %rsi
cmpb %sil, 0xc(%rbx)
je 0x2ea29
leaq -0x58(%rbp), %r12
movl %eax, (%r12)
movq %rcx, 0x4(%r12)
movb %dl, 0xc(%r12)
movq (%r12), %rax
movq 0x8(%r12), %rcx
movq %rax, (%rbx)
movl %ecx, 0x8(%rbx)
shrq $0x20, %rcx
movb %cl, 0xc(%rbx)
movq 0x18(%r15), %r13
movq %r15, %rdi
callq 0xe85a
movq %rax, %r14
movups 0x38(%r13), %xmm0
movups %xmm0, 0x2b45b0(%rbx)
leaq 0x2b45c0(%rbx), %rax
movq %rax, -0x40(%rbp)
movq %r13, -0x60(%rbp)
movups 0x60(%r13), %xmm0
movups %xmm0, 0x2b45c0(%rbx)
movups 0x8(%r14), %xmm0
movups %xmm0, 0x2b4588(%rbx)
leaq 0x2b4598(%rbx), %rax
movq %rax, -0x30(%rbp)
movups 0x30(%r14), %xmm0
movups %xmm0, 0x2b4598(%rbx)
movsd 0xb0(%r14), %xmm0
movsd %xmm0, 0x2b45a8(%rbx)
movsd 0x2b45b0(%rbx), %xmm2
movsd 0x2b45b8(%rbx), %xmm1
subsd 0x2b4588(%rbx), %xmm2
movsd %xmm2, -0x70(%rbp)
subsd 0x2b4590(%rbx), %xmm1
movsd %xmm1, -0x48(%rbp)
mulsd 0x3d0e2(%rip), %xmm0    # 0x6b0a0
divsd 0x3d082(%rip), %xmm0    # 0x6b048
leaq -0xa8(%rbp), %r13
movq %r12, %rdi
movq %r13, %rsi
callq 0x92d0
movsd (%r12), %xmm0
movsd (%r13), %xmm1
movsd -0x70(%rbp), %xmm3
movapd %xmm3, %xmm2
mulsd %xmm0, %xmm3
movapd %xmm3, %xmm4
movsd -0x48(%rbp), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm1, %xmm2
subsd %xmm0, %xmm2
mulsd %xmm1, %xmm3
addsd %xmm4, %xmm3
movsd %xmm2, 0x2b45b0(%rbx)
movsd %xmm3, 0x2b45b8(%rbx)
movsd 0x2b45a8(%rbx), %xmm0
xorps 0x3cff3(%rip), %xmm0    # 0x6b020
movlps %xmm0, (%r12)
movq -0x40(%rbp), %rdi
movq %r12, %rsi
callq 0x33428
movsd %xmm0, 0x2b45c0(%rbx)
movsd %xmm1, 0x2b45c8(%rbx)
movsd 0x2b45a8(%rbx), %xmm0
xorpd 0x3cfc2(%rip), %xmm0    # 0x6b020
movlpd %xmm0, (%r12)
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x33428
movsd %xmm0, 0x2b4598(%rbx)
movsd %xmm1, 0x2b45a0(%rbx)
movq %r14, -0x90(%rbp)
movl 0x114(%r14), %eax
cmpl %eax, 0x2b4580(%rbx)
je 0x2e37d
movl %eax, 0x2b4580(%rbx)
leaq 0x48(%rbx), %r12
movl $0x568bd, %r14d         # imm = 0x568BD
movslq 0x2b4580(%rbx), %r13
movq %r12, %rdi
callq 0xe804
movapd %xmm0, -0x40(%rbp)
movsd (%r12), %xmm0
movsd 0x8(%r12), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x3cfb0(%rip), %xmm0    # 0x6b090
jb 0x2e0e8
sqrtsd %xmm0, %xmm0
jmp 0x2e0ed
callq 0x93c0
movsd %xmm0, -0x30(%rbp)
movaps -0x40(%rbp), %xmm0
andps 0x3cf13(%rip), %xmm0    # 0x6b010
movaps %xmm0, -0x40(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
imulq $0x3700, %r13, %r13     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%r13), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x4a75c
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movsd 0x3068(%rax,%r13), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd 0x3cf46(%rip), %xmm0    # 0x6b0a8
movapd -0x40(%rbp), %xmm1
mulsd %xmm0, %xmm1
divsd 0x3ceed(%rip), %xmm1    # 0x6b060
addsd 0x3cedd(%rip), %xmm1    # 0x6b058
movapd %xmm1, -0x40(%rbp)
movsd -0x30(%rbp), %xmm1
mulsd %xmm0, %xmm1
movsd %xmm1, -0x30(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movsd -0x30(%rbp), %xmm0
divsd 0x3040(%rax,%r13), %xmm0
movapd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
mulsd -0x48(%rbp), %xmm1
movsd %xmm1, (%rbx,%r14,8)
callq 0x4a75c
movsd 0x3130(%rax), %xmm0
mulsd (%rbx,%r14,8), %xmm0
movsd %xmm0, 0x288(%rbx,%r14,8)
addq $0x10, %r12
incq %r14
cmpq $0x5690e, %r14          # imm = 0x5690E
jne 0x2e0ab
leaq 0x48(%rbx), %r12
xorl %r13d, %r13d
movq %r13, %r14
shlq $0x4, %r14
addq %r12, %r14
movq %r14, %rdi
callq 0xe804
movapd %xmm0, %xmm3
movsd 0x3ce4d(%rip), %xmm0    # 0x6b060
ucomisd %xmm3, %xmm0
jbe 0x2e235
movsd 0x3ce4f(%rip), %xmm1    # 0x6b070
movsd 0x3ce1f(%rip), %xmm2    # 0x6b048
addsd %xmm1, %xmm3
ucomisd %xmm3, %xmm0
ja 0x2e229
jmp 0x2e255
movsd 0x3ce0b(%rip), %xmm2    # 0x6b048
ucomisd %xmm2, %xmm3
jb 0x2e255
movsd 0x3ce1d(%rip), %xmm0    # 0x6b068
addsd %xmm0, %xmm3
ucomisd %xmm2, %xmm3
jae 0x2e24b
andpd 0x3cdb3(%rip), %xmm3    # 0x6b010
mulsd 0x3cdeb(%rip), %xmm3    # 0x6b050
divsd %xmm2, %xmm3
movapd %xmm3, -0x40(%rbp)
movsd (%r14), %xmm0
movsd 0x8(%r14), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x3ce03(%rip), %xmm0    # 0x6b090
jb 0x2e295
sqrtsd %xmm0, %xmm0
jmp 0x2e29a
callq 0x93c0
movsd %xmm0, -0x30(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movslq 0x2b4580(%rbx), %rcx
imulq $0x3700, %rcx, %rcx     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%rcx), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x4a75c
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movapd -0x40(%rbp), %xmm0
divsd 0x3cd60(%rip), %xmm0    # 0x6b050
movapd %xmm0, -0x40(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movslq 0x2b4580(%rbx), %rcx
imulq $0x3700, %rcx, %rcx     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
divsd 0x3040(%rax,%rcx), %xmm0
addsd -0x40(%rbp), %xmm0
addsd 0x2b4540(%rbx), %xmm0
movapd %xmm0, %xmm1
movsd 0x2b4538(%rbx), %xmm0
divsd %xmm1, %xmm0
movsd 0x2b4548(%rbx), %xmm1
addsd 0x2b4530(%rbx), %xmm0
ucomisd %xmm0, %xmm1
ja 0x2e366
movsd 0x2b4550(%rbx), %xmm2
ucomisd %xmm2, %xmm0
movapd %xmm0, %xmm1
jbe 0x2e366
movapd %xmm2, %xmm1
movsd %xmm1, 0x2b4af8(%rbx,%r13,8)
incq %r13
cmpq $0x51, %r13
jne 0x2e1f5
leaq 0x2b45b0(%rbx), %rax
movq %rax, -0x88(%rbp)
leaq 0x2b45a8(%rbx), %r13
movq $-0x51, %rax
movsd 0x2b4d80(%rbx,%rax,8), %xmm0
movsd %xmm0, 0x2b5008(%rbx,%rax,8)
incq %rax
jne 0x2e399
movsd 0x2b45b0(%rbx), %xmm0
movsd 0x2b45b8(%rbx), %xmm1
addsd 0x2b45c0(%rbx), %xmm0
addsd 0x2b45c8(%rbx), %xmm1
subsd 0x2b4598(%rbx), %xmm0
movsd %xmm0, -0x40(%rbp)
subsd 0x2b45a0(%rbx), %xmm1
movsd %xmm1, -0x48(%rbp)
callq 0x4a75c
movsd 0x3130(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movq %r15, %rdi
callq 0xe85a
movsd -0x30(%rbp), %xmm0
mulsd 0x130(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x4a75c
leaq 0x3faf6(%rip), %rax     # 0x6df18
movsd (%rax), %xmm0
movapd %xmm0, -0x70(%rbp)
mulsd 0x3d445(%rip), %xmm0    # 0x6b878
subsd 0x2b4588(%rbx), %xmm0
addsd 0x3e4bd(%rip), %xmm0    # 0x6c900
movapd %xmm0, -0xd0(%rbp)
callq 0x4a75c
movapd 0x3cbc8(%rip), %xmm0    # 0x6b020
movapd -0x70(%rbp), %xmm1
xorpd %xmm0, %xmm1
mulsd 0x3d40f(%rip), %xmm1    # 0x6b878
subsd 0x2b4588(%rbx), %xmm1
addsd 0x3d55f(%rip), %xmm1    # 0x6b9d8
movapd %xmm1, -0x70(%rbp)
callq 0x4a75c
leaq 0x3fa96(%rip), %rax     # 0x6df20
movsd (%rax), %xmm0
movapd %xmm0, -0x80(%rbp)
mulsd 0x3d3dd(%rip), %xmm0    # 0x6b878
subsd 0x2b4590(%rbx), %xmm0
addsd 0x3e455(%rip), %xmm0    # 0x6c900
movapd %xmm0, -0xc0(%rbp)
callq 0x4a75c
movapd -0x80(%rbp), %xmm0
xorpd 0x3cb5b(%rip), %xmm0    # 0x6b020
mulsd 0x3d3ab(%rip), %xmm0    # 0x6b878
subsd 0x2b4590(%rbx), %xmm0
addsd 0x3d4fb(%rip), %xmm0    # 0x6b9d8
movapd %xmm0, -0x80(%rbp)
xorl %r14d, %r14d
leaq -0x58(%rbp), %r12
movsd 0x2b4598(%rbx), %xmm0
movsd 0x2b45a0(%rbx), %xmm1
addsd 0x48(%rbx,%r14,2), %xmm0
addsd 0x50(%rbx,%r14,2), %xmm1
movsd %xmm0, -0x58(%rbp)
movsd %xmm1, -0x50(%rbp)
movq %r12, %rdi
movq %r13, %rsi
callq 0x33428
movapd %xmm0, %xmm3
movsd -0x40(%rbp), %xmm0
subsd 0x48(%rbx,%r14,2), %xmm0
movsd -0x48(%rbp), %xmm2
subsd 0x50(%rbx,%r14,2), %xmm2
mulsd %xmm2, %xmm2
mulsd %xmm0, %xmm0
addsd %xmm2, %xmm0
ucomisd 0x3cb44(%rip), %xmm0    # 0x6b090
jb 0x2e554
sqrtsd %xmm0, %xmm0
jmp 0x2e579
movsd %xmm1, -0xa0(%rbp)
movsd %xmm3, -0x98(%rbp)
callq 0x93c0
movsd -0x98(%rbp), %xmm3
movsd -0xa0(%rbp), %xmm1
ucomisd -0x30(%rbp), %xmm0
ja 0x2e5aa
ucomisd -0xd0(%rbp), %xmm3
ja 0x2e5aa
movapd -0x70(%rbp), %xmm0
ucomisd %xmm3, %xmm0
ja 0x2e5aa
ucomisd -0xc0(%rbp), %xmm1
ja 0x2e5aa
movapd -0x80(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2e5b6
movq $0x0, 0x2b4d80(%rbx,%r14)
addq $0x8, %r14
cmpq $0x288, %r14            # imm = 0x288
jne 0x2e4e9
xorl %r13d, %r13d
movsd 0x3d15e(%rip), %xmm0    # 0x6b730
movl $0x1, %r14d
movl $0x10d0, %r12d          # imm = 0x10D0
movsd %xmm0, -0x30(%rbp)
movq 0x18(%r15), %rdi
movl 0x2114(%rdi), %eax
cmpq %rax, %r14
jne 0x2e5ff
callq 0x4a75c
addq $0x3458, %rax           # imm = 0x3458
jmp 0x2e609
movq (%rdi,%r12), %rax
addq %r12, %rdi
callq *0x10(%rax)
movsd (%rax), %xmm2
movq 0x18(%r15), %rax
movsd 0x8(%rax,%r12), %xmm0
movq -0x60(%rbp), %rcx
subsd 0x38(%rcx), %xmm0
movsd 0x10(%rax,%r12), %xmm1
subsd 0x40(%rcx), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x3ca4f(%rip), %xmm0    # 0x6b090
jb 0x2e649
sqrtsd %xmm0, %xmm0
jmp 0x2e658
movsd %xmm2, -0x40(%rbp)
callq 0x93c0
movsd -0x40(%rbp), %xmm2
subsd %xmm2, %xmm0
movsd -0x30(%rbp), %xmm1
ucomisd %xmm0, %xmm1
cmoval %r14d, %r13d
minsd %xmm1, %xmm0
incq %r14
addq $0x178, %r12            # imm = 0x178
cmpq $0xc, %r14
jne 0x2e5de
testl %r13d, %r13d
je 0x2e879
movq 0x18(%r15), %rax
leal -0x1(%r13), %ecx
movslq %ecx, %rcx
imulq $0x178, %rcx, %rcx      # imm = 0x178
movsd 0x10d8(%rax,%rcx), %xmm3
movq %rcx, -0x48(%rbp)
movsd 0x10e0(%rax,%rcx), %xmm2
movsd 0x2b4588(%rbx), %xmm0
movsd 0x2b4590(%rbx), %xmm1
addsd 0x2b4598(%rbx), %xmm0
subsd %xmm0, %xmm3
movsd %xmm3, -0x40(%rbp)
addsd 0x2b45a0(%rbx), %xmm1
subsd %xmm1, %xmm2
movsd %xmm2, -0x30(%rbp)
movsd 0x2b45a8(%rbx), %xmm0
mulsd 0x3c9ac(%rip), %xmm0    # 0x6b0a0
divsd 0x3c94c(%rip), %xmm0    # 0x6b048
leaq -0x58(%rbp), %r14
leaq -0xa8(%rbp), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x92d0
movsd (%r14), %xmm0
movsd (%r12), %xmm1
movsd -0x40(%rbp), %xmm3
movapd %xmm3, %xmm2
mulsd %xmm0, %xmm3
movsd -0x30(%rbp), %xmm4
mulsd %xmm4, %xmm0
mulsd %xmm1, %xmm2
subsd %xmm0, %xmm2
movsd %xmm2, -0x40(%rbp)
mulsd %xmm1, %xmm4
addsd %xmm3, %xmm4
movsd %xmm4, -0x30(%rbp)
movq 0x18(%r15), %rax
cmpl 0x2114(%rax), %r13d
jne 0x2e767
callq 0x4a75c
addq $0x3458, %rax           # imm = 0x3458
jmp 0x2e77c
movq -0x48(%rbp), %rcx
leaq (%rax,%rcx), %rdi
addq $0x10d0, %rdi           # imm = 0x10D0
movq (%rdi), %rax
callq *0x10(%rax)
movsd (%rax), %xmm3
movsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x40(%rbp), %xmm0
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
movsd %xmm3, -0x48(%rbp)
jb 0x2e7ab
sqrtsd %xmm0, %xmm0
jmp 0x2e7b5
callq 0x93c0
movsd -0x48(%rbp), %xmm3
movsd 0x3cfc3(%rip), %xmm1    # 0x6b780
addsd %xmm3, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x2e879
xorl %r14d, %r14d
xorpd %xmm4, %xmm4
movsd -0x40(%rbp), %xmm0
subsd 0x48(%rbx,%r14,2), %xmm0
movsd -0x30(%rbp), %xmm1
subsd 0x50(%rbx,%r14,2), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd %xmm4, %xmm0
jb 0x2e802
sqrtsd %xmm0, %xmm0
jmp 0x2e810
callq 0x93c0
xorpd %xmm4, %xmm4
movsd -0x48(%rbp), %xmm3
subsd %xmm3, %xmm0
addsd 0x2b4518(%rbx), %xmm0
movsd 0x2b4510(%rbx), %xmm1
divsd %xmm0, %xmm1
movsd 0x2b4520(%rbx), %xmm0
addsd 0x2b4508(%rbx), %xmm1
ucomisd %xmm1, %xmm0
ja 0x2e854
movsd 0x2b4528(%rbx), %xmm2
ucomisd %xmm2, %xmm1
movapd %xmm1, %xmm0
jbe 0x2e854
movapd %xmm2, %xmm0
mulsd 0x2b4d80(%rbx,%r14), %xmm0
movsd %xmm0, 0x2b4d80(%rbx,%r14)
addq $0x8, %r14
cmpq $0x288, %r14            # imm = 0x288
jne 0x2e7d2
movq -0x90(%rbp), %rax
movslq 0x114(%rax), %r14
callq 0x4a75c
movsd 0x3130(%rax), %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x88(%rbp), %rdi
callq 0xe804
andps 0x3c764(%rip), %xmm0    # 0x6b010
movaps %xmm0, -0x40(%rbp)
movsd 0x2b45b0(%rbx), %xmm0
movsd 0x2b45b8(%rbx), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x2e8dc
sqrtsd %xmm0, %xmm0
jmp 0x2e8e1
callq 0x93c0
movsd %xmm0, -0x30(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
imulq $0x3700, %r14, %r14     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%r14), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x4a75c
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movapd -0x40(%rbp), %xmm0
divsd 0x3c717(%rip), %xmm0    # 0x6b048
movapd %xmm0, -0x40(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movsd -0x30(%rbp), %xmm0
divsd 0x3040(%rax,%r14), %xmm0
addsd -0x40(%rbp), %xmm0
mulsd 0x3c74a(%rip), %xmm0    # 0x6b0a8
addsd 0x3cf12(%rip), %xmm0    # 0x6b878
movsd %xmm0, -0x30(%rbp)
movq -0x60(%rbp), %rax
movsd 0x60(%rax), %xmm0
movsd 0x68(%rax), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x3c703(%rip), %xmm0    # 0x6b090
jb 0x2e995
sqrtsd %xmm0, %xmm0
jmp 0x2e99a
callq 0x93c0
movsd %xmm0, -0x40(%rbp)
callq 0x4a75c
movsd 0x30f8(%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
callq 0x4a75c
movsd -0x60(%rbp), %xmm0
mulsd 0x30e0(%rax), %xmm0
movsd -0x40(%rbp), %xmm1
divsd %xmm0, %xmm1
movsd 0x3cea4(%rip), %xmm0    # 0x6b878
mulsd %xmm0, %xmm1
addsd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x450ba
movq 0x5c38(%rax), %rax
movsd 0x3048(%rax,%r14), %xmm0
movsd %xmm0, -0x40(%rbp)
callq 0x4a75c
movsd -0x48(%rbp), %xmm0
divsd 0x3130(%rax), %xmm0
mulsd -0x40(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, 0x2b5008(%rbx)
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop