// File: /workspace/github_cpp_makefile_star2_O2/canzarlab[P]Trajan/geno/lbfgsb.cpp
// Function: LBFGSB::updateB()
void LBFGSB::updateB() {
  Scalar ys = _y.dot(_s);
  Scalar yy = _y.dot(_y);
  Scalar const eps = std::numeric_limits<Scalar>::epsilon();
  if (ys > (eps * yy)) {
    //		  _theta = _y.dot(_y) / ys / 2;  // TODO redo
    _theta = _y.dot(_y) / ys;
    Vector yws = _y;
    Vector sws = _s;
    yws = yws.cwiseProduct(_workingSet);
    sws = sws.cwiseProduct(_workingSet);

    if (_S.cols() < _m) {
      _S.conservativeResize(_S.rows(), _S.cols() + 1);
      _Y.conservativeResize(_Y.rows(), _Y.cols() + 1);
      _SY.conservativeResize(_SY.rows() + 1, _SY.cols() + 1);
      _SS.conservativeResize(_SS.rows() + 1, _SS.cols() + 1);
      _SYws.conservativeResize(_SYws.rows() + 1, _SYws.cols() + 1);
      _SSws.conservativeResize(_SSws.rows() + 1, _SSws.cols() + 1);
      _YYws.conservativeResize(_YYws.rows() + 1, _YYws.cols() + 1);
    }  
    _S.col(_index) = _s;
    _Y.col(_index) = _y;
    
    _SY.col(_index) = _S.transpose()*_y;
    _SS.col(_index) = _S.transpose()*_s;
    _SYws.col(_index) = _S.transpose() * yws;
    _SSws.col(_index) = _S.transpose() * sws;
    _SYws.row(_index) = _Y.transpose() * sws;
    _SY.row(_index) = _Y.transpose()*_s;
    _YYws.col(_index) = _Y.transpose() * yws;
    _SS.row(_index) = _SS.col(_index).eval();
    _SSws.row(_index) = _SSws.col(_index).eval();
    _YYws.row(_index) = _YYws.col(_index).eval();
  
    _index = (_index + 1) % _m;
   } else {
    std::clog << "skipping LBFGS-B update\n";
    return;
  }
  _Q = Matrix::Identity(_S.cols(), _S.cols());
  if (_S.cols() >= _m) {  // rotate by index % m to the right
    std::rotate(_Q.data(), _Q.data() + ((_m - _index) % _m) * _m,
		_Q.data() + _m * _m);
  }
  Matrix SS2 = _Q * _SS * _Q.transpose();
  Matrix SY2 = _Q * _SY * _Q.transpose();
  Matrix D = Matrix(_SY.rows(), _SY.cols());
  D.setZero();
  D.diagonal() = SY2.diagonal();
  Matrix L = SY2.triangularView<Eigen::StrictlyLower>();

  Matrix tmp(D.rows() * 2, 2 * D.cols());
  tmp.topLeftCorner(D.rows(), D.cols()) = _theta * SS2;
  tmp.topRightCorner(D.rows(), D.cols()) = L;
  tmp.bottomLeftCorner(D.rows(), D.cols()) = L.transpose();
  tmp.bottomRightCorner(D.rows(), D.cols()) = -D;

  Eigen::FullPivLU<Matrix> lu(tmp);
  _M = lu.inverse();

  _M.topLeftCorner(D.rows(), D.cols()) *= pow(_theta, 2);
  _M.topRightCorner(D.rows(), D.cols()) *= _theta;
  _M.bottomLeftCorner(D.rows(), D.cols()) *= _theta;

  _M.topLeftCorner(D.rows(), D.cols()) = _Q.transpose() * _M.topLeftCorner(D.rows(), D.cols()) * _Q;
  _M.topRightCorner(D.rows(), D.cols()) = _Q.transpose() * _M.topRightCorner(D.rows(), D.cols()) * _Q;
  _M.bottomLeftCorner(D.rows(), D.cols()) = _Q.transpose() * _M.bottomLeftCorner(D.rows(), D.cols()) * _Q;
  _M.bottomRightCorner(D.rows(), D.cols()) = _Q.transpose() * _M.bottomRightCorner(D.rows(), D.cols()) * _Q;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
movq %rdi, %rbx
leaq 0x98(%rdi), %r15
leaq 0x88(%rdi), %r14
movq %r15, %rdi
movq %r14, %rsi
callq 0x1325a
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
movq %r15, %rsi
callq 0x1325a
mulsd 0x44668(%rip), %xmm0    # 0x53810
movsd 0x20(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jbe 0xfc54
movq %r15, %rdi
movq %r15, %rsi
callq 0x1325a
divsd 0x20(%rsp), %xmm0
movsd %xmm0, 0xd8(%rbx)
leaq 0x178(%rsp), %rdi
movq %r15, %rsi
callq 0xe746
leaq 0x1b8(%rsp), %rdi
movq %r14, %rsi
callq 0xe746
leaq 0x1e0(%rbx), %r12
leaq 0xe0(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r12, %rdx
callq 0x13286
leaq 0x178(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x14098
leaq 0xe0(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
movq %r12, %rdx
callq 0x13286
leaq 0x1b8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x14098
leaq 0xa8(%rbx), %r13
movq 0xb8(%rbx), %rdx
cmpq 0x78(%rbx), %rdx
jge 0xf339
movq 0xb0(%rbx), %rsi
incq %rdx
movq %r13, %rdi
callq 0x14212
leaq 0xc0(%rbx), %rdi
movq 0xc8(%rbx), %rsi
movq 0xd0(%rbx), %rdx
incq %rdx
callq 0x14212
leaq 0xe0(%rbx), %rdi
movq 0xe8(%rbx), %rsi
movq 0xf0(%rbx), %rdx
incq %rsi
incq %rdx
callq 0x14212
leaq 0xf8(%rbx), %rdi
movq 0x100(%rbx), %rsi
movq 0x108(%rbx), %rdx
incq %rsi
incq %rdx
callq 0x14212
leaq 0x188(%rbx), %rdi
movq 0x190(%rbx), %rsi
movq 0x198(%rbx), %rdx
incq %rsi
incq %rdx
callq 0x14212
leaq 0x1a0(%rbx), %rdi
movq 0x1a8(%rbx), %rsi
movq 0x1b0(%rbx), %rdx
incq %rsi
incq %rdx
callq 0x14212
leaq 0x1b8(%rbx), %rdi
movq 0x1c0(%rbx), %rsi
movq 0x1c8(%rbx), %rdx
incq %rsi
incq %rdx
callq 0x14212
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r13, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
movq %r14, %rsi
callq 0x14886
leaq 0xc0(%rbx), %rbp
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %rbp, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
movq %r15, %rsi
callq 0x14886
leaq 0x28(%rsp), %rdi
movq %r13, (%rdi)
movq %r15, %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
leaq 0xe0(%rbx), %rsi
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %rsi, 0x20(%rsp)
callq 0x147ac
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x14a42
leaq 0x28(%rsp), %rdi
movq %r13, (%rdi)
movq %r14, %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
leaq 0xf8(%rbx), %r12
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r12, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x14a42
leaq 0x28(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x178(%rsp), %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
leaq 0x188(%rbx), %r15
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r15, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x14a42
leaq 0x28(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1b8(%rsp), %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
leaq 0x1a0(%rbx), %r13
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r13, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x14a42
leaq 0x28(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1b8(%rsp), %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r15, %rsi
callq 0x154fe
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x155e1
leaq 0x28(%rsp), %rdi
movq %rbp, (%rdi)
movq %r14, %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x154fe
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x155e1
leaq 0x28(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x178(%rsp), %rsi
callq 0x132a2
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
leaq 0x1b8(%rbx), %r14
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r14, %rsi
callq 0x147ac
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x14a42
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r12, %rsi
callq 0x147ac
leaq 0x28(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x157ee
movq 0x80(%rbx), %rdx
leaq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0x154fe
leaq 0x60(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1593d
movq 0x28(%rsp), %rdi
callq 0x93c0
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r13, %rsi
callq 0x147ac
leaq 0x28(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x157ee
movq 0x80(%rbx), %rdx
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x154fe
leaq 0x60(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1593d
movq 0x28(%rsp), %rdi
callq 0x93c0
movq 0x80(%rbx), %rdx
leaq 0xe0(%rsp), %rdi
movq %r14, %rsi
callq 0x147ac
leaq 0x28(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x157ee
movq 0x80(%rbx), %rdx
leaq 0x60(%rsp), %rdi
movq %r14, %rsi
callq 0x154fe
leaq 0x60(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1593d
movq 0x28(%rsp), %rdi
callq 0x93c0
movq 0x80(%rbx), %rax
incq %rax
cqto
idivq 0x78(%rbx)
movq %rdx, 0x80(%rbx)
movq 0x1b8(%rsp), %rdi
callq 0x93c0
movq 0x178(%rsp), %rdi
callq 0x93c0
movq 0xb8(%rbx), %rdx
leaq 0xe0(%rsp), %r15
movq %r15, %rdi
movq %rdx, %rsi
callq 0x132c6
leaq 0x128(%rbx), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x15975
movq 0x78(%rbx), %rcx
cmpq %rcx, 0xb8(%rbx)
jl 0xf735
movq 0x128(%rbx), %rdi
movq %rcx, %rax
subq 0x80(%rbx), %rax
cqto
idivq %rcx
imulq %rcx, %rdx
leaq (%rdi,%rdx,8), %rsi
imulq %rcx, %rcx
leaq (%rdi,%rcx,8), %rdx
callq 0x15a9a
movq %r14, %rdi
movq %r12, %rsi
callq 0x132e2
leaq 0x60(%rsp), %rsi
movq %rax, (%rsi)
movq %rdx, 0x8(%rsi)
leaq 0x178(%rsp), %rdx
movq %r14, (%rdx)
leaq 0xe0(%rsp), %r15
movq %r15, %rdi
callq 0x15c84
leaq 0x220(%rsp), %rdi
movq %r15, %rsi
callq 0x15cbe
movq %r14, %rdi
movq 0x20(%rsp), %rsi
callq 0x132e2
leaq 0x60(%rsp), %rsi
movq %rax, (%rsi)
movq %rdx, 0x8(%rsi)
leaq 0x178(%rsp), %rdx
movq %r14, (%rdx)
leaq 0xe0(%rsp), %rdi
callq 0x15c84
leaq 0x208(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x15cbe
movq 0xe8(%rbx), %rax
leaq 0xe0(%rsp), %rsi
movq %rax, (%rsi)
movq 0xf0(%rbx), %rax
leaq 0x60(%rsp), %rdx
movq %rax, (%rdx)
movq %rsp, %rdi
callq 0x13306
movq %rsp, %rdi
callq 0x1333e
leaq 0xe0(%rsp), %rdi
leaq 0x208(%rsp), %r15
movq %r15, %rsi
callq 0x1334e
leaq 0x60(%rsp), %rdi
movq %rsp, %r12
movq %r12, %rsi
callq 0x1334e
leaq 0x60(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x198d6
leaq 0xe0(%rsp), %rsi
movq %r15, (%rsi)
leaq 0x1f0(%rsp), %rdi
callq 0x19a74
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rcx
addq %rax, %rax
leaq 0xe0(%rsp), %rsi
movq %rax, (%rsi)
addq %rcx, %rcx
leaq 0x60(%rsp), %rdx
movq %rcx, (%rdx)
leaq 0x160(%rsp), %rdi
callq 0x13306
leaq 0xd8(%rbx), %r15
leaq 0x60(%rsp), %rdi
leaq 0x220(%rsp), %rdx
movq %r15, %rsi
callq 0x1335e
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x133b2
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x19d05
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x133ca
leaq 0xe0(%rsp), %rdi
leaq 0x1f0(%rsp), %r13
movq %r13, %rsi
callq 0x19fa7
movq %r13, 0x60(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x133e8
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1a221
movq %r12, 0x60(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x13406
leaq 0xe0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1a3c1
leaq 0xe0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x13428
leaq 0x60(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x134ee
addq $0x110, %rbx            # imm = 0x110
leaq 0x60(%rsp), %rsi
movq %rbx, %rdi
callq 0x1bf75
leaq 0x60(%rsp), %rdi
callq 0x13588
movsd (%r15), %xmm0
mulsd %xmm0, %xmm0
movsd %xmm0, 0x178(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x133b2
leaq 0x60(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0x1354a
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x133ca
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0x1354a
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x133e8
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0x1354a
movq %r14, 0x18(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x1b8(%rsp), %rdi
movq %rbx, %rsi
callq 0x133b2
leaq 0x178(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1f0b4
leaq 0x60(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r14, %rdx
callq 0x1f106
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x133b2
leaq 0x28(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1f151
movq %r14, 0x18(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x1b8(%rsp), %rdi
movq %rbx, %rsi
callq 0x133ca
leaq 0x178(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1f0b4
leaq 0x60(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r14, %rdx
callq 0x1f106
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x133ca
leaq 0x28(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1f151
movq %r14, 0x18(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x1b8(%rsp), %rdi
movq %rbx, %rsi
callq 0x133e8
leaq 0x178(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1f0b4
leaq 0x60(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r14, %rdx
callq 0x1f106
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x133e8
leaq 0x28(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1f151
movq %r14, 0x18(%rsp)
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x1b8(%rsp), %rdi
movq %rbx, %rsi
callq 0x13406
leaq 0x178(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1f0b4
leaq 0x60(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r14, %rdx
callq 0x1f106
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x13406
leaq 0x28(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1f151
leaq 0xe0(%rsp), %rdi
callq 0x13588
movq 0x160(%rsp), %rdi
callq 0x93c0
movq 0x1f0(%rsp), %rdi
callq 0x93c0
movq (%rsp), %rdi
callq 0x93c0
movq 0x208(%rsp), %rdi
callq 0x93c0
movq 0x220(%rsp), %rdi
callq 0x93c0
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x87315(%rip), %rdi     # 0x96f70
leaq 0x43e5e(%rip), %rsi     # 0x53ac0
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9330
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x13588
jmp 0xfd31
jmp 0xfd2e
jmp 0xfcea
jmp 0xfcea
movq %rax, %rbx
jmp 0xfd4b
jmp 0xfcef
jmp 0xfcef
jmp 0xfcef
movq %rax, %rbx
jmp 0xfd61
jmp 0xfcf4
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
movq %rax, %rbx
jmp 0xfd88
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfcea
jmp 0xfcea
jmp 0xfcea
movq %rax, %rbx
jmp 0xfd3e
movq %rax, %rbx
jmp 0xfd58
movq %rax, %rbx
jmp 0xfd6e
jmp 0xfd01
jmp 0xfd78
jmp 0xfd01
jmp 0xfd78
movq %rax, %rbx
movq 0x28(%rsp), %rdi
callq 0x93c0
jmp 0xfd7b
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd78
jmp 0xfd2e
jmp 0xfd2e
jmp 0xfd2e
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x13588
movq 0x160(%rsp), %rdi
callq 0x93c0
movq 0x1f0(%rsp), %rdi
callq 0x93c0
movq (%rsp), %rdi
callq 0x93c0
movq 0x208(%rsp), %rdi
callq 0x93c0
movq 0x220(%rsp), %rdi
jmp 0xfd90
movq %rax, %rbx
movq 0x1b8(%rsp), %rdi
callq 0x93c0
movq 0x178(%rsp), %rdi
callq 0x93c0
movq %rbx, %rdi
callq 0x9640
nop