// File: wrighteagle2d[P]wrighteaglebase/Debug/../src/WorldState.cpp
// Function: WorldStateUpdater::UpdateBallInfo()
void WorldStateUpdater::UpdateBallInfo() {
  //更新别人是否可踢.
  UpdateOtherKick();

  //更新位置
  //计算公式见USTC_Material 第七章
  //公式：ballPos = playerPos + polar2vector(ballDist , neckGlobalAngle +
  //ballAngle)
  if (mpObserver->Ball().GetDist().time() == mpObserver->LatestSightTime()) {
    double dist =
        PlayerParam::instance().ConvertSightDist(mpObserver->Ball().Dist());

    if (mpObserver->GetPlayMode() == PM_Opp_Kick_In ||
        mpObserver->GetPlayMode() == PM_Opp_Corner_Kick ||
        mpObserver->GetPlayMode() == PM_Opp_Free_Kick ||
        mpObserver->GetPlayMode() == PM_Opp_Goalie_Free_Kick ||
        mpObserver->GetPlayMode() == PM_Opp_Offside_Kick ||
        mpObserver->GetPlayMode() == PM_Opp_Free_Kick_Fault_Kick) {
      //对方开球是,己方球员距离球最短为freekickBuffer ,暂时不知道这样做的作用 .
      dist = Max(dist, ServerParam::instance().offsideKickMargin() + FLOAT_EPS);
    }

    //发生碰撞时固定将球与人移开如此距离
    if (mpObserver->Sense().IsCollideWithBall()) {
      dist = GetSelf().GetPlayerSize() + ServerParam::instance().ballSize();
    }
    Vector pos =
        GetSelf().GetPos() +
        Polar2Vector(dist, GetNeckGlobalDirFromSightDelay(mSightDelay) +
                               mpObserver->Ball().Dir());

    //更新eps 球相对误差重要 球近身是不使用, 因为会影响到近身球速计算
    double eps =
        PlayerParam::instance().GetEpsInSight(mpObserver->Ball().Dist());
    eps = calcEps(dist, dist + eps, 0.1) + SelfState().GetPosEps();
    if (dist > ServerParam::instance().visibleDistance() * 2 &&
        !(mSightDelay == 0 && mIsOtherKick && !mIsHearBallPos)) {
      if (mSightDelay == 0 && eps > Ball().GetPosEps() &&
          pos.Dist(Ball().GetPos()) < Ball().GetPosEps()) {
        eps = Ball().GetPosEps();
        pos = Ball().GetPos();
      } else if (mSightDelay == 0 && eps > Ball().GetPosEps() &&
                 pos.Dist(Ball().GetPos()) >= Ball().GetPosEps() &&
                 !mIsOtherKick) {
        if (!mpWorldState->IsBallDropped() &&
            mpWorldState->GetPlayMode() == PM_Play_On &&
            mpWorldState->GetHistory(1)->GetBall().GetPosDelay() == 0) {
          /*
                  char filename[25] = {0};
                  sprintf(filename , "ballinfo_%d.txt" , mSelfUnum);

                  std::ofstream file(filename , std::ios::app);
                  file << mpWorldState->CurrentTime().T() << "\t" <<
             mpWorldState->CurrentTime().S() << "\t" << pos.X() << "\t" <<
             pos.Y();*/

          Vector normal = (pos - Ball().GetPos()).Normalize();
          pos = Ball().GetPos() + normal * Ball().GetPosEps();
          //	file << "\t" << pos.X() << "\t" << pos.Y() << std::endl;
          //	file.close();
        }
      }

      else if (mSightDelay == 0 && eps == Ball().GetPosEps() &&
               pos.Dist(Ball().GetPos()) < eps) {
        pos = (pos + Ball().GetPos()) / 2;
      }
    }

    // limited to field 仅当位于3米以外，否则球的相对位置不准
    if (dist > ServerParam::instance().visibleDistance()) {
      pos = LimitToField(pos);
    }

    Ball().UpdatePosEps(eps);
    Ball().UpdatePos(pos, mSightDelay, mBallConf);
    Ball().UpdateGuessedTimes(0);
  }

  //更新速度
  if (mpObserver->Ball().GetDistChg().time() == mpObserver->LatestSightTime()) {
    //公式：relPos = polar2vector(1.0, ballAngle)
    Vector relPos = Polar2Vector(1.0, mpObserver->Ball().Dir());

    double distChg = mpObserver->Ball().DistChg();
    double dirChg = mpObserver->Ball().DirChg();
    double ballDist = mpObserver->Ball().Dist();

    ballDist = Max(ballDist, FLOAT_EPS);

    //公式：relVel = (distChg * relPos.x() - (dirChg * PI / 180 * ballDist *
    //relPos.y()),distChg * rpos.y() + (dirChg * PI / 180 * ballDist *
    //relPos.x())
    Vector relVel = Vector(
        distChg * relPos.X() - (dirChg * M_PI / 180 * ballDist * relPos.Y()),
        distChg * relPos.Y() + (dirChg * M_PI / 180 * ballDist * relPos.X()));

    relVel = GetSelfVelFromSightDelay(mSightDelay) +
             relVel.Rotate(GetNeckGlobalDirFromSightDelay(mSightDelay));

    // compute vel eps;
    double eps =
        PlayerParam::instance().GetEpsInSight(mpObserver->Ball().Dist());
    Vector mod =
        Vector(0.02 * ballDist + fabs(distChg) / ballDist * eps + 0.02 * eps,
               0.1 * M_PI / 180 * ballDist + fabs(dirChg) * M_PI / 180 * eps +
                   eps * 0.1 * M_PI / 180);
    eps = mod.Mod();

    if ((!(mSightDelay == 0 && mIsOtherKick)) &&
        Ball().GetVelConf() > 0.9499) // 0.95
    {
      Vector vel_estimate = Ball().GetVel();

      if (fabs(relVel.Mod() - vel_estimate.Mod()) <=
              ServerParam::instance().ballRand() * relVel.Mod() /
                  ServerParam::instance().ballDecay() &&
          fabs(relVel.Dir() - vel_estimate.Dir()) < 1) {
        relVel = (relVel + vel_estimate) / 2;
      }
    }
    //公式：ballVel = playerVel() + relVel.rotate(neckGlobalAngle)
    // Ball().UpdateVel(GetSelf().GetVel() +
    // relVel.Rotate(GetSelf().GetNeckGlobalDir()));
    //
    if (!(mSightDelay == 0 && mIsOtherKick && !mIsHearBallVel)) {
      if (mSightDelay == 0 && Ball().GetVelEps() <= 0.32 &&
          eps > Ball().GetVelEps() &&
          (relVel.Dist(Ball().GetVel()) < Ball().GetVelEps())) {
        /*
                char filename[25] = {0};
                sprintf(filename , "ballinfo_%d.txt" , mSelfUnum);

                std::ofstream file(filename , std::ios::app);
                file << mpWorldState->CurrentTime().T() << "\t" <<
           mpWorldState->CurrentTime().S() << "\t" << relVel.X() << "\t" <<
           relVel.Y() << "\t" << Ball().GetVel().X() << "\t" <<
           Ball().GetVel().Y() << std::endl;

                file.close();
                */
        relVel = Ball().GetVel();
        eps = Ball().GetVelEps();
      } else if (mSightDelay == 0 && Ball().GetVelEps() <= 0.32 &&
                 eps == Ball().GetVelEps() &&
                 (relVel.Dist(Ball().GetVel()) < Ball().GetVelEps())) {
        relVel = (relVel + Ball().GetVel()) / 2;
      }
    }

    Ball().UpdateVelEps(eps);
    Ball().UpdateVel(relVel, mSightDelay, mBallConf);
  }

  //利用位置相减修正.
  if (mpObserver->Ball().GetDist().time() ==
      mpObserver->LatestSightTime()) //看到球的位置情况
  {
    /*		if (//mpObserver->Ball().Dist() <
       ServerParam::instance().visibleDistance() * 2 &&
                            (mpWorldState->GetHistory(1 +
       mSightDelay)->GetBall().GetPosDelay() == 0 || (mpWorldState->GetHistory(1
       + mSightDelay)->GetBall().GetPos().Dist(SelfState().GetPos()) <
       ServerParam::instance().visibleDistance() - 0.15 &&
       mpWorldState->GetHistory(1 + mSightDelay)->GetBall().GetPosDelay() <
       2)))*/

    if (mpWorldState->GetHistory(1 + mSightDelay)) {
      if (mpWorldState->GetHistory(1 + mSightDelay)->GetBall().GetPosDelay() <
          2) //距离近到一定程度才可以用
      {
        Vector vel = GetBall().GetPos() -
                     mpWorldState->GetHistory(1 + mSightDelay)->Ball().GetPos();

        // use  speed of self sense instead of pos of self sight to reduce the
        // error
        if (GetBall().GetPosEps() > ServerParam::instance().playerSize() ||
            (!mpObserver->Sense().IsCollideWithBall() &&
             !mpObserver->Sense().IsCollideWithPlayer() &&
             !mpObserver->Sense().IsCollideWithPost())) {
          //碰撞时server强制移动人,如果用位置相减修正,会引入最大0.3(player
          //size)的误差,08也应该有这个bug
          Vector self_vel = GetSelfVelFromSightDelay(mSightDelay);

          if (mpObserver->Sense().IsCollideWithBall() ||
              mpObserver->Sense().IsCollideWithPlayer() ||
              mpObserver->Sense().IsCollideWithPost()) {
            self_vel /= -0.1;
          }

          self_vel /= PlayerParam::instance()
                          .HeteroPlayer(SelfState().GetPlayerType())
                          .playerDecay();
          Vector self_vel_pos =
              SelfState().GetPos() - mpWorldState->GetHistory(1 + mSightDelay)
                                         ->Teammate(GetSelfUnum())
                                         .GetPos();
          vel += self_vel - self_vel_pos;
        }

        if (mpObserver->GetBallKickTime() != mpObserver->LatestSightTime() &&
            !mpObserver->Sense().IsCollideWithBall()) {
          if (mpWorldState->GetHistory(1 + mSightDelay)
                  ->GetBall()
                  .GetVelConf() > 0.9) {
            Vector old_vel =
                mpWorldState->GetHistory(1 + mSightDelay)->GetBall().GetVel();

            if (fabs(old_vel.X() - vel.X()) + fabs(old_vel.Y() - vel.Y()) <
                    0.30 &&
                fabs(old_vel.Mod() / (vel.Mod() + FLOAT_EPS) - 1.0) < 0.16) {
              vel = (old_vel + vel) / 2;
            }
          }
        } else if (!mpObserver->Sense().IsCollideWithBall()) {
          if (mpWorldState->GetHistory(1 + mSightDelay)
                  ->GetBall()
                  .GetVelConf() > 0.9) {
            if (mpObserver->GetBallKickTime() ==
                mpObserver->LatestSightTime()) {
              Vector old_vel = mpObserver->GetBallVelByKick() /
                               ServerParam::instance().ballDecay();
              if (fabs(old_vel.X() - vel.X()) + fabs(old_vel.Y() - vel.Y()) <
                      0.30 &&
                  fabs(old_vel.Mod() / (vel.Mod() + FLOAT_EPS) - 1.0) < 0.16) {
                vel = (old_vel + vel) / 2;
              }
            }
          }
        } else if (mpObserver->Sense().IsCollideWithBall()) {
          vel *= -0.1;
        }

        vel *= ServerParam::instance().ballDecay();

        if (vel.Mod() > ServerParam::instance().ballSpeedMax()) {
          vel = Polar2Vector(ServerParam::instance().ballSpeedMax(), vel.Dir());
        }

        double eps1 = PlayerParam::instance().GetEpsInSight(
            (mpWorldState->GetHistory(1 + mSightDelay)->GetBall().GetPos() -
             mpWorldState->GetHistory(1 + mSightDelay)
                 ->GetTeammate(mSelfUnum)
                 .GetPos())
                .Mod());
        double eps2 =
            PlayerParam::instance().GetEpsInSight(mpObserver->Ball().Dist());
        double eps = eps1 + eps2;

        if (mpObserver->Sense().IsCollideWithPlayer() ||
            mpObserver->Sense().IsCollideWithPost()) {
          eps += ServerParam::instance().playerSize() *
                 ServerParam::instance().ballDecay();
        } else if (mpObserver->Sense().IsCollideWithBall()) {
          eps += ServerParam::instance().playerSize() *
                 ServerParam::instance().ballDecay() * 0.1;
        }

        //没有视觉事一定更新, 有角度视觉是作为修正
        if (mpObserver->Ball().Dist() <
            2 * ServerParam::instance().visibleDistance()) {
          if (mpWorldState->GetHistory(1 + mSightDelay)
                      ->GetBall()
                      .GetPosDelay() == 0 ||
              (mpWorldState->GetHistory(1 + mSightDelay)
                       ->GetBall()
                       .GetPos()
                       .Dist(SelfState().GetPos()) <
                   ServerParam::instance().visibleDistance() - 0.15 &&
               mpWorldState->GetHistory(1 + mSightDelay)
                       ->GetBall()
                       .GetPosDelay() == 1) ||
              (!mIsHearBallVel && mIsOtherKick)) {
            if (Ball().GetVelDelay() > mSightDelay + 1 ||
                eps < Ball().GetVelEps() ||
                (Ball().GetVelDelay() != 0 &&
                 vel.Dist(Ball().GetVel()) > Ball().GetVelEps() &&
                 mIsOtherMayKick)) {
              /*	char filename[25] = {0};
sprintf(filename , "ballinfo_%d.txt" , mSelfUnum);

std::ofstream file(filename , std::ios::app);
file << mpWorldState->CurrentTime().T() << "\t" <<
mpWorldState->CurrentTime().S() << "\t" << vel.X() << "\t" << vel.Y() << "\t" <<
Ball().GetVel().X() << "\t" << Ball().GetVel().Y() << std::endl;

file.close();
               */
              Ball().UpdateVelEps(eps);
              Ball().UpdateVel(vel, mSightDelay, mBallConf);
            }
          }
        }
        //测试结果非常不好 先注释掉
        else {
          if (Ball().GetVelDelay() > mSightDelay && !mIsHearBallVel &&
              mIsOtherKick) {
            /*
    char filename[25] = {0};
    sprintf(filename , "ballinfo_%d.txt" , mSelfUnum);

    std::ofstream file(filename , std::ios::app);
    file << mpWorldState->CurrentTime().T() << "\t" <<
    mpWorldState->CurrentTime().S() << "\t" << vel.X() << "\t" << vel.Y() <<
    "\t" << Ball().GetVel().X() << "\t" << Ball().GetVel().Y() << "\t" << eps <<
    "\t" << Ball().GetVelEps() << std::endl;

    file.close();
             */
            Ball().UpdateVelEps(eps);
            Ball().UpdateVel(vel, mSightDelay, mBallConf);
          }
        }
      }
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4d0, %rsp            # imm = 0x4D0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0xb7ab0
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0x28a90
movq %rax, %rdi
callq 0x28aa0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x2e8(%rbp)
movq (%rax), %rdi
callq 0xbc870
movq -0x2e8(%rbp), %rdi
movq %rax, %rsi
callq 0x120a0
testb $0x1, %al
jne 0xb12df
jmp 0xb1a22
callq 0x798a0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x2f8(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movq -0x2f8(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xbd220
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0x10(%rbp)
movq (%rax), %rdi
callq 0x28970
cmpl $0x26, (%rax)
je 0xb1392
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28970
cmpl $0x27, (%rax)
je 0xb1392
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28970
cmpl $0x29, (%rax)
je 0xb1392
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28970
cmpl $0x2b, (%rax)
je 0xb1392
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28970
cmpl $0x2c, (%rax)
je 0xb1392
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28970
cmpl $0x2d, (%rax)
jne 0xb13c6
callq 0x855e0
movq %rax, %rdi
callq 0x8b2d0
movsd 0xfc61(%rip), %xmm0     # 0xc1008
addsd (%rax), %xmm0
movsd %xmm0, -0x18(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x12a90
movsd (%rax), %xmm0
movsd %xmm0, -0x10(%rbp)
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb13e3
jmp 0xb1421
movq -0x2f0(%rbp), %rdi
callq 0xbcea0
movq %rax, %rdi
callq 0x57020
movsd (%rax), %xmm0
movsd %xmm0, -0x300(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x12f10
movsd -0x300(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, -0x10(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0xbcea0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x2f0(%rbp), %rdi
movq %rax, -0x320(%rbp)
movl 0x28(%rdi), %esi
callq 0xbd3c0
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0x328(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd470
movsd -0x328(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, -0x40(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x112c0
movq -0x320(%rbp), %rdi
movsd %xmm0, -0x38(%rbp)
movsd %xmm1, -0x30(%rbp)
leaq -0x38(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x28(%rbp)
movsd %xmm1, -0x20(%rbp)
callq 0x798a0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x318(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movq -0x318(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xbca60
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
movsd -0x10(%rbp), %xmm1
addsd -0x48(%rbp), %xmm1
movsd 0x1100e(%rip), %xmm2    # 0xc2510
callq 0xb7d40
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x310(%rbp)
callq 0xbc740
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x310(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x308(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x8b250
movsd -0x308(%rbp), %xmm0
movsd 0xff4e(%rip), %xmm1     # 0xc14b0
mulsd (%rax), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xb194f
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb159b
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xb159b
movq -0x2f0(%rbp), %rax
testb $0x1, 0x35(%rax)
je 0xb194f
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb1686
movq -0x2f0(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x330(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x330(%rbp), %xmm0
ucomisd (%rax), %xmm0
jbe 0xb1686
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x1d6d0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x338(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x338(%rbp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb1686
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movq -0x2f0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x48(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq (%rax), %rcx
movq %rcx, -0x28(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0xb194d
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb185b
movq -0x2f0(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x340(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x340(%rbp), %xmm0
ucomisd (%rax), %xmm0
jbe 0xb185b
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x1d6d0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x348(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x348(%rbp), %xmm0
ucomisd (%rax), %xmm0
jb 0xb185b
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
jne 0xb185b
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xbcf20
testb $0x1, %al
jne 0xb1856
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x10ed0
cmpl $0x1, %eax
jne 0xb1856
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x1ddd0
cmpl $0x0, %eax
jne 0xb1856
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x110a0
movsd %xmm0, -0x68(%rbp)
movsd %xmm1, -0x60(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xbd960
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x58(%rbp)
movsd %xmm1, -0x50(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x2f0(%rbp), %rdi
movq %rax, -0x350(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movq %rax, %rsi
leaq -0x58(%rbp), %rdi
callq 0x13320
movq -0x350(%rbp), %rdi
movsd %xmm0, -0x88(%rbp)
movsd %xmm1, -0x80(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x78(%rbp)
movsd %xmm1, -0x70(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0xb194b
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb1949
movq -0x2f0(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x358(%rbp)
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd -0x358(%rbp), %xmm0
ucomisd (%rax), %xmm0
jne 0xb1949
jp 0xb1949
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x1d6d0
movaps %xmm0, %xmm1
movsd -0x48(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb1949
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x11360
movsd %xmm0, -0xa8(%rbp)
movsd %xmm1, -0xa0(%rbp)
leaq -0xa8(%rbp), %rdi
movsd 0xfb92(%rip), %xmm0     # 0xc14b0
callq 0x1eef0
movsd %xmm0, -0x98(%rbp)
movsd %xmm1, -0x90(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0xb194b
jmp 0xb194d
jmp 0xb194f
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x360(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x8b250
movsd -0x360(%rbp), %xmm0
ucomisd (%rax), %xmm0
jbe 0xb19c8
movq -0x28(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xc0(%rbp)
movsd -0xc8(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
callq 0xb7de0
movsd %xmm0, -0xb8(%rbp)
movsd %xmm1, -0xb0(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
addq $0x8, %rdi
movsd -0x48(%rbp), %xmm0
callq 0xbc830
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movq -0x2f0(%rbp), %rax
movl 0x28(%rax), %edx
movsd 0x20(%rax), %xmm0
leaq -0x28(%rbp), %rsi
callq 0x142f0
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
xorl %esi, %esi
callq 0xbc810
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd9b0
movq %rax, %rdi
callq 0x28aa0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x368(%rbp)
movq (%rax), %rdi
callq 0xbc870
movq -0x368(%rbp), %rdi
movq %rax, %rsi
callq 0x120a0
testb $0x1, %al
jne 0xb1a72
jmp 0xb22f9
movq -0x2f0(%rbp), %rax
movsd 0xf58f(%rip), %xmm0     # 0xc1010
movsd %xmm0, -0xe0(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd470
movq %rax, %rsi
leaq -0xe0(%rbp), %rdi
callq 0x112c0
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0xd8(%rbp)
movsd %xmm1, -0xd0(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd4b0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0xe8(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd4d0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0xf0(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movsd (%rax), %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd 0xf4d9(%rip), %xmm0     # 0xc1008
movsd %xmm0, -0x100(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x12a90
movsd (%rax), %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0x398(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x176f0
movsd (%rax), %xmm0
movsd %xmm0, -0x390(%rbp)
movsd 0xf4ca(%rip), %xmm0     # 0xc1050
mulsd -0xf0(%rbp), %xmm0
movsd 0xf492(%rip), %xmm1     # 0xc1028
divsd %xmm1, %xmm0
mulsd -0xf8(%rbp), %xmm0
movsd %xmm0, -0x3a0(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x17700
movsd -0x3a0(%rbp), %xmm1
movsd -0x398(%rbp), %xmm0
movsd -0x390(%rbp), %xmm2
mulsd (%rax), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0x380(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x17700
movsd (%rax), %xmm0
movsd %xmm0, -0x378(%rbp)
movsd 0xf427(%rip), %xmm0     # 0xc1050
mulsd -0xf0(%rbp), %xmm0
movsd 0xf3ef(%rip), %xmm1     # 0xc1028
divsd %xmm1, %xmm0
mulsd -0xf8(%rbp), %xmm0
movsd %xmm0, -0x388(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x176f0
movsd -0x388(%rbp), %xmm1
movsd -0x380(%rbp), %xmm0
movsd -0x378(%rbp), %xmm2
mulsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x118(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0x11a10
movq -0x2f0(%rbp), %rdi
movl 0x28(%rdi), %esi
callq 0xbd4f0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x140(%rbp)
movsd %xmm1, -0x138(%rbp)
movl 0x28(%rdi), %esi
callq 0xbd3c0
movsd %xmm0, -0x158(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x11110
movsd %xmm0, -0x150(%rbp)
movsd %xmm1, -0x148(%rbp)
leaq -0x140(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x130(%rbp)
movsd %xmm1, -0x128(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x108(%rbp)
callq 0x798a0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x370(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movq -0x370(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xbca60
movsd %xmm0, -0x160(%rbp)
movsd -0xf8(%rbp), %xmm1
movsd -0xe8(%rbp), %xmm0
movaps 0xf2d4(%rip), %xmm2     # 0xc1060
pand %xmm2, %xmm0
divsd -0xf8(%rbp), %xmm0
mulsd -0x160(%rbp), %xmm0
movsd 0x139d8(%rip), %xmm2    # 0xc5780
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x160(%rbp), %xmm0
movsd 0x139c0(%rip), %xmm2    # 0xc5780
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x178(%rbp)
movsd -0xf8(%rbp), %xmm0
movsd -0xf0(%rbp), %xmm1
movaps 0xf279(%rip), %xmm2     # 0xc1060
pand %xmm2, %xmm1
movsd 0xf25d(%rip), %xmm2     # 0xc1050
mulsd %xmm2, %xmm1
movsd 0xf229(%rip), %xmm2     # 0xc1028
divsd %xmm2, %xmm1
mulsd -0x160(%rbp), %xmm1
movsd 0x13965(%rip), %xmm2    # 0xc5778
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x106ed(%rip), %xmm1    # 0xc2510
mulsd -0x160(%rbp), %xmm1
movsd 0xf21d(%rip), %xmm2     # 0xc1050
mulsd %xmm2, %xmm1
movsd 0xf1e9(%rip), %xmm2     # 0xc1028
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x180(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x180(%rbp), %rdx
callq 0x11a10
leaq -0x170(%rbp), %rdi
callq 0x104e0
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0x160(%rbp)
cmpl $0x0, 0x28(%rax)
jne 0xb1e9b
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
jne 0xb2041
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x32aa0
movsd (%rax), %xmm0
movsd 0x138cd(%rip), %xmm1    # 0xc5788
ucomisd %xmm1, %xmm0
jbe 0xb2041
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq (%rax), %rcx
movq %rcx, -0x190(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x188(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x104e0
movsd %xmm0, -0x3c0(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x104e0
movaps %xmm0, %xmm1
movsd -0x3c0(%rbp), %xmm0
subsd %xmm1, %xmm0
movaps 0xf13c(%rip), %xmm1     # 0xc1060
pand %xmm1, %xmm0
movsd %xmm0, -0x3a8(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0xbd9d0
movsd (%rax), %xmm0
movsd %xmm0, -0x3b8(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x104e0
movaps %xmm0, %xmm1
movsd -0x3b8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x3b0(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movsd -0x3b0(%rbp), %xmm0
movsd -0x3a8(%rbp), %xmm1
divsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jb 0xb203f
leaq -0x110(%rbp), %rdi
callq 0x10520
movsd %xmm0, -0x3c8(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x10520
movsd -0x3c8(%rbp), %xmm1
subsd %xmm0, %xmm1
movaps 0xf096(%rip), %xmm0     # 0xc1060
pand %xmm0, %xmm1
movsd 0xf03a(%rip), %xmm0     # 0xc1010
ucomisd %xmm1, %xmm0
jbe 0xb203f
leaq -0x110(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x1b0(%rbp)
movsd %xmm1, -0x1a8(%rbp)
leaq -0x1b0(%rbp), %rdi
movsd 0xf4a2(%rip), %xmm0     # 0xc14b0
callq 0x1eef0
movsd %xmm0, -0x1a0(%rbp)
movsd %xmm1, -0x198(%rbp)
movq -0x1a0(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0x108(%rbp)
jmp 0xb2041
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb206c
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xb206c
movq -0x2f0(%rbp), %rax
testb $0x1, 0x36(%rax)
je 0xb22b3
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb2176
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movaps %xmm0, %xmm1
movsd 0x136f4(%rip), %xmm0    # 0xc5790
ucomisd %xmm1, %xmm0
jb 0xb2176
movq -0x2f0(%rbp), %rdi
movsd -0x160(%rbp), %xmm0
movsd %xmm0, -0x3d0(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movaps %xmm0, %xmm1
movsd -0x3d0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb2176
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq %rax, %rsi
leaq -0x110(%rbp), %rdi
callq 0x1d6d0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x3d8(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movsd -0x3d8(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xb2176
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq -0x2f0(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, -0x110(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x108(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movsd %xmm0, -0x160(%rbp)
jmp 0xb22b1
movq -0x2f0(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0xb22af
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movaps %xmm0, %xmm1
movsd 0x135ea(%rip), %xmm0    # 0xc5790
ucomisd %xmm1, %xmm0
jb 0xb22af
movq -0x2f0(%rbp), %rdi
movsd -0x160(%rbp), %xmm0
movsd %xmm0, -0x3e0(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movaps %xmm0, %xmm1
movsd -0x3e0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jne 0xb22af
jp 0xb22af
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq %rax, %rsi
leaq -0x110(%rbp), %rdi
callq 0x1d6d0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x3e8(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movsd -0x3e8(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xb22af
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq %rax, %rsi
leaq -0x110(%rbp), %rdi
callq 0x11360
movsd %xmm0, -0x1d0(%rbp)
movsd %xmm1, -0x1c8(%rbp)
leaq -0x1d0(%rbp), %rdi
movsd 0xf232(%rip), %xmm0     # 0xc14b0
callq 0x1eef0
movsd %xmm0, -0x1c0(%rbp)
movsd %xmm1, -0x1b8(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x108(%rbp)
jmp 0xb22b1
jmp 0xb22b3
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movsd -0x160(%rbp), %xmm0
callq 0xbc850
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movq -0x2f0(%rbp), %rax
movl 0x28(%rax), %edx
movsd 0x20(%rax), %xmm0
leaq -0x110(%rbp), %rsi
callq 0x142a0
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0x28a90
movq %rax, %rdi
callq 0x28aa0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x3f0(%rbp)
movq (%rax), %rdi
callq 0xbc870
movq -0x3f0(%rbp), %rdi
movq %rax, %rsi
callq 0x120a0
testb $0x1, %al
jne 0xb2349
jmp 0xb30dc
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
cmpq $0x0, %rax
je 0xb30da
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x1ddd0
cmpl $0x2, %eax
jge 0xb30d8
movq -0x2f0(%rbp), %rdi
callq 0xbc6e0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x400(%rbp)
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x32f60
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x400(%rbp), %rdi
movq %rax, %rsi
callq 0x110a0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x1e0(%rbp)
movsd %xmm1, -0x1d8(%rbp)
callq 0xbc6e0
movq %rax, %rdi
addq $0x8, %rdi
callq 0xbcf40
movsd (%rax), %xmm0
movsd %xmm0, -0x3f8(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x7b3c0
movsd -0x3f8(%rbp), %xmm0
ucomisd (%rax), %xmm0
ja 0xb24a3
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb264d
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcee0
testb $0x1, %al
jne 0xb264d
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd600
testb $0x1, %al
jne 0xb264d
movq -0x2f0(%rbp), %rdi
movl 0x28(%rdi), %esi
callq 0xbd4f0
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0x1f0(%rbp)
movsd %xmm1, -0x1e8(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb2515
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcee0
testb $0x1, %al
jne 0xb2515
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd600
testb $0x1, %al
jne 0xb2515
jmp 0xb2538
movsd 0x11063(%rip), %xmm0    # 0xc3580
movsd %xmm0, -0x1f8(%rbp)
leaq -0x1f0(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x98290
callq 0x798a0
movq -0x2f0(%rbp), %rdi
movq %rax, -0x418(%rbp)
callq 0xbc740
movq %rax, %rdi
callq 0x10a60
movq -0x418(%rbp), %rdi
movl %eax, -0x1fc(%rbp)
leaq -0x1fc(%rbp), %rsi
callq 0x129d0
movq %rax, %rdi
callq 0x12fe0
movq %rax, %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x98290
movq -0x2f0(%rbp), %rdi
callq 0xbc740
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x408(%rbp)
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq -0x2f0(%rbp), %rdi
movq %rax, -0x410(%rbp)
callq 0xbd620
movq -0x410(%rbp), %rdi
movl %eax, -0x214(%rbp)
leaq -0x214(%rbp), %rsi
callq 0x1a9d0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x408(%rbp), %rdi
movq %rax, %rsi
callq 0x110a0
movsd %xmm0, -0x210(%rbp)
movsd %xmm1, -0x208(%rbp)
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x110a0
movsd %xmm0, -0x228(%rbp)
movsd %xmm1, -0x220(%rbp)
leaq -0x1e0(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x32ae0
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0xbda10
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x230(%rbp)
movq (%rax), %rdi
callq 0xbc870
movq %rax, %rsi
leaq -0x230(%rbp), %rdi
callq 0x175f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x419(%rbp)
jne 0xb2695
jmp 0xb26b4
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
xorb $-0x1, %al
movb %al, -0x419(%rbp)
movb -0x419(%rbp), %al
testb $0x1, %al
jne 0xb26c3
jmp 0xb289d
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
callq 0x32aa0
movsd (%rax), %xmm0
movsd 0x10173(%rip), %xmm1    # 0xc2868
ucomisd %xmm1, %xmm0
jbe 0xb2898
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
callq 0x10a80
movq (%rax), %rcx
movq %rcx, -0x240(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x238(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x176f0
movsd (%rax), %xmm0
movsd %xmm0, -0x438(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x176f0
movsd -0x438(%rbp), %xmm0
subsd (%rax), %xmm0
movaps 0xe8ef(%rip), %xmm1     # 0xc1060
pand %xmm1, %xmm0
movsd %xmm0, -0x428(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x17700
movsd (%rax), %xmm0
movsd %xmm0, -0x430(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x17700
movsd -0x430(%rbp), %xmm0
movsd -0x428(%rbp), %xmm1
subsd (%rax), %xmm0
movaps 0xe8a4(%rip), %xmm2     # 0xc1060
pand %xmm2, %xmm0
addsd %xmm0, %xmm1
movsd 0xf1ac(%rip), %xmm0     # 0xc1978
ucomisd %xmm1, %xmm0
jbe 0xb2896
leaq -0x240(%rbp), %rdi
callq 0x104e0
movsd %xmm0, -0x440(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x104e0
movsd -0x440(%rbp), %xmm1
movsd 0xe802(%rip), %xmm2     # 0xc1008
addsd %xmm2, %xmm0
divsd %xmm0, %xmm1
movsd 0xe7fa(%rip), %xmm0     # 0xc1010
subsd %xmm0, %xmm1
movaps 0xe83f(%rip), %xmm0     # 0xc1060
pand %xmm0, %xmm1
movsd 0x1004b(%rip), %xmm0    # 0xc2878
ucomisd %xmm1, %xmm0
jbe 0xb2896
leaq -0x240(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x260(%rbp)
movsd %xmm1, -0x258(%rbp)
leaq -0x260(%rbp), %rdi
movsd 0xec4b(%rip), %xmm0     # 0xc14b0
callq 0x1eef0
movsd %xmm0, -0x250(%rbp)
movsd %xmm1, -0x248(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x248(%rbp), %rax
movq %rax, -0x1d8(%rbp)
jmp 0xb2898
jmp 0xb2b21
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb2add
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
callq 0x32aa0
movsd (%rax), %xmm0
movsd 0xff7a(%rip), %xmm1     # 0xc2868
ucomisd %xmm1, %xmm0
jbe 0xb2adb
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0xbda10
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x268(%rbp)
movq (%rax), %rdi
callq 0xbc870
movq %rax, %rsi
leaq -0x268(%rbp), %rdi
callq 0x120a0
testb $0x1, %al
jne 0xb2938
jmp 0xb2ad9
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0xbda30
movq %rax, -0x460(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movq -0x460(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x1eef0
movsd %xmm0, -0x278(%rbp)
movsd %xmm1, -0x270(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x176f0
movsd (%rax), %xmm0
movsd %xmm0, -0x458(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x176f0
movsd -0x458(%rbp), %xmm0
subsd (%rax), %xmm0
movaps 0xe6ae(%rip), %xmm1     # 0xc1060
pand %xmm1, %xmm0
movsd %xmm0, -0x448(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x17700
movsd (%rax), %xmm0
movsd %xmm0, -0x450(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x17700
movsd -0x450(%rbp), %xmm0
movsd -0x448(%rbp), %xmm1
subsd (%rax), %xmm0
movaps 0xe663(%rip), %xmm2     # 0xc1060
pand %xmm2, %xmm0
addsd %xmm0, %xmm1
movsd 0xef6b(%rip), %xmm0     # 0xc1978
ucomisd %xmm1, %xmm0
jbe 0xb2ad7
leaq -0x278(%rbp), %rdi
callq 0x104e0
movsd %xmm0, -0x468(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x104e0
movsd -0x468(%rbp), %xmm1
movsd 0xe5c1(%rip), %xmm2     # 0xc1008
addsd %xmm2, %xmm0
divsd %xmm0, %xmm1
movsd 0xe5b9(%rip), %xmm0     # 0xc1010
subsd %xmm0, %xmm1
movaps 0xe5fe(%rip), %xmm0     # 0xc1060
pand %xmm0, %xmm1
movsd 0xfe0a(%rip), %xmm0     # 0xc2878
ucomisd %xmm1, %xmm0
jbe 0xb2ad7
leaq -0x278(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x11360
movsd %xmm0, -0x298(%rbp)
movsd %xmm1, -0x290(%rbp)
leaq -0x298(%rbp), %rdi
movsd 0xea0a(%rip), %xmm0     # 0xc14b0
callq 0x1eef0
movsd %xmm0, -0x288(%rbp)
movsd %xmm1, -0x280(%rbp)
movq -0x288(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x280(%rbp), %rax
movq %rax, -0x1d8(%rbp)
jmp 0xb2ad9
jmp 0xb2adb
jmp 0xb2b1f
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb2afa
jmp 0xb2b1d
movsd 0x10a7e(%rip), %xmm0    # 0xc3580
movsd %xmm0, -0x2a0(%rbp)
leaq -0x1e0(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x113f0
jmp 0xb2b1f
jmp 0xb2b21
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movq %rax, %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x113f0
leaq -0x1e0(%rbp), %rdi
callq 0x104e0
movsd %xmm0, -0x470(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x23d60
movsd -0x470(%rbp), %xmm0
ucomisd (%rax), %xmm0
jbe 0xb2bd3
callq 0x855e0
movq %rax, %rdi
callq 0x23d60
movq %rax, -0x478(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x10520
movq -0x478(%rbp), %rdi
movsd %xmm0, -0x2b8(%rbp)
leaq -0x2b8(%rbp), %rsi
callq 0x112c0
movsd %xmm0, -0x2b0(%rbp)
movsd %xmm1, -0x2a8(%rbp)
movq -0x2b0(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x2a8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
callq 0x798a0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x488(%rbp)
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x490(%rbp)
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq -0x2f0(%rbp), %rsi
movq %rax, %rdi
addq $0x14, %rsi
callq 0x12520
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x490(%rbp), %rdi
movq %rax, %rsi
callq 0x110a0
movsd %xmm0, -0x2d0(%rbp)
movsd %xmm1, -0x2c8(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x104e0
movq -0x488(%rbp), %rdi
callq 0xbca60
movsd %xmm0, -0x2c0(%rbp)
callq 0x798a0
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movq %rcx, -0x480(%rbp)
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movq -0x480(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xbca60
movq -0x2f0(%rbp), %rax
movsd %xmm0, -0x2d8(%rbp)
movsd -0x2c0(%rbp), %xmm0
addsd -0x2d8(%rbp), %xmm0
movsd %xmm0, -0x2e0(%rbp)
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcee0
testb $0x1, %al
jne 0xb2d18
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbd600
testb $0x1, %al
jne 0xb2d18
jmp 0xb2d64
callq 0x855e0
movq %rax, %rdi
callq 0x7b3c0
movsd (%rax), %xmm0
movsd %xmm0, -0x498(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movsd -0x498(%rbp), %xmm0
movsd (%rax), %xmm2
movsd -0x2e0(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e0(%rbp)
jmp 0xb2dd5
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x119d0
movq %rax, %rdi
callq 0xbcec0
testb $0x1, %al
jne 0xb2d81
jmp 0xb2dd3
callq 0x855e0
movq %rax, %rdi
callq 0x7b3c0
movsd (%rax), %xmm0
movsd %xmm0, -0x4a0(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x113d0
movsd -0x4a0(%rbp), %xmm0
mulsd (%rax), %xmm0
movsd -0x2e0(%rbp), %xmm1
movsd 0xf74d(%rip), %xmm2     # 0xc2510
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e0(%rbp)
jmp 0xb2dd5
movq -0x2f0(%rbp), %rax
movq (%rax), %rdi
callq 0x28a70
movq %rax, %rdi
callq 0xbd3a0
movsd (%rax), %xmm0
movsd %xmm0, -0x4a8(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x8b250
movsd -0x4a8(%rbp), %xmm1
movsd 0xe69b(%rip), %xmm0     # 0xc14b0
mulsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb3054
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x1ddd0
cmpl $0x0, %eax
je 0xb2f32
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x2f0(%rbp), %rdi
movq %rax, -0x4b8(%rbp)
callq 0xbc740
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11090
movq -0x4b8(%rbp), %rdi
movq %rax, %rsi
callq 0x1d6d0
movsd %xmm0, -0x4b0(%rbp)
callq 0x855e0
movq %rax, %rdi
callq 0x8b250
movsd -0x4b0(%rbp), %xmm1
movsd (%rax), %xmm0
movsd 0x128c1(%rip), %xmm2    # 0xc5798
subsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb2f10
movq -0x2f0(%rbp), %rax
movq 0x8(%rax), %rdi
movl 0x28(%rax), %esi
addl $0x1, %esi
callq 0xab550
movq %rax, %rdi
callq 0x10570
movq %rax, %rdi
addq $0x8, %rdi
callq 0x1ddd0
cmpl $0x1, %eax
je 0xb2f32
movq -0x2f0(%rbp), %rax
testb $0x1, 0x36(%rax)
jne 0xb304f
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xb304f
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x28a30
movq -0x2f0(%rbp), %rcx
movl 0x28(%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jg 0xb3007
movq -0x2f0(%rbp), %rdi
movsd -0x2e0(%rbp), %xmm0
movsd %xmm0, -0x4c0(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movsd -0x4c0(%rbp), %xmm1
ucomisd %xmm1, %xmm0
ja 0xb3007
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x28a30
cmpl $0x0, %eax
je 0xb304d
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x10a80
movq %rax, %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x1d6d0
movq -0x2f0(%rbp), %rdi
movsd %xmm0, -0x4c8(%rbp)
callq 0xbc760
movq %rax, %rdi
callq 0xbd9f0
movaps %xmm0, %xmm1
movsd -0x4c8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb304d
movq -0x2f0(%rbp), %rax
testb $0x1, 0x34(%rax)
je 0xb304d
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movsd -0x2e0(%rbp), %xmm0
callq 0xbc850
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movq -0x2f0(%rbp), %rax
movl 0x28(%rax), %edx
movsd 0x20(%rax), %xmm0
leaq -0x1e0(%rbp), %rsi
callq 0x142a0
jmp 0xb304f
jmp 0xb30d6
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
callq 0x28a30
movq -0x2f0(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jle 0xb30d4
movq -0x2f0(%rbp), %rax
testb $0x1, 0x36(%rax)
jne 0xb30d4
movq -0x2f0(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xb30d4
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movsd -0x2e0(%rbp), %xmm0
callq 0xbc850
movq -0x2f0(%rbp), %rdi
callq 0xbc760
movq %rax, %rdi
movq -0x2f0(%rbp), %rax
movl 0x28(%rax), %edx
movsd 0x20(%rax), %xmm0
leaq -0x1e0(%rbp), %rsi
callq 0x142a0
jmp 0xb30d6
jmp 0xb30d8
jmp 0xb30da
jmp 0xb30dc
addq $0x4d0, %rsp            # imm = 0x4D0
popq %rbp
retq
nopw %cs:(%rax,%rax)