// File: /workspace/github_c_makefile_star2_O1/stetre[P]moonnuklear/src/./nuklear/nuklear.h
// Function: nk_textedit_key
NK_LIB void
nk_textedit_key(struct nk_text_edit *state, enum nk_keys key, int shift_mod,
    const struct nk_user_font *font, float row_height)
{
retry:
    switch (key)
    {
    case NK_KEY_NONE:
    case NK_KEY_CTRL:
    case NK_KEY_ENTER:
    case NK_KEY_SHIFT:
    case NK_KEY_TAB:
    case NK_KEY_COPY:
    case NK_KEY_CUT:
    case NK_KEY_PASTE:
    case NK_KEY_MAX:
    default: break;
    case NK_KEY_TEXT_UNDO:
         nk_textedit_undo(state);
         state->has_preferred_x = 0;
         break;

    case NK_KEY_TEXT_REDO:
        nk_textedit_redo(state);
        state->has_preferred_x = 0;
        break;

    case NK_KEY_TEXT_SELECT_ALL:
        nk_textedit_select_all(state);
        state->has_preferred_x = 0;
        break;

    case NK_KEY_TEXT_INSERT_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            state->mode = NK_TEXT_EDIT_MODE_INSERT;
        break;
    case NK_KEY_TEXT_REPLACE_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            state->mode = NK_TEXT_EDIT_MODE_REPLACE;
        break;
    case NK_KEY_TEXT_RESET_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_INSERT ||
            state->mode == NK_TEXT_EDIT_MODE_REPLACE)
            state->mode = NK_TEXT_EDIT_MODE_VIEW;
        break;

    case NK_KEY_LEFT:
        if (shift_mod) {
            nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            /* move selection left */
            if (state->select_end > 0)
                --state->select_end;
            state->cursor = state->select_end;
            state->has_preferred_x = 0;
        } else {
            /* if currently there's a selection,
             * move cursor to start of selection */
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_first(state);
            else if (state->cursor > 0)
               --state->cursor;
            state->has_preferred_x = 0;
        } break;

    case NK_KEY_RIGHT:
        if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            /* move selection right */
            ++state->select_end;
            nk_textedit_clamp(state);
            state->cursor = state->select_end;
            state->has_preferred_x = 0;
        } else {
            /* if currently there's a selection,
             * move cursor to end of selection */
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_last(state);
            else ++state->cursor;
            nk_textedit_clamp(state);
            state->has_preferred_x = 0;
        } break;

    case NK_KEY_TEXT_WORD_LEFT:
        if (shift_mod) {
            if( !NK_TEXT_HAS_SELECTION( state ) )
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = nk_textedit_move_to_word_previous(state);
            state->select_end = state->cursor;
            nk_textedit_clamp(state );
        } else {
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_first(state);
            else {
                state->cursor = nk_textedit_move_to_word_previous(state);
                nk_textedit_clamp(state );
            }
        } break;

    case NK_KEY_TEXT_WORD_RIGHT:
        if (shift_mod) {
            if( !NK_TEXT_HAS_SELECTION( state ) )
                nk_textedit_prep_selection_at_cursor(state);
            state->cursor = nk_textedit_move_to_word_next(state);
            state->select_end = state->cursor;
            nk_textedit_clamp(state);
        } else {
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_last(state);
            else {
                state->cursor = nk_textedit_move_to_word_next(state);
                nk_textedit_clamp(state );
            }
        } break;

    case NK_KEY_DOWN: {
        struct nk_text_find find;
        struct nk_text_edit_row row;
        int i, sel = shift_mod;

        if (state->single_line) {
            /* on windows, up&down in single-line behave like left&right */
            key = NK_KEY_RIGHT;
            goto retry;
        }

        if (sel)
            nk_textedit_prep_selection_at_cursor(state);
        else if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_move_to_last(state);

        /* compute current position of cursor point */
        nk_textedit_clamp(state);
        nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
            font, row_height);

        /* now find character position down a row */
        if (find.length)
        {
            float x;
            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
            int start = find.first_char + find.length;

            state->cursor = start;
            nk_textedit_layout_row(&row, state, state->cursor, row_height, font);
            x = row.x0;

            for (i=0; i < row.num_chars && x < row.x1; ++i) {
                float dx = nk_textedit_get_width(state, start, i, font);
                x += dx;
                if (x > goal_x)
                    break;
                ++state->cursor;
            }
            nk_textedit_clamp(state);

            state->has_preferred_x = 1;
            state->preferred_x = goal_x;
            if (sel)
                state->select_end = state->cursor;
        }
    } break;

    case NK_KEY_UP: {
        struct nk_text_find find;
        struct nk_text_edit_row row;
        int i, sel = shift_mod;

        if (state->single_line) {
            /* on windows, up&down become left&right */
            key = NK_KEY_LEFT;
            goto retry;
        }

        if (sel)
            nk_textedit_prep_selection_at_cursor(state);
        else if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_move_to_first(state);

         /* compute current position of cursor point */
         nk_textedit_clamp(state);
         nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);

         /* can only go up if there's a previous row */
         if (find.prev_first != find.first_char) {
            /* now find character position up a row */
            float x;
            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;

            state->cursor = find.prev_first;
            nk_textedit_layout_row(&row, state, state->cursor, row_height, font);
            x = row.x0;

            for (i=0; i < row.num_chars && x < row.x1; ++i) {
                float dx = nk_textedit_get_width(state, find.prev_first, i, font);
                x += dx;
                if (x > goal_x)
                    break;
                ++state->cursor;
            }
            nk_textedit_clamp(state);

            state->has_preferred_x = 1;
            state->preferred_x = goal_x;
            if (sel) state->select_end = state->cursor;
         }
      } break;

    case NK_KEY_DEL:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            break;
        if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_delete_selection(state);
        else {
            int n = state->string.len;
            if (state->cursor < n)
                nk_textedit_delete(state, state->cursor, 1);
         }
         state->has_preferred_x = 0;
         break;

    case NK_KEY_BACKSPACE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            break;
        if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_delete_selection(state);
        else {
            nk_textedit_clamp(state);
            if (state->cursor > 0) {
                nk_textedit_delete(state, state->cursor-1, 1);
                --state->cursor;
            }
         }
         state->has_preferred_x = 0;
         break;

    case NK_KEY_TEXT_START:
         if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = state->select_end = 0;
            state->has_preferred_x = 0;
         } else {
            state->cursor = state->select_start = state->select_end = 0;
            state->has_preferred_x = 0;
         }
         break;

    case NK_KEY_TEXT_END:
         if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = state->select_end = state->string.len;
            state->has_preferred_x = 0;
         } else {
            state->cursor = state->string.len;
            state->select_start = state->select_end = 0;
            state->has_preferred_x = 0;
         }
         break;

    case NK_KEY_TEXT_LINE_START: {
        if (shift_mod) {
            struct nk_text_find find;
           nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            if (state->string.len && state->cursor == state->string.len)
                --state->cursor;
            nk_textedit_find_charpos(&find, state,state->cursor, state->single_line,
                font, row_height);
            state->cursor = state->select_end = find.first_char;
            state->has_preferred_x = 0;
        } else {
            struct nk_text_find find;
            if (state->string.len && state->cursor == state->string.len)
                --state->cursor;
            nk_textedit_clamp(state);
            nk_textedit_move_to_first(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);
            state->cursor = find.first_char;
            state->has_preferred_x = 0;
        }
      } break;

    case NK_KEY_TEXT_LINE_END: {
        if (shift_mod) {
            struct nk_text_find find;
            nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);
            state->has_preferred_x = 0;
            state->cursor = find.first_char + find.length;
            if (find.length > 0 && nk_str_rune_at(&state->string, state->cursor-1) == '\n')
                --state->cursor;
            state->select_end = state->cursor;
        } else {
            struct nk_text_find find;
            nk_textedit_clamp(state);
            nk_textedit_move_to_first(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);

            state->has_preferred_x = 0;
            state->cursor = find.first_char + find.length;
            if (find.length > 0 && nk_str_rune_at(&state->string, state->cursor-1) == '\n')
                --state->cursor;
        }} break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movss %xmm0, 0xc(%rsp)
