// File: /workspace/github_cpp_makefile_star2_O1/Kei18[P]pibt/./src/solver/ecbs.cpp
// Function: ECBS::AstarSearch(Agent*, CTNode*)
Nodes ECBS::AstarSearch(Agent* a, CTNode* node) {
  Constraint constraints = getConstraintsForAgent(node, a);

  Node* _s = a->getNode();
  Node* _g = a->getGoal();

  Nodes path, tmpPath, C;  // return

  // ==== fast implementation ====
  // constraint free
  if (constraints.empty()) {
    path = G->getPath(_s, _g);
    table_fmin.at(a->getId()) = path.size() - 1;
    return path;
  }

  // goal condition
  bool existGoalConstraint = false;
  int timeGoalConstraint = 0;
  for (auto c: constraints) {
    if (c->onNode && c->v == _g && c->t > timeGoalConstraint) {
      existGoalConstraint = true;
      timeGoalConstraint = c->t;
    }
  }
  // =============================

  auto paths = node->paths;

  int f, g;
  float ub;
  int ubori;
  std::string key, keyM, keyF;
  bool invalid = true;

  boost::heap::fibonacci_heap<Fib_AN> OPEN;
  std::unordered_map<std::string, boost::heap::fibonacci_heap<Fib_AN>::handle_type> SEARCHED;
  std::unordered_set<std::string> CLOSE;  // key
  AN* n = new AN { _s, 0, pathDist(_s, _g), nullptr };
  auto handle = OPEN.push(Fib_AN(n));
  key = getKey(n);
  SEARCHED.emplace(key, handle);

  bool updateMin = true;
  std::unordered_map<std::string, int> table_conflict;
  table_conflict.emplace(key, 0);
  // FOCUL
  boost::heap::fibonacci_heap<Fib_FN> FOCUL;
  std::unordered_map<std::string,
                     boost::heap::fibonacci_heap<Fib_FN>::handle_type> SEARCHED_F;

  while (!OPEN.empty()) {
    if (updateMin || FOCUL.empty()) {
      // argmin
      while (!OPEN.empty()
             && CLOSE.find(getKey(OPEN.top().node)) != CLOSE.end()) OPEN.pop();
      if (OPEN.empty()) break;
      n = OPEN.top().node;
      ubori = n->f;
      keyM = getKey(n);
      ub = n->f * w;
      // update focul
      FOCUL.clear();
      SEARCHED_F.clear();
      for (auto itr = OPEN.ordered_begin(); itr != OPEN.ordered_end(); ++itr) {
        AN* l = (*itr).node;
        if ((float)l->f <= ub) {
          if (CLOSE.find(getKey(l)) == CLOSE.end()) {
            key = getKey(l);
            auto handle_f = FOCUL.push(Fib_FN(l, table_conflict.at(key)));
            SEARCHED_F.emplace(key, handle_f);
          }
        } else {
          break;
        }
      }
    }

    // argmin in FOCUL
    n = FOCUL.top().node;
    key = getKey(n);
    FOCUL.pop();

    // already explored
    if (CLOSE.find(key) != CLOSE.end()) continue;

    // check goal
    if (n->v == _g) {
      if (!existGoalConstraint || timeGoalConstraint < n->g) {
        invalid = false;
        break;
      }
    }

    // update list
    updateMin = (key == keyM);
    CLOSE.emplace(key);

    // search neighbor
    C = G->neighbor(n->v);
    C.push_back(n->v);

    for (auto m : C) {
      g = n->g + 1;
      key = getKey(g, m);
      if (CLOSE.find(key) != CLOSE.end()) continue;

      // check constraints
      auto constraint = std::find_if(constraints.begin(), constraints.end(),
                                     [a, g, m, n] (Conflict* c) {
                                       if (c->a != a) return false;
                                       if (c->t != g) return false;
                                       if (c->onNode) return c->v == m;
                                       return c->v == m && c->u == n->v;
                                     });
      if (constraint != constraints.end()) continue;
      f = g + pathDist(m, _g);

      // ==== fast implementation ====
      // when field is huge, this works well
      // if (existGoalConstraint) {
      //   f = pathDist(m, _g) + timeGoalConstraint;
      // }
      // =============================

      auto itrS = SEARCHED.find(key);
      AN* l;
      bool updateH = false;
      if (itrS == SEARCHED.end()) {  // new node
        l = new AN { m, g, f, n };
        auto handle = OPEN.push(Fib_AN(l));
        SEARCHED.emplace(key, handle);
        getPartialPath(l, tmpPath);
        table_conflict.emplace(key, h3(a, tmpPath, paths));
      } else {
        auto handle = itrS->second;
        l = (*handle).node;
        if (l->f > f) {
          l->g = g;
          l->f = f;
          l->p = n;
          getPartialPath(l, tmpPath);
          table_conflict.at(key) = h3(a, tmpPath, paths);
          OPEN.increase(handle);
          updateH = true;
        }
      }

      tmpPath.clear();
      if (f <= ub) {
        auto itrSF = SEARCHED_F.find(key);
        if (itrSF == SEARCHED_F.end()) {
          auto handle_f = FOCUL.push(Fib_FN(l, table_conflict.at(key)));
          SEARCHED_F.emplace(key, handle_f);
        } else {
          if (updateH) {
            auto handle_f = itrSF->second;
            (*handle_f).h = table_conflict.at(key);
            FOCUL.increase(handle_f);
          }
        }
      }
    }
  }

  // back tracking
  int fmin = 0;
  if (!invalid) {  // check failed or not
    getPartialPath(n, path);
    fmin = ubori;
  } else {
    node->valid = false;
  }
  table_fmin.at(a->getId()) = fmin;

  return path;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rcx, %r13
movq %rdx, %r12
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x188(%rsp), %r14
movq %r14, %rdi
movq %rcx, %rdx
movq %r12, %rcx
callq 0x293b2
movq %rbx, %rax
movq %rbx, 0x50(%rsp)
movq 0x8(%r12), %rbx
movq %r12, 0x10(%rsp)
movq 0x10(%r12), %r12
xorl %ebp, %ebp
movq %rbp, 0x10(%rax)
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq %rbp, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movq %rbp, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movq (%r14), %rax
movq 0x8(%r14), %rcx
cmpq %rcx, %rax
je 0x2f1a0
movl $0x1, %edx
movl $0x0, 0x24(%rsp)
movq (%rax), %rsi
cmpb $0x1, 0x20(%rsi)
jne 0x2e4fd
cmpq %r12, 0x10(%rsi)
jne 0x2e4fd
movl 0x8(%rsi), %esi
cmpl %ebp, %esi
cmovgl %esi, %ebp
movl 0x24(%rsp), %esi
movzbl %sil, %esi
cmovgl %edx, %esi
movl %esi, 0x24(%rsp)
addq $0x8, %rax
cmpq %rcx, %rax
jne 0x2e4d7
leaq 0x18(%r13), %rsi
leaq 0x238(%rsp), %rdi
callq 0x2abfc
leaq 0x38(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x178(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x228(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x148(%rsp), %rax
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rax)
movaps %xmm0, -0x18(%rax)
movq %rax, (%rax)
movq %rax, 0x8(%rax)
leaq 0x280(%rsp), %rax
movq %rax, -0x30(%rax)
movl $0x1, %ecx
movq %rcx, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, %edx       # imm = 0x3F800000
movl %edx, -0x10(%rax)
movups %xmm0, -0x8(%rax)
leaq 0x2f0(%rsp), %rax
movq %rax, -0x30(%rax)
movq %rcx, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl %edx, -0x10(%rax)
movups %xmm0, -0x8(%rax)
movl $0x18, %edi
callq 0x6370
movq %rax, %r14
movq %rbx, (%rax)
movl $0x0, 0x8(%rax)
movq %r15, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x3f248
movl %eax, 0xc(%r14)
movq $0x0, 0x10(%r14)
leaq 0x1b8(%rsp), %rsi
movq %r14, (%rsi)
leaq 0x130(%rsp), %rdi
callq 0x1b3b8
movq %rax, 0x1f0(%rsp)
leaq 0x1b8(%rsp), %rdi
movq %r14, 0x8(%rsp)
movq %r14, %rsi
callq 0x3f77a
leaq 0x28(%rsp), %rdi
leaq 0x1b8(%rsp), %rbx
movq %rbx, %rsi
callq 0x6460
movq (%rbx), %rdi
leaq 0x1c8(%rsp), %rax
cmpq %rax, %rdi
je 0x2e641
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x250(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0x1f0(%rsp), %rdx
callq 0x2c2f0
leaq 0x1e8(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
leaq 0x288(%rsp), %rdx
movl $0x0, (%rdx)
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x303f6
movq 0x8(%rsp), %rsi
leaq 0x118(%rsp), %rax
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rax)
movaps %xmm0, -0x18(%rax)
movq %rax, (%rax)
movq %rax, 0x8(%rax)
leaq 0x2b8(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
cmpq $0x0, 0x130(%rsp)
je 0x2f221
movq %rbp, 0x1a0(%rsp)
movq %r12, 0x160(%rsp)
movq %r13, 0x48(%rsp)
movq %r15, 0x18(%rsp)
movb $0x1, %al
movl %eax, 0x20(%rsp)
leaq 0x130(%rsp), %r12
leaq 0x60(%rsp), %rbx
leaq 0xa8(%rsp), %r13
cmpq $0x0, 0x100(%rsp)
sete %al
orb 0x20(%rsp), %al
testb $0x1, %al
je 0x2ea5c
movq 0x130(%rsp), %r14
testq %r14, %r14
je 0x2e781
movq 0x138(%rsp), %rax
movq 0x10(%rax), %rsi
leaq 0x1f8(%rsp), %r15
movq %r15, %rdi
callq 0x3f77a
leaq 0x2c0(%rsp), %rdi
movq %r15, %rsi
callq 0x2caaa
testq %rax, %rax
setne %r15b
jmp 0x2e784
xorl %r15d, %r15d
testq %r14, %r14
je 0x2e7ae
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x2e7ae
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x6380
testb %r15b, %r15b
je 0x2e7bd
movq %r12, %rdi
callq 0x1b440
jmp 0x2e73f
cmpq $0x0, 0x130(%rsp)
je 0x2f18a
movq 0x138(%rsp), %rax
movq 0x10(%rax), %r14
movl 0xc(%r14), %eax
movl %eax, 0xfc(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3f77a
leaq 0x168(%rsp), %rdi
movq %rbx, %rsi
callq 0x6460
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x2e81a
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6380
xorps %xmm0, %xmm0
cvtsi2ssl 0xc(%r14), %xmm0
movq 0x18(%rsp), %rax
mulss 0xa8(%rax), %xmm0
movss %xmm0, 0x5c(%rsp)
leaq 0x100(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x118(%rsp), %r14
leaq 0x118(%rsp), %rax
cmpq %rax, %r14
je 0x2e86e
movq %r14, %rsi
movq (%r14), %r14
xorps %xmm0, %xmm0
movups %xmm0, (%rsi)
movq %rbx, %rdi
callq 0x3083a
jmp 0x2e84b
movq %rax, 0x118(%rsp)
movq %rax, 0x120(%rsp)
movq $0x0, 0x110(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x100(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x2fe4e
movq 0x138(%rsp), %rcx
movq 0x148(%rsp), %rax
movq %rax, 0xa8(%rsp)
leaq 0x148(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
leaq 0xf0(%rsp), %rdx
movq %r12, %r8
callq 0x309b2
movq $0x0, 0xa8(%rsp)
leaq 0xb0(%rsp), %rdi
movq %r12, %rsi
callq 0x30a76
movq 0x60(%rsp), %r14
movq 0xa8(%rsp), %r15
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e926
movq 0xc0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
cmpq %r15, %r14
je 0x2ea45
movq 0x60(%rsp), %rax
movq 0x10(%rax), %r14
xorps %xmm0, %xmm0
cvtsi2ssl 0xc(%r14), %xmm0
movss 0x5c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2ea45
movq %r13, %rdi
movq %r14, %rsi
callq 0x3f77a
leaq 0x2c0(%rsp), %rdi
movq %r13, %rsi
callq 0x2caaa
movq %rax, %r15
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x2e993
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x6380
testq %r15, %r15
jne 0x2ea38
movq %r13, %rdi
movq %r14, %rsi
callq 0x3f77a
leaq 0x28(%rsp), %rdi
movq %r13, %rsi
callq 0x6460
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x2e9d9
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x30f40
testq %rax, %rax
je 0x2f396
movl 0x28(%rax), %eax
movq %r14, 0xa8(%rsp)
movl %eax, 0xb0(%rsp)
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0x2fbc8
movq %rax, 0xf0(%rsp)
leaq 0x288(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x30f7a
movq %rbx, %rdi
callq 0x30ecc
jmp 0x2e8e0
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x2ea5c
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
cmpq $0x0, 0x100(%rsp)
je 0x2f3a2
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rsi
movq %rbx, %rdi
movq %rsi, 0x8(%rsp)
callq 0x3f77a
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x6460
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x2eaad
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x100(%rsp), %rdi
callq 0x2fc62
leaq 0x2c0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2caaa
testq %rax, %rax
je 0x2eae5
cmpq $0x0, 0x130(%rsp)
jne 0x2e727
jmp 0x2f18a
movq 0x160(%rsp), %rax
movq 0x8(%rsp), %rcx
cmpq %rax, (%rcx)
jne 0x2eb18
testb $0x1, 0x24(%rsp)
je 0x2f38f
movq 0x1a0(%rsp), %rax
movq 0x8(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jl 0x2f38f
movq 0x30(%rsp), %rdx
cmpq 0x170(%rsp), %rdx
jne 0x2eb45
testq %rdx, %rdx
je 0x2eb4f
movq 0x168(%rsp), %rsi
movq 0x28(%rsp), %rdi
callq 0x63a0
testl %eax, %eax
sete %al
jmp 0x2eb51
movl $0x0, 0x20(%rsp)
jmp 0x2eb55
movb $0x1, %al
movl %eax, 0x20(%rsp)
leaq 0x2c0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x31666
movq 0x18(%rsp), %rax
movq 0x38(%rax), %rsi
movq 0x8(%rsp), %rax
movq (%rax), %rdx
movq %rbx, %rdi
callq 0x1a320
movq 0x90(%rsp), %rdi
movq 0xa0(%rsp), %rsi
movq 0x60(%rsp), %rax
movq %rax, 0x90(%rsp)
movups 0x68(%rsp), %xmm0
movups %xmm0, 0x98(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movq $0x0, 0x70(%rsp)
testq %rdi, %rdi
je 0x2ebc8
subq %rdi, %rsi
callq 0x6380
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x2ebdf
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x98(%rsp), %rsi
cmpq 0xa0(%rsp), %rsi
je 0x2ec07
movq 0x8(%rsp), %rax
movq (%rax), %rax
movq %rax, (%rsi)
addq $0x8, 0x98(%rsp)
jmp 0x2ec19
leaq 0x90(%rsp), %rdi
movq 0x8(%rsp), %rdx
callq 0x1c69a
movq 0x90(%rsp), %rax
movq 0x98(%rsp), %rcx
movq %rcx, 0x1a8(%rsp)
cmpq %rcx, %rax
je 0x2ead1
movq %rax, 0x1b0(%rsp)
movq (%rax), %r15
movq 0x8(%rsp), %rax
movl 0x8(%rax), %r14d
incl %r14d
movq %rbx, %rdi
movl %r14d, %esi
movq %r15, %rdx
callq 0x3f57e
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
callq 0x6460
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x2ec88
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x2c0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2caaa
testq %rax, %rax
jne 0x2f150
movq 0x188(%rsp), %rdx
movq 0x190(%rsp), %rax
movq %rax, %rsi
subq %rdx, %rsi
movq %rsi, %rdi
sarq $0x5, %rdi
testq %rdi, %rdi
jle 0x2edf9
andq $-0x20, %rsi
addq %rdx, %rsi
incq %rdi
addq $0x10, %rdx
movq %rdx, %rcx
movq -0x10(%rcx), %rdx
movq 0x10(%rsp), %r8
cmpq %r8, (%rdx)
jne 0x2ed1d
cmpl %r14d, 0x8(%rdx)
jne 0x2ed1d
movq 0x10(%rdx), %r9
cmpq %r15, %r9
sete %r8b
cmpb $0x0, 0x20(%rdx)
jne 0x2ed14
cmpq %r15, %r9
jne 0x2ed1d
movq 0x18(%rdx), %rdx
movq 0x8(%rsp), %r8
cmpq (%r8), %rdx
sete %r8b
testb %r8b, %r8b
jne 0x2f16f
movq -0x8(%rcx), %rdx
movq 0x10(%rsp), %r8
cmpq %r8, (%rdx)
jne 0x2ed60
cmpl %r14d, 0x8(%rdx)
jne 0x2ed60
movq 0x10(%rdx), %r9
cmpq %r15, %r9
sete %r8b
cmpb $0x0, 0x20(%rdx)
jne 0x2ed57
cmpq %r15, %r9
jne 0x2ed60
movq 0x18(%rdx), %rdx
movq 0x8(%rsp), %r8
cmpq (%r8), %rdx
sete %r8b
testb %r8b, %r8b
jne 0x2f178
movq (%rcx), %rdx
movq 0x10(%rsp), %r8
cmpq %r8, (%rdx)
jne 0x2eda2
cmpl %r14d, 0x8(%rdx)
jne 0x2eda2
movq 0x10(%rdx), %r9
cmpq %r15, %r9
sete %r8b
cmpb $0x0, 0x20(%rdx)
jne 0x2ed99
cmpq %r15, %r9
jne 0x2eda2
movq 0x18(%rdx), %rdx
movq 0x8(%rsp), %r8
cmpq (%r8), %rdx
sete %r8b
testb %r8b, %r8b
jne 0x2eef2
movq 0x8(%rcx), %rdx
movq 0x10(%rsp), %r8
cmpq %r8, (%rdx)
jne 0x2ede5
cmpl %r14d, 0x8(%rdx)
jne 0x2ede5
movq 0x10(%rdx), %r9
cmpq %r15, %r9
sete %r8b
cmpb $0x0, 0x20(%rdx)
jne 0x2eddc
cmpq %r15, %r9
jne 0x2ede5
movq 0x18(%rdx), %rdx
movq 0x8(%rsp), %r8
cmpq (%r8), %rdx
sete %r8b
testb %r8b, %r8b
jne 0x2f181
decq %rdi
addq $0x20, %rcx
cmpq $0x1, %rdi
jg 0x2ecda
movq %rsi, %rdx
movq %rax, %rsi
subq %rdx, %rsi
sarq $0x3, %rsi
cmpq $0x1, %rsi
je 0x2eea8
cmpq $0x2, %rsi
je 0x2ee66
movq %rax, %rcx
cmpq $0x3, %rsi
jne 0x2eef2
movq (%rdx), %rcx
movq 0x10(%rsp), %rsi
cmpq %rsi, (%rcx)
jne 0x2ee62
cmpl %r14d, 0x8(%rcx)
jne 0x2ee62
movq 0x10(%rcx), %rdi
cmpq %r15, %rdi
sete %sil
cmpb $0x0, 0x20(%rcx)
jne 0x2ee59
cmpq %r15, %rdi
jne 0x2ee62
movq 0x18(%rcx), %rcx
movq 0x8(%rsp), %rsi
cmpq (%rsi), %rcx
sete %sil
testb %sil, %sil
jne 0x2eeef
addq $0x8, %rdx
movq (%rdx), %rcx
movq 0x10(%rsp), %rsi
cmpq %rsi, (%rcx)
jne 0x2eea4
cmpl %r14d, 0x8(%rcx)
jne 0x2eea4
movq 0x10(%rcx), %rdi
cmpq %r15, %rdi
sete %sil
cmpb $0x0, 0x20(%rcx)
jne 0x2ee9f
cmpq %r15, %rdi
jne 0x2eea4
movq 0x18(%rcx), %rcx
movq 0x8(%rsp), %rsi
cmpq (%rsi), %rcx
sete %sil
testb %sil, %sil
jne 0x2eeef
addq $0x8, %rdx
movq (%rdx), %rsi
movq 0x10(%rsp), %rcx
cmpq %rcx, (%rsi)
jne 0x2eee7
cmpl %r14d, 0x8(%rsi)
jne 0x2eee7
movb 0x20(%rsi), %r8b
movq 0x10(%rsi), %rdi
cmpq %r15, %rdi
sete %cl
andb %r8b, %cl
testb %r8b, %r8b
jne 0x2eee9
cmpq %r15, %rdi
jne 0x2eee9
movq 0x18(%rsi), %rcx
movq 0x8(%rsp), %rsi
cmpq (%rsi), %rcx
sete %cl
jmp 0x2eee9
xorl %ecx, %ecx
testb %cl, %cl
cmoveq %rax, %rdx
movq %rdx, %rcx
cmpq %rax, %rcx
jne 0x2f150
movq 0x18(%rsp), %rdi
movq %r15, %rsi
movq 0x160(%rsp), %rdx
callq 0x3f248
movl %eax, %ebp
leaq 0x250(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2cae4
movl %ebp, %ecx
addl %r14d, %ecx
testq %rax, %rax
movl %ecx, %ebp
je 0x2efc2
movq 0x28(%rax), %r15
movq 0x10(%r15), %rsi
cmpl %ecx, 0xc(%rsi)
setg %al
movl %eax, 0x58(%rsp)
movq %rsi, 0xe8(%rsp)
jle 0x2f06d
movl %r14d, 0x8(%rsi)
movl %ecx, 0xc(%rsi)
movq 0x8(%rsp), %rax
movq %rax, 0x10(%rsi)
leaq 0xd0(%rsp), %rdx
callq 0x2f648
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
leaq 0x238(%rsp), %rcx
callq 0x2e294
movl %eax, %r14d
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x30f40
testq %rax, %rax
je 0x2f3c1
movl %r14d, 0x28(%rax)
movq %r12, %rdi
movq %r15, %rsi
callq 0x1b4ac
jmp 0x2f06d
movl $0x18, %edi
callq 0x6370
movq %r15, (%rax)
movl %r14d, 0x8(%rax)
movl %ebp, 0xc(%rax)
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rax, 0x10(%rcx)
movq %rcx, 0xe8(%rsp)
movq %rcx, 0xa8(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0x1b3b8
movq %rax, 0x60(%rsp)
leaq 0x250(%rsp), %rdi
leaq 0x28(%rsp), %rsi
movq %rbx, %rdx
callq 0x2c2f0
leaq 0xd0(%rsp), %r14
movq 0xe8(%rsp), %rsi
movq %r14, %rdx
callq 0x2f648
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %r14, %rdx
leaq 0x238(%rsp), %rcx
callq 0x2e294
movl %eax, 0xa8(%rsp)
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
movq %r13, %rdx
callq 0x303f6
movl $0x0, 0x58(%rsp)
movq 0xd0(%rsp), %rax
cmpq %rax, 0xd8(%rsp)
je 0x2f087
movq %rax, 0xd8(%rsp)
cvtsi2ss %ebp, %xmm0
movss 0x5c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2f150
leaq 0x288(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x31792
testq %rax, %rax
je 0x2f0f4
cmpb $0x0, 0x58(%rsp)
je 0x2f150
movq 0x28(%rax), %r14
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x30f40
testq %rax, %rax
je 0x2f3d9
movl 0x28(%rax), %eax
movl %eax, 0x18(%r14)
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0x2fcce
jmp 0x2f150
leaq 0x1b8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x30f40
testq %rax, %rax
je 0x2f3cd
movl 0x28(%rax), %eax
movq 0xe8(%rsp), %rcx
movq %rcx, 0x60(%rsp)
movl %eax, 0x68(%rsp)
leaq 0x100(%rsp), %rdi
movq %rbx, %rsi
callq 0x2fbc8
movq %rax, 0xa8(%rsp)
leaq 0x288(%rsp), %rdi
leaq 0x28(%rsp), %rsi
movq %r13, %rdx
callq 0x30f7a
movq 0x1b0(%rsp), %rax
addq $0x8, %rax
cmpq 0x1a8(%rsp), %rax
jne 0x2ec3a
jmp 0x2ead1
addq $-0x10, %rcx
jmp 0x2eef2
addq $-0x8, %rcx
jmp 0x2eef2
addq $0x8, %rcx
jmp 0x2eef2
movb $0x1, %al
movq 0x18(%rsp), %r15
movq 0x48(%rsp), %r13
movq 0x8(%rsp), %rsi
jmp 0x2f223
movq 0x38(%r15), %rsi
movq (%rsi), %rax
leaq 0x250(%rsp), %rdi
movq %rbx, %rdx
movq %r12, %rcx
callq *0x18(%rax)
leaq 0x250(%rsp), %rbx
movq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x21552
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2f1e5
movq 0x260(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x50(%rsp), %rax
movq (%rax), %r14
movq 0x8(%rax), %rbx
addq $0xb0, %r15
movq 0x10(%rsp), %rax
movl (%rax), %eax
leaq 0x250(%rsp), %rsi
movl %eax, (%rsi)
movq %r15, %rdi
callq 0x303b4
subq %r14, %rbx
shrq $0x3, %rbx
decl %ebx
movl %ebx, (%rax)
jmp 0x2f321
movb $0x1, %al
testb %al, %al
je 0x2f230
movb $0x0, 0x40(%r13)
xorl %ebx, %ebx
jmp 0x2f241
movq 0x50(%rsp), %rdx
callq 0x2f648
movl 0xfc(%rsp), %ebx
addq $0xb0, %r15
movq 0x10(%rsp), %rax
movl (%rax), %eax
leaq 0x60(%rsp), %rsi
movl %eax, (%rsi)
movq %r15, %rdi
callq 0x303b4
movl %ebx, (%rax)
leaq 0x288(%rsp), %rdi
callq 0x2fe28
leaq 0x100(%rsp), %rdi
callq 0x2fd5c
leaq 0x1b8(%rsp), %rdi
callq 0x2fec6
leaq 0x2c0(%rsp), %rdi
callq 0x2af52
leaq 0x250(%rsp), %rdi
callq 0x2aff0
leaq 0x130(%rsp), %rdi
callq 0x1b528
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x2f2d3
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x2f2f8
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x2f314
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x238(%rsp), %rdi
callq 0xb4ce
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x2f33e
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2f35b
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x188(%rsp), %rdi
testq %rdi, %rdi
je 0x2f378
movq 0x198(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x50(%rsp), %rax
addq $0x2f8, %rsp            # imm = 0x2F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
jmp 0x2f18c
leaq 0x1b13e(%rip), %rdi     # 0x4a4db
callq 0x6520
leaq 0x1a6dc(%rip), %rdi     # 0x49a85
leaq 0x1a6de(%rip), %rsi     # 0x49a8e
leaq 0x1b132(%rip), %rcx     # 0x4a4e9
movl $0x14f, %edx            # imm = 0x14F
callq 0x6260
leaq 0x1b113(%rip), %rdi     # 0x4a4db
callq 0x6520
leaq 0x1b107(%rip), %rdi     # 0x4a4db
callq 0x6520
leaq 0x1b0fb(%rip), %rdi     # 0x4a4db
callq 0x6520
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f45f
jmp 0x2f45f
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
movq %rax, %rbx
jmp 0x2f528
jmp 0x2f457
jmp 0x2f457
jmp 0x2f457
movq %rax, %rbx
movl $0x18, %esi
movq %r14, %rdi
callq 0x6380
jmp 0x2f535
movq %rax, %rbx
jmp 0x2f535
movq %rax, %rbx
jmp 0x2f5cf
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f50b
jmp 0x2f4c6
jmp 0x2f4c6
jmp 0x2f4c6
jmp 0x2f4c6
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x2f4c9
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x6380
jmp 0x2f4c9
jmp 0x2f4c6
jmp 0x2f4c6
movq %rax, %rbx
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x2f50e
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
jmp 0x2f50e
jmp 0x2f50b
jmp 0x2f50b
movq %rax, %rbx
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x2f50e
movq 0x208(%rsp), %rsi
incq %rsi
jmp 0x2f4db
movq %rax, %rbx
leaq 0x288(%rsp), %rdi
callq 0x2fe28
leaq 0x100(%rsp), %rdi
callq 0x2fd5c
leaq 0x1b8(%rsp), %rdi
callq 0x2fec6
leaq 0x2c0(%rsp), %rdi
callq 0x2af52
leaq 0x250(%rsp), %rdi
callq 0x2aff0
leaq 0x130(%rsp), %rdi
callq 0x1b528
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x2f581
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x2f5a6
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x6380
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x2f5c2
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x6380
leaq 0x238(%rsp), %rdi
callq 0xb4ce
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x2f5ec
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2f609
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x50(%rsp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x2f622
movq 0x10(%rax), %rsi
subq %rdi, %rsi
callq 0x6380
movq 0x188(%rsp), %rdi
testq %rdi, %rdi
je 0x2f63f
movq 0x198(%rsp), %rsi
subq %rdi, %rsi
callq 0x6380
movq %rbx, %rdi
callq 0x6620
nop