// File: /workspace/github_c_makefile_star2_O0/jflatow[P]jfdb/src/trie.c
// Function: JFT_cursor_find
JFT_Symbol JFT_cursor_find(JFT_Cursor *cursor, const JFT_Stem *stem) {
  if (stem->pre && stem->size)
    if (JFT_cursor_init(cursor, In, JFT_child(cursor->node, stem->pre, 0)) == JFT_SYMBOL_NIL)
      return cursor->symbol;
  JFT_KeySize size = stem->pre && stem->size ? stem->size - 1 : stem->size;
  for (JFT_KeySize i = 0; i < size; i++) {
    if (cursor->symbol == JFT_SYMBOL_NIL)
      return cursor->symbol;
    if (++cursor->point >= cursor->stem.size)
      switch (JFT_node_type(cursor->node)) {
        case Leaf:
          return cursor->symbol = JFT_SYMBOL_ANY;
        default:
          JFT_cursor_init(cursor, In, JFT_child(cursor->node, stem->data[i], 0));
      }
    if ((cursor->symbol = JFT_cursor_symbol_at_point(cursor)) != stem->data[i])
      return cursor->symbol = JFT_SYMBOL_NIL;
  }
  return cursor->symbol;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x510f
movq -0x18(%rbp), %rax
movzwl 0x8(%rax), %eax
cmpl $0x0, %eax
je 0x510f
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
xorl %edx, %edx
callq 0x4f80
movq -0x28(%rbp), %rdi
movq %rax, %rdx
movl $0x1, %esi
callq 0x4bd0
cmpq $-0x2, %rax
jne 0x510d
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x525b
jmp 0x510f
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x5136
movq -0x18(%rbp), %rax
movzwl 0x8(%rax), %eax
cmpl $0x0, %eax
je 0x5136
movq -0x18(%rbp), %rax
movzwl 0x8(%rax), %eax
subl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x5141
movq -0x18(%rbp), %rax
movzwl 0x8(%rax), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movw %ax, -0x1a(%rbp)
movw $0x0, -0x1c(%rbp)
movzwl -0x1c(%rbp), %eax
movzwl -0x1a(%rbp), %ecx
cmpl %ecx, %eax
jge 0x524f
movq -0x10(%rbp), %rax
cmpq $-0x2, 0x30(%rax)
jne 0x517a
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x525b
movq -0x10(%rbp), %rcx
movq 0x28(%rcx), %rax
addq $0x1, %rax
movq %rax, 0x28(%rcx)
movq -0x10(%rbp), %rcx
movzwl 0x18(%rcx), %ecx
cmpq %rcx, %rax
jl 0x5200
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x4d00
subl $0x3, %eax
jne 0x51c4
jmp 0x51ab
movq -0x10(%rbp), %rax
movq $-0x1, 0x30(%rax)
movq $-0x1, -0x8(%rbp)
jmp 0x525b
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movzwl -0x1c(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x4f80
movq -0x38(%rbp), %rdi
movq %rax, %rdx
movl $0x1, %esi
callq 0x4bd0
jmp 0x5200
movq -0x10(%rbp), %rdi
callq 0x4dc0
movq -0x10(%rbp), %rcx
movq %rax, 0x30(%rcx)
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movzwl -0x1c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpq %rcx, %rax
je 0x523c
movq -0x10(%rbp), %rax
movq $-0x2, 0x30(%rax)
movq $-0x2, -0x8(%rbp)
jmp 0x525b
jmp 0x523e
movw -0x1c(%rbp), %ax
addw $0x1, %ax
movw %ax, -0x1c(%rbp)
jmp 0x514e
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)