movq %rcx, %r14
movl %edx, %r15d
movl %esi, %ebp
movq %rdi, %rbx
leaq 0xbc(%rdi), %r12
leaq 0x18(%rdi), %rax
movq %rax, 0x30(%rsp)
leaq 0x15e3d(%rip), %rcx     # 0x6ebd4
leaq 0x38(%rsp), %r13
addl $-0x3, %ebp
cmpl $0x16, %ebp
ja 0x597b1
movslq (%rcx,%rbp,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0xb8(%rbx), %dl
movl $0xc, %ebp
testb %dl, %dl
jne 0x58ffe
testl %r15d, %r15d
movb %dl, 0xb(%rsp)
je 0x58e3b
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x58e93
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x58e99
movb 0xb8(%rbx), %al
movl $0xd, %ebp
testb %al, %al
jne 0x5917a
testl %r15d, %r15d
movb %al, 0xb(%rsp)
je 0x58e74
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x5900b
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x59011
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
cmpl %ecx, %eax
je 0x58e99
jle 0x58e59
movl %eax, 0xb0(%rbx)
movl %ecx, 0xac(%rbx)
movl 0xac(%rbx), %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
jmp 0x58e99
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
je 0x59011
movq %rbx, %rdi
callq 0x5a209
jmp 0x59011
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4b88d
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
movq %r13, %rdi
movq %rbx, %rsi
movq %r14, %r8
movss 0xc(%rsp), %xmm0
callq 0x5a290
movq %r13, %rdx
movl 0x4c(%rsp), %r13d
movl $0xa, %ebp
cmpl 0x44(%rsp), %r13d
jne 0x58ee5
leaq 0x15cf7(%rip), %rcx     # 0x6ebd4
movq %rdx, %r13
jmp 0x58ffa
movl %r15d, 0x18(%rsp)
cmpb $0x0, 0xb7(%rbx)
movq %r12, 0x28(%rsp)
movq %r12, %rax
cmoveq %rdx, %rax
movss (%rax), %xmm0
movss %xmm0, 0x14(%rsp)
movl %r13d, 0xa8(%rbx)
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
movl %r13d, %edx
movss 0xc(%rsp), %xmm0
movq %r14, %rcx
callq 0x5a151
movl 0x64(%rsp), %r12d
testl %r12d, %r12d
jle 0x58fb6
movss 0x50(%rsp), %xmm0
movss 0x54(%rsp), %xmm1
movss %xmm1, 0x1c(%rsp)
ucomiss %xmm0, %xmm1
jbe 0x58fb6
movl $0x1, %r15d
movss %xmm0, 0x20(%rsp)
xorl %eax, %eax
movl %eax, 0x10(%rsp)
movl %eax, 0x24(%rsp)
leal (%r15,%r13), %esi
decl %esi
movq 0x30(%rsp), %rdi
leaq 0x24(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x13f60
movss 0x8(%r14), %xmm0
movl 0x10(%rsp), %edx
movq (%r14), %rdi
movq %rax, %rsi
callq *0x10(%r14)
addss 0x20(%rsp), %xmm0
ucomiss 0x14(%rsp), %xmm0
ja 0x58fb6
incl 0xa8(%rbx)
cmpl %r12d, %r15d
jge 0x58fb6
incl %r15d
movss 0x1c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
ja 0x58f52
movq %rbx, %rdi
callq 0x4b88d
movb $0x1, 0xb7(%rbx)
movss 0x14(%rsp), %xmm0
movss %xmm0, 0xbc(%rbx)
movl 0x18(%rsp), %r15d
testl %r15d, %r15d
je 0x58fe9
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movq 0x28(%rsp), %r12
leaq 0x15bdf(%rip), %rcx     # 0x6ebd4
leaq 0x38(%rsp), %r13
movb 0xb(%rsp), %dl
testb %dl, %dl
jne 0x58d9c
jmp 0x597b1
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4b88d
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
movq %r13, %rdi
movq %rbx, %rsi
movq %r14, %r8
movss 0xc(%rsp), %xmm0
callq 0x5a290
movq %r13, %rdx
movl 0x48(%rsp), %r13d
movl $0xb, %ebp
testl %r13d, %r13d
je 0x5916c
movl %r15d, 0x18(%rsp)
cmpb $0x0, 0xb7(%rbx)
movq %r12, 0x28(%rsp)
movq %r12, %rax
cmoveq %rdx, %rax
movss (%rax), %xmm0
movss %xmm0, 0x14(%rsp)
addl 0x44(%rsp), %r13d
movl %r13d, 0xa8(%rbx)
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
movl %r13d, %edx
movss 0xc(%rsp), %xmm0
movq %r14, %rcx
callq 0x5a151
movl 0x64(%rsp), %r12d
testl %r12d, %r12d
jle 0x59126
movss 0x50(%rsp), %xmm0
movss 0x54(%rsp), %xmm1
movss %xmm1, 0x1c(%rsp)
ucomiss %xmm0, %xmm1
jbe 0x59126
movl $0x1, %r15d
movss %xmm0, 0x20(%rsp)
xorl %eax, %eax
movl %eax, 0x10(%rsp)
movl %eax, 0x24(%rsp)
leal (%r15,%r13), %esi
decl %esi
movq 0x30(%rsp), %rdi
leaq 0x24(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x13f60
movss 0x8(%r14), %xmm0
movl 0x10(%rsp), %edx
movq (%r14), %rdi
movq %rax, %rsi
callq *0x10(%r14)
addss 0x20(%rsp), %xmm0
ucomiss 0x14(%rsp), %xmm0
ja 0x59126
incl 0xa8(%rbx)
cmpl %r12d, %r15d
jge 0x59126
incl %r15d
movss 0x1c(%rsp), %xmm1
ucomiss %xmm0, %xmm1
ja 0x590c2
movq %rbx, %rdi
callq 0x4b88d
movb $0x1, 0xb7(%rbx)
movss 0x14(%rsp), %xmm0
movss %xmm0, 0xbc(%rbx)
movl 0x18(%rsp), %r15d
testl %r15d, %r15d
je 0x59159
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movq 0x28(%rsp), %r12
leaq 0x15a6f(%rip), %rcx     # 0x6ebd4
leaq 0x38(%rsp), %r13
jmp 0x59176
leaq 0x15a61(%rip), %rcx     # 0x6ebd4
movq %rdx, %r13
movb 0xb(%rsp), %al
testb %al, %al
jne 0x58d9c
jmp 0x597b1
cmpb $0x0, 0xb4(%rbx)
jne 0x597b1
movb $0x2, 0xb4(%rbx)
jmp 0x597b1
movb 0xb4(%rbx), %al
decb %al
cmpb $0x1, %al
ja 0x597b1
movb $0x0, 0xb4(%rbx)
jmp 0x597b1
cmpb $0x0, 0xb4(%rbx)
jne 0x597b1
movb $0x1, 0xb4(%rbx)
jmp 0x597b1
movq %rbx, %rdi
testl %r15d, %r15d
je 0x59479
callq 0x4b88d
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x5967e
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x59684
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
testl %r15d, %r15d
je 0x59531
cmpl %ecx, %eax
jne 0x5923a
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
movl 0xa8(%rbx), %ebp
movl %ebp, %eax
leal -0x1(%rax), %ebp
testl %eax, %eax
jle 0x59257
movq %rbx, %rdi
movl %ebp, %esi
callq 0x5a453
testl %eax, %eax
je 0x59240
xorl %eax, %eax
testl %ebp, %ebp
cmovgl %ebp, %eax
jmp 0x5936f
cmpb $0x0, 0xb4(%rbx)
je 0x597b1
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x5946c
movl 0xa8(%rbx), %esi
cmpl 0x90(%rbx), %esi
jge 0x597aa
movq %rbx, %rdi
movl $0x1, %edx
callq 0x12360
jmp 0x597aa
cmpb $0x0, 0xb4(%rbx)
je 0x597b1
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x5946c
movq %rbx, %rdi
callq 0x4b88d
movl 0xa8(%rbx), %esi
testl %esi, %esi
jle 0x597aa
decl %esi
movq %rbx, %rdi
movl $0x1, %edx
callq 0x12360
decl 0xa8(%rbx)
jmp 0x597aa
testl %r15d, %r15d
je 0x5955f
movq %rbx, %rdi
callq 0x4b88d
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x59704
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x5970a
movq %rbx, %rdi
callq 0x12350
jmp 0x597aa
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
testl %r15d, %r15d
je 0x59588
cmpl %ecx, %eax
jne 0x59367
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
movq %rbx, %rdi
callq 0x5a24e
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
jmp 0x5959e
testl %r15d, %r15d
je 0x595ab
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x5971e
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x59724
movq %rbx, %rdi
callq 0x13890
jmp 0x597aa
movl 0xac(%rbx), %ecx
movl 0xb0(%rbx), %eax
testl %r15d, %r15d
je 0x595c7
cmpl %eax, %ecx
jne 0x5972c
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x59732
testl %r15d, %r15d
je 0x595da
movq %rbx, %rdi
callq 0x4b88d
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x59748
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x5974e
movq %rbx, %rdi
callq 0x12840
jmp 0x597aa
testl %r15d, %r15d
je 0x59664
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x59796
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x5979c
movq %rbx, %rdi
callq 0x13e30
jmp 0x597aa
callq 0x4b88d
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
cmpl %ecx, %eax
movss 0xc(%rsp), %xmm0
je 0x594bb
jle 0x594a2
movl %eax, 0xb0(%rbx)
movl %ecx, 0xac(%rbx)
movl 0xac(%rbx), %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x5a290
movb $0x0, 0xb7(%rbx)
movl 0x10(%r12), %eax
movl 0xc(%r12), %esi
addl %eax, %esi
movl %esi, 0xa8(%rbx)
testl %eax, %eax
jle 0x597b1
decl %esi
leaq 0x10(%rsp), %r14
movl $0x0, (%r14)
leaq 0x50(%rsp), %rcx
movq 0x30(%rsp), %rdi
movq %r14, %rdx
callq 0x13f60
cmpl $0xa, (%r14)
jne 0x597b1
decl 0xa8(%rbx)
jmp 0x597b1
cmpl %ecx, %eax
jne 0x597c0
movl 0xa8(%rbx), %ebp
movl %ebp, %eax
leal -0x1(%rax), %ebp
testl %eax, %eax
jle 0x59556
movq %rbx, %rdi
movl %ebp, %esi
callq 0x5a453
testl %eax, %eax
je 0x5953f
xorl %eax, %eax
testl %ebp, %ebp
cmovgl %ebp, %eax
jmp 0x59598
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
cmpl %ecx, %eax
jne 0x597e2
movl 0xa8(%rbx), %eax
testl %eax, %eax
jle 0x597aa
decl %eax
jmp 0x597a4
cmpl %ecx, %eax
jne 0x5980b
movq %rbx, %rdi
callq 0x5a24e
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4b88d
jmp 0x597b1
movl 0x90(%rbx), %eax
movl %eax, 0xa8(%rbx)
movq $0x0, 0xac(%rbx)
jmp 0x597aa
cmpl %eax, %ecx
jne 0x59815
incl 0xa8(%rbx)
jmp 0x5981d
movl 0x90(%rbx), %ecx
testl %ecx, %ecx
je 0x595f6
movl 0xa8(%rbx), %eax
cmpl %ecx, %eax
jne 0x595f6
decl %eax
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4b88d
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
cmpl %ecx, %eax
movss 0xc(%rsp), %xmm0
je 0x5963b
jle 0x59622
movl %eax, 0xb0(%rbx)
movl %ecx, 0xac(%rbx)
movl 0xac(%rbx), %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x38(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x5a290
movl 0xc(%r15), %eax
jmp 0x597a4
movl $0x0, 0xb0(%rbx)
movq $0x0, 0xa8(%rbx)
jmp 0x597aa
movl %eax, 0xa8(%rbx)
movss 0xc(%rsp), %xmm0
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x5a290
movb $0x0, 0xb7(%rbx)
movl 0x10(%r12), %eax
movl 0xc(%r12), %esi
addl %eax, %esi
movl %esi, 0xa8(%rbx)
testl %eax, %eax
jle 0x596f3
decl %esi
leaq 0x10(%rsp), %r14
movl $0x0, (%r14)
leaq 0x50(%rsp), %rcx
movq 0x30(%rsp), %rdi
movq %r14, %rdx
callq 0x13f60
cmpl $0xa, (%r14)
jne 0x596f3
decl 0xa8(%rbx)
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
jmp 0x597b1
movl %eax, 0xa8(%rbx)
movl 0xb0(%rbx), %eax
testl %eax, %eax
jle 0x59740
decl %eax
movl %eax, 0xb0(%rbx)
jmp 0x59740
movl %eax, 0xa8(%rbx)
movl 0x90(%rbx), %eax
jmp 0x5979e
movl %eax, 0xa8(%rbx)
incl 0xb0(%rbx)
movq %rbx, %rdi
callq 0x4b88d
movl 0xb0(%rbx), %eax
jmp 0x597a4
movl %eax, 0xa8(%rbx)
movss 0xc(%rsp), %xmm0
movl 0x90(%rbx), %ecx
testl %ecx, %ecx
je 0x59770
movl 0xa8(%rbx), %eax
cmpl %ecx, %eax
jne 0x59770
decl %eax
movl %eax, 0xa8(%rbx)
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x38(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x5a290
movl 0xc(%r15), %eax
jmp 0x5979e
movl %eax, 0xa8(%rbx)
xorl %eax, %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xa8(%rbx)
movb $0x0, 0xb7(%rbx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jle 0x597ce
movl %eax, 0xb0(%rbx)
movl %ecx, 0xac(%rbx)
movl 0xac(%rbx), %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
jmp 0x597aa
jle 0x597f0
movl %eax, 0xb0(%rbx)
movl %ecx, 0xac(%rbx)
movl 0xac(%rbx), %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
jmp 0x597aa
movq %rbx, %rdi
callq 0x5a209
jmp 0x597b1
movq %rbx, %rdi
callq 0x5a209
movq %rbx, %rdi
callq 0x4b88d
jmp 0x597aa