// File: canzarlab[P]Trajan/geno/lbfgsb.cpp
// Function: LBFGSB::cauchyPoint()
void LBFGSB::cauchyPoint() {
  _c = Vector::Zero(2 * _S.cols());

  Vector bnd(_x.size());
  Vector d(_x.size());
  typedef std::pair<Scalar, Index> Pair;
  std::vector<Pair> vector;
  vector.reserve(_x.size());

  for (Index i = 0; i < _g.size(); ++i) {
    Scalar t = std::numeric_limits<Scalar>::infinity();
    if (_g[i] < 0) {
      t = (_x[i] - _ub[i]) / _g[i];
      bnd[i] = _ub[i];
    } else if (_g[i] > 0) {
      t = (_x[i] - _lb[i]) / _g[i];
      bnd[i] = _lb[i];
    }
    if (t == 0) {
      d[i] = 0;
      _workingSet[i] = 0;
    } else {
      d[i] = -_g[i];
      _workingSet[i] = 1;
    }
    //	    vector.emplace_back(t, i);
    vector.push_back(Pair(t, i));
  }

  auto nonzero_begin = std::partition(vector.begin(), vector.end(),
      [](Pair const& p) {return p.first == 0.0;});
  auto heapComp = [](Pair const& p1, Pair const& p2)
  {return p1.first >= p2.first;};
  std::make_heap(nonzero_begin, vector.end(), heapComp);

  // Initialize
  Vector p(2 * _S.cols());
  p.head(_S.cols()) = _S.transpose() * d;
  p.tail(_S.cols()) = _Y.transpose() * d;

  Scalar f1 = -d.dot(d);
  Scalar f2 = -_theta * f1 - p.transpose() * _M * p;

  _xCP = _x;
  Scalar tOld = 0;

  Scalar deltaTMin = 0;
  auto it = nonzero_begin;
  auto heap_end = vector.end();
  for (; it != heap_end; --heap_end) {
    deltaTMin = (0 == f1 && 0 == f2) ? 0 : -f1/f2;  // TODO think about just f2 == 0
    Index b = it->second;
    Scalar tThis = it->first;
    Scalar deltaT = tThis - tOld;

    if (deltaTMin < deltaT) break;
    std::pop_heap(it, heap_end, heapComp);

    assert(0 != _g[b]);
    _xCP(b) = bnd(b);
    Scalar z = _xCP(b) - _x(b);
    _c = _c + deltaT*p;
    Vector tmp(2 * _S.cols());// = _W.row(b);
    tmp.head(_S.cols()) = _S.row(b);
    tmp.tail(_S.cols()) = _Y.row(b);

    f1 = f1 + deltaT*f2 + _g(b)*_g(b) + _theta*_g(b)*z - _g(b)*(tmp.dot(_M*_c));
    // TODO
    // -1 should + 3
    f2 = f2 - 1 * _theta*_g(b)*_g(b) - 2*_g(b)*(tmp.dot(_M*p)) -
      _g(b) * _g(b)*(tmp.dot(_M*tmp));
    p = p + _g(b)*tmp;
    d(b) = 0;
    tOld = tThis;
    _workingSet[b] = 0;
  }

  deltaTMin = std::max(deltaTMin, Scalar(0.0));
  tOld = tOld + deltaTMin;
  _xCP += tOld * d;

  _c = _c + deltaTMin*p;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7e0, %rsp            # imm = 0x7E0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x4e8(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, %rsi
addq %rsi, %rsi
leaq -0x20(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x13c30
movq -0x4f0(%rbp), %rsi
movq -0x4e8(%rbp), %rdi
addq $0x200, %rdi            # imm = 0x200
callq 0x28100
movq -0x4e8(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0x4e0(%rbp)
callq 0x14700
movq %rax, -0x38(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x13bd0
movq -0x4e0(%rbp), %rdi
callq 0x14700
movq %rax, -0x4d8(%rbp)
jmp 0x219d3
movq -0x4d8(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x13bd0
jmp 0x219ed
leaq -0x78(%rbp), %rdi
callq 0x28130
movq -0x4e8(%rbp), %rdi
addq $0x10, %rdi
callq 0x14700
movq %rax, -0x4f8(%rbp)
jmp 0x21a0f
movq -0x4f8(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x28150
jmp 0x21a21
movq $0x0, -0x80(%rbp)
movq -0x4e8(%rbp), %rdi
movq -0x80(%rbp), %rax
movq %rax, -0x508(%rbp)
addq $0x40, %rdi
callq 0x14700
movq %rax, -0x500(%rbp)
jmp 0x21a4d
movq -0x508(%rbp), %rax
movq -0x500(%rbp), %rcx
cmpq %rcx, %rax
jge 0x21e41
callq 0x26640
movq -0x4e8(%rbp), %rdi
movsd %xmm0, -0x88(%rbp)
addq $0x40, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x510(%rbp)
jmp 0x21a8e
movq -0x510(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd (%rax), %xmm0
jbe 0x21bca
movq -0x4e8(%rbp), %rdi
addq $0x10, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x518(%rbp)
jmp 0x21abf
movq -0x4e8(%rbp), %rdi
movq -0x518(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x528(%rbp)
addq $0x30, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x520(%rbp)
jmp 0x21aef
movq -0x4e8(%rbp), %rdi
movsd -0x528(%rbp), %xmm0
movq -0x520(%rbp), %rax
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x538(%rbp)
addq $0x40, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x530(%rbp)
jmp 0x21b2b
movq -0x4e8(%rbp), %rdi
movsd -0x538(%rbp), %xmm0
movq -0x530(%rbp), %rax
movsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
addq $0x30, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x540(%rbp)
jmp 0x21b67
movq -0x540(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x550(%rbp)
movq -0x80(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x26650
movq %rax, -0x548(%rbp)
jmp 0x21b90
movq -0x548(%rbp), %rax
movsd -0x550(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x21d02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x22c47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x22c35
movq -0x4e8(%rbp), %rdi
addq $0x40, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x558(%rbp)
jmp 0x21be7
movq -0x558(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x21d00
movq -0x4e8(%rbp), %rdi
addq $0x10, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x560(%rbp)
jmp 0x21c1c
movq -0x4e8(%rbp), %rdi
movq -0x560(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x570(%rbp)
addq $0x20, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x568(%rbp)
jmp 0x21c4c
movq -0x4e8(%rbp), %rdi
movsd -0x570(%rbp), %xmm0
movq -0x568(%rbp), %rax
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x580(%rbp)
addq $0x40, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x578(%rbp)
jmp 0x21c88
movq -0x4e8(%rbp), %rdi
movsd -0x580(%rbp), %xmm0
movq -0x578(%rbp), %rax
movsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
addq $0x20, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x588(%rbp)
jmp 0x21cc4
movq -0x588(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x598(%rbp)
movq -0x80(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x26650
movq %rax, -0x590(%rbp)
jmp 0x21ced
movq -0x590(%rbp), %rax
movsd -0x598(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x21d02
movsd -0x88(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x21d6c
jp 0x21d6c
movq -0x80(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x26650
movq %rax, -0x5a0(%rbp)
jmp 0x21d2b
movq -0x4e8(%rbp), %rdi
movq -0x5a0(%rbp), %rax
movq $0x0, (%rax)
addq $0x1e0, %rdi            # imm = 0x1E0
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x5a8(%rbp)
jmp 0x21d59
movq -0x5a8(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
jmp 0x21e03
movq -0x4e8(%rbp), %rdi
addq $0x40, %rdi
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x5b0(%rbp)
jmp 0x21d89
movq -0x5b0(%rbp), %rax
movsd (%rax), %xmm0
movaps 0xe9625(%rip), %xmm1    # 0x10b3c0
pxor %xmm1, %xmm0
movsd %xmm0, -0x5c0(%rbp)
movq -0x80(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x26650
movq %rax, -0x5b8(%rbp)
jmp 0x21dbd
movq -0x4e8(%rbp), %rdi
movq -0x5b8(%rbp), %rax
movsd -0x5c0(%rbp), %xmm0
movsd %xmm0, (%rax)
addq $0x1e0, %rdi            # imm = 0x1E0
movq -0x80(%rbp), %rsi
callq 0x26650
movq %rax, -0x5c8(%rbp)
jmp 0x21df0
movq -0x5c8(%rbp), %rax
movsd 0xebe69(%rip), %xmm0    # 0x10dc68
movsd %xmm0, (%rax)
leaq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rsi
leaq -0x80(%rbp), %rdx
callq 0x28280
jmp 0x21e1c
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x28250
jmp 0x21e2e
jmp 0x21e30
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x21a29
leaq -0x78(%rbp), %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x282b0
movq -0x5d8(%rbp), %rdi
movq %rax, -0xa8(%rbp)
callq 0x282e0
movq %rax, -0xb0(%rbp)
movq -0xa8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
callq 0x22c60
movq %rax, -0x5d0(%rbp)
jmp 0x21e87
movq -0x5d0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x282e0
movq %rax, -0xc8(%rbp)
movq -0xc0(%rbp), %rdi
movq -0xc8(%rbp), %rsi
callq 0x22cb0
jmp 0x21ec8
movq -0x4e8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x5e0(%rbp)
jmp 0x21ee4
movq -0x5e0(%rbp), %rax
addq %rax, %rax
movq %rax, -0xe8(%rbp)
leaq -0xe0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x13bd0
jmp 0x21f0a
movq -0x4e8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26900
movq %rax, -0x5e8(%rbp)
jmp 0x21f26
movq -0x5e8(%rbp), %rax
movq %rax, -0x100(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x26930
movq %rdx, -0x5f8(%rbp)
movq %rax, -0x5f0(%rbp)
jmp 0x21f54
movq -0x4e8(%rbp), %rdi
movq -0x5f8(%rbp), %rax
movq -0x5f0(%rbp), %rcx
movq %rcx, -0xf8(%rbp)
movq %rax, -0xf0(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x600(%rbp)
jmp 0x21f8c
movq -0x600(%rbp), %rdx
leaq -0x138(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x14810
jmp 0x21fa8
leaq -0x138(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x28310
jmp 0x21fbd
movq -0x4e8(%rbp), %rdi
addq $0xc0, %rdi
callq 0x26900
movq %rax, -0x608(%rbp)
jmp 0x21fd9
movq -0x608(%rbp), %rax
movq %rax, -0x150(%rbp)
leaq -0x150(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x26930
movq %rdx, -0x618(%rbp)
movq %rax, -0x610(%rbp)
jmp 0x22007
movq -0x4e8(%rbp), %rdi
movq -0x618(%rbp), %rax
movq -0x610(%rbp), %rcx
movq %rcx, -0x148(%rbp)
movq %rax, -0x140(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x620(%rbp)
jmp 0x2203f
movq -0x620(%rbp), %rdx
leaq -0x188(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x16040
jmp 0x2205b
leaq -0x188(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x28310
jmp 0x22070
leaq -0x48(%rbp), %rsi
movq %rsi, %rdi
callq 0x266e0
movsd %xmm0, -0x628(%rbp)
jmp 0x22086
movq -0x4e8(%rbp), %rax
movsd -0x628(%rbp), %xmm0
movapd 0xe9323(%rip), %xmm1    # 0x10b3c0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x190(%rbp)
movsd 0xd8(%rax), %xmm0
pxor %xmm1, %xmm0
movsd %xmm0, -0x640(%rbp)
movsd -0x190(%rbp), %xmm0
movsd %xmm0, -0x638(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x28350
movq %rax, -0x630(%rbp)
jmp 0x220e2
movq -0x4e8(%rbp), %rsi
movq -0x630(%rbp), %rax
movq %rax, -0x1c8(%rbp)
addq $0x110, %rsi            # imm = 0x110
leaq -0x1c8(%rbp), %rdi
callq 0x28380
movq %rdx, -0x650(%rbp)
movq %rax, -0x648(%rbp)
jmp 0x2211a
movq -0x650(%rbp), %rax
movq -0x648(%rbp), %rcx
movq %rcx, -0x1c0(%rbp)
movq %rax, -0x1b8(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0x283d0
jmp 0x22152
leaq -0x1b0(%rbp), %rdi
callq 0x28420
movsd %xmm0, -0x658(%rbp)
jmp 0x22168
movq -0x4e8(%rbp), %rdi
movsd -0x658(%rbp), %xmm1
movsd -0x638(%rbp), %xmm2
movsd -0x640(%rbp), %xmm0
mulsd %xmm2, %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x198(%rbp)
movq %rdi, %rsi
addq $0x10, %rsi
addq $0x1d0, %rdi            # imm = 0x1D0
callq 0x145a0
jmp 0x221ac
xorps %xmm0, %xmm0
movsd %xmm0, -0x1d0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x1d8(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x1e0(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x282e0
movq %rax, -0x1e8(%rbp)
leaq -0x1e0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x284a0
testb $0x1, %al
jne 0x221fc
jmp 0x22b06
xorps %xmm0, %xmm0
ucomisd -0x190(%rbp), %xmm0
jne 0x22227
jp 0x22227
xorps %xmm0, %xmm0
ucomisd -0x198(%rbp), %xmm0
jne 0x22227
jp 0x22227
xorps %xmm0, %xmm0
movsd %xmm0, -0x660(%rbp)
jmp 0x22256
movsd -0x190(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0x198(%rbp), %xmm0
movsd %xmm0, -0x660(%rbp)
movsd -0x660(%rbp), %xmm0
movsd %xmm0, -0x1d8(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x284e0
movq 0x8(%rax), %rax
movq %rax, -0x1f0(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x284e0
movsd (%rax), %xmm0
movsd %xmm0, -0x1f8(%rbp)
movsd -0x1f8(%rbp), %xmm0
subsd -0x1d0(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
movsd -0x1d8(%rbp), %xmm1
movsd -0x200(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x222d9
jmp 0x22b06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x22c29
movq -0x1e0(%rbp), %rax
movq %rax, -0x208(%rbp)
movq -0x1e8(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x208(%rbp), %rdi
movq -0x210(%rbp), %rsi
callq 0x22cf0
jmp 0x2230a
movq -0x4e8(%rbp), %rdi
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x26650
movq %rax, -0x668(%rbp)
jmp 0x2232a
movq -0x668(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd (%rax), %xmm0
jne 0x2233e
jp 0x2233e
jmp 0x22340
jmp 0x2235f
leaq 0xebb7a(%rip), %rdi     # 0x10dec1
leaq 0xebb7e(%rip), %rsi     # 0x10decc
movl $0xd7, %edx
leaq 0xebb82(%rip), %rcx     # 0x10dedc
callq 0xa2b0
movq -0x1f0(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x145f0
movq %rax, -0x670(%rbp)
jmp 0x22378
movq -0x4e8(%rbp), %rdi
movq -0x670(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x680(%rbp)
addq $0x1d0, %rdi            # imm = 0x1D0
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x678(%rbp)
jmp 0x223ae
movq -0x4e8(%rbp), %rdi
movq -0x678(%rbp), %rax
movsd -0x680(%rbp), %xmm0
movsd %xmm0, (%rax)
addq $0x1d0, %rdi            # imm = 0x1D0
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x688(%rbp)
jmp 0x223e4
movq -0x4e8(%rbp), %rdi
movq -0x688(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x698(%rbp)
addq $0x10, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x690(%rbp)
jmp 0x22417
movq -0x4e8(%rbp), %rax
movsd -0x698(%rbp), %xmm0
movq -0x690(%rbp), %rcx
movsd (%rcx), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x220(%rbp)
addq $0x200, %rax            # imm = 0x200
movq %rax, -0x6a0(%rbp)
leaq -0x290(%rbp), %rdi
leaq -0x200(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0x161e0
jmp 0x22466
movq -0x6a0(%rbp), %rsi
leaq -0x260(%rbp), %rdi
leaq -0x290(%rbp), %rdx
callq 0x28500
jmp 0x22482
movq -0x4e8(%rbp), %rdi
addq $0x200, %rdi            # imm = 0x200
leaq -0x260(%rbp), %rsi
callq 0x28570
jmp 0x2249e
movq -0x4e8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x6a8(%rbp)
jmp 0x224ba
movq -0x6a8(%rbp), %rax
addq %rax, %rax
movq %rax, -0x2a8(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x13bd0
jmp 0x224e0
movq -0x4e8(%rbp), %rsi
addq $0xa8, %rsi
movq -0x1f0(%rbp), %rdx
leaq -0x2e0(%rbp), %rdi
callq 0x269c0
jmp 0x22503
movq -0x4e8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x6b0(%rbp)
jmp 0x2251f
movq -0x6b0(%rbp), %rdx
leaq -0x318(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x14810
jmp 0x2253b
leaq -0x318(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x285a0
jmp 0x22550
movq -0x4e8(%rbp), %rsi
addq $0xc0, %rsi
movq -0x1f0(%rbp), %rdx
leaq -0x350(%rbp), %rdi
callq 0x269c0
jmp 0x22573
movq -0x4e8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0x6b8(%rbp)
jmp 0x2258f
movq -0x6b8(%rbp), %rdx
leaq -0x388(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x16040
jmp 0x225ab
leaq -0x388(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x285a0
jmp 0x225c0
movq -0x4e8(%rbp), %rdi
movsd -0x190(%rbp), %xmm1
movsd -0x200(%rbp), %xmm0
movsd -0x198(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x6c8(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x6c0(%rbp)
jmp 0x22608
movq -0x4e8(%rbp), %rdi
movq -0x6c0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6d8(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x6d0(%rbp)
jmp 0x2263b
movq -0x4e8(%rbp), %rdi
movsd -0x6c8(%rbp), %xmm1
movsd -0x6d8(%rbp), %xmm0
movq -0x6d0(%rbp), %rax
movsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x6f0(%rbp)
movsd 0xd8(%rdi), %xmm0
movsd %xmm0, -0x6e8(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x6e0(%rbp)
jmp 0x22696
movq -0x4e8(%rbp), %rdi
movsd -0x6f0(%rbp), %xmm1
movsd -0x6e8(%rbp), %xmm0
movq -0x6e0(%rbp), %rax
movsd (%rax), %xmm2
mulsd %xmm2, %xmm0
movsd -0x220(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x700(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x6f8(%rbp)
jmp 0x226ed
movq -0x4e8(%rbp), %rsi
movq -0x6f8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x718(%rbp)
movq %rsi, %rdi
addq $0x110, %rdi            # imm = 0x110
addq $0x200, %rsi            # imm = 0x200
callq 0x28650
movq %rdx, -0x710(%rbp)
movq %rax, -0x708(%rbp)
jmp 0x2272d
movq -0x710(%rbp), %rax
movq -0x708(%rbp), %rcx
movq %rcx, -0x398(%rbp)
movq %rax, -0x390(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x285e0
movsd %xmm0, -0x720(%rbp)
jmp 0x22766
movq -0x4e8(%rbp), %rdi
movsd -0x700(%rbp), %xmm0
movsd -0x720(%rbp), %xmm2
movsd -0x718(%rbp), %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x190(%rbp)
movsd -0x198(%rbp), %xmm0
movsd %xmm0, -0x738(%rbp)
movsd 0xd8(%rdi), %xmm0
movsd %xmm0, -0x730(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x728(%rbp)
jmp 0x227ce
movq -0x4e8(%rbp), %rdi
movsd -0x730(%rbp), %xmm0
movq -0x728(%rbp), %rax
movsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x748(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x740(%rbp)
jmp 0x2280d
movq -0x4e8(%rbp), %rdi
movsd -0x738(%rbp), %xmm0
movsd -0x748(%rbp), %xmm1
movq -0x740(%rbp), %rax
movsd (%rax), %xmm2
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x758(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x750(%rbp)
jmp 0x22858
movq -0x4e8(%rbp), %rdi
movq -0x750(%rbp), %rax
movsd (%rax), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x770(%rbp)
addq $0x110, %rdi            # imm = 0x110
leaq -0xe0(%rbp), %rsi
callq 0x28650
movq %rdx, -0x768(%rbp)
movq %rax, -0x760(%rbp)
jmp 0x22899
movq -0x768(%rbp), %rax
movq -0x760(%rbp), %rcx
movq %rcx, -0x3a8(%rbp)
movq %rax, -0x3a0(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x285e0
movsd %xmm0, -0x778(%rbp)
jmp 0x228d2
movq -0x4e8(%rbp), %rdi
movsd -0x758(%rbp), %xmm0
movsd -0x778(%rbp), %xmm2
movsd -0x770(%rbp), %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x788(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x780(%rbp)
jmp 0x2291a
movq -0x4e8(%rbp), %rdi
movq -0x780(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x798(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x790(%rbp)
jmp 0x2294d
movq -0x4e8(%rbp), %rdi
movsd -0x798(%rbp), %xmm0
movq -0x790(%rbp), %rax
movsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x7b0(%rbp)
addq $0x110, %rdi            # imm = 0x110
leaq -0x2a0(%rbp), %rsi
callq 0x28650
movq %rdx, -0x7a8(%rbp)
movq %rax, -0x7a0(%rbp)
jmp 0x22996
movq -0x7a8(%rbp), %rax
movq -0x7a0(%rbp), %rcx
movq %rcx, -0x3b8(%rbp)
movq %rax, -0x3b0(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x285e0
movsd %xmm0, -0x7b8(%rbp)
jmp 0x229cf
movq -0x4e8(%rbp), %rdi
movsd -0x788(%rbp), %xmm0
movsd -0x7b8(%rbp), %xmm2
movsd -0x7b0(%rbp), %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x198(%rbp)
addq $0x40, %rdi
movq -0x1f0(%rbp), %rsi
callq 0x145f0
movq %rax, -0x7c0(%rbp)
jmp 0x22a17
movq -0x7c0(%rbp), %rsi
leaq -0x428(%rbp), %rdi
leaq -0x2a0(%rbp), %rdx
callq 0x161e0
jmp 0x22a33
leaq -0x3f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x428(%rbp), %rdx
callq 0x28500
jmp 0x22a4f
leaq -0xe0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x28570
jmp 0x22a64
movq -0x1f0(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x145f0
movq %rax, -0x7c8(%rbp)
jmp 0x22a7d
movq -0x4e8(%rbp), %rdi
movq -0x7c8(%rbp), %rax
movq $0x0, (%rax)
movsd -0x1f8(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
addq $0x1e0, %rdi            # imm = 0x1E0
movq -0x1f0(%rbp), %rsi
callq 0x26650
movq %rax, -0x7d0(%rbp)
jmp 0x22abe
movq -0x7d0(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0x2a0(%rbp), %rdi
callq 0xff40
leaq -0x1e8(%rbp), %rdi
callq 0x286a0
jmp 0x221e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0xff40
jmp 0x22c29
movq $0x0, -0x430(%rbp)
leaq -0x1d8(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x14920
movq %rax, -0x7d8(%rbp)
jmp 0x22b2d
movq -0x7d8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x1d8(%rbp)
movsd -0x1d0(%rbp), %xmm0
movsd -0x1d8(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x1d0(%rbp)
leaq -0x460(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0x161e0
jmp 0x22b75
movq -0x4e8(%rbp), %rdi
addq $0x1d0, %rdi            # imm = 0x1D0
leaq -0x460(%rbp), %rsi
callq 0x286c0
jmp 0x22b91
movq -0x4e8(%rbp), %rax
addq $0x200, %rax            # imm = 0x200
movq %rax, -0x7e0(%rbp)
leaq -0x4d0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0x161e0
jmp 0x22bc1
movq -0x7e0(%rbp), %rsi
leaq -0x4a0(%rbp), %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x28500
jmp 0x22bdd
movq -0x4e8(%rbp), %rdi
addq $0x200, %rdi            # imm = 0x200
leaq -0x4a0(%rbp), %rsi
callq 0x28570
jmp 0x22bf9
leaq -0xe0(%rbp), %rdi
callq 0xff40
leaq -0x78(%rbp), %rdi
callq 0x28720
leaq -0x48(%rbp), %rdi
callq 0xff40
leaq -0x30(%rbp), %rdi
callq 0xff40
addq $0x7e0, %rsp            # imm = 0x7E0
popq %rbp
retq
leaq -0xe0(%rbp), %rdi
callq 0xff40
leaq -0x78(%rbp), %rdi
callq 0x28720
leaq -0x48(%rbp), %rdi
callq 0xff40
leaq -0x30(%rbp), %rdi
callq 0xff40
movq -0x58(%rbp), %rdi
callq 0xa7c0
nopl (%rax)