// File: /workspace/github_c_makefile_star2_O0/endeav0r[P]hvm/src/vm.c
// Function: vm_step
int vm_step (struct _vm * vm)
{
    const struct _instruction * ins;
    uint16_t tmp;

    if (vm->halted) return VM_HALTED;

    ins = (const struct _instruction *) &(vm->mem[vm->regs[REG_IP]]);

    vm->regs[REG_IP] += 4;

    switch (ins->opcode) {
    case OP_ADD     : RREG(operand_0) = RREG(operand_1) + RREG(operand_2); break;
    case OP_SUB     : RREG(operand_0) = RREG(operand_1) - RREG(operand_2); break;
    case OP_MUL     : RREG(operand_0) = RREG(operand_1) * RREG(operand_2); break;
    case OP_DIV     : RREG(operand_0) = RREG(operand_1) / RREG(operand_2); break;
    case OP_MOD     : RREG(operand_0) = RREG(operand_1) % RREG(operand_2); break;
    case OP_AND     : RREG(operand_0) = RREG(operand_1) & RREG(operand_2); break;
    case OP_OR      : RREG(operand_0) = RREG(operand_1) | RREG(operand_2); break;
    case OP_XOR     : RREG(operand_0) = RREG(operand_1) ^ RREG(operand_2); break;
    case OP_ADDLVAL : RREG(operand_0) += ntohs(ins->lval); break;
    case OP_SUBLVAL : RREG(operand_0) -= ntohs(ins->lval); break;
    case OP_MULLVAL : RREG(operand_0) *= ntohs(ins->lval); break;
    case OP_DIVLVAL : RREG(operand_0) /= ntohs(ins->lval); break;
    case OP_MODLVAL : RREG(operand_0) %= ntohs(ins->lval); break;
    case OP_ANDLVAL : RREG(operand_0) &= ntohs(ins->lval); break;
    case OP_ORLVAL  : RREG(operand_0) |= ntohs(ins->lval); break;
    case OP_XORLVAL : RREG(operand_0) ^= ntohs(ins->lval); break;

    case OP_JMP : vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JE  : if (vm->flags == 0) vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JNE : if (vm->flags != 0) vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JL  : if (vm->flags <  0) vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JLE : if (vm->flags <= 0) vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JG  : if (vm->flags >  0) vm->regs[REG_IP] += ntohs(ins->lval); break;
    case OP_JGE : if (vm->flags >= 0) vm->regs[REG_IP] += ntohs(ins->lval); break;

    case OP_CALL  :
    case OP_CALLR :
        vm->regs[REG_SP] -= 2;
        tmp = htons(vm->regs[REG_IP]);
        memcpy(&(vm->mem[vm->regs[REG_SP]]), &tmp, 2);
        if (ins->opcode == OP_CALL)
            vm->regs[REG_IP] += ntohs(ins->lval);
        else
            vm->regs[REG_IP] += vm->regs[ins->operand_0];
        break;
    case OP_RET :
        memcpy(&tmp, &(vm->mem[vm->regs[REG_SP]]), 2);
        vm->regs[REG_IP] = ntohs(tmp);
        vm->regs[REG_SP] += 2;
        break;
    case OP_LOAD :
        memcpy(&tmp, &(vm->mem[ntohs(ins->lval)]), 2);
        RREG(operand_0) = ntohs(tmp);
        break;
    case OP_LOADR :
        memcpy(&tmp, &(vm->mem[RREG(operand_1)]), 2);
        RREG(operand_0) = ntohs(tmp);
        break;
    case OP_STOR :
        tmp = htons(RREG(operand_0));
        memcpy(&(vm->mem[ntohs(ins->lval)]), &tmp, 2);
        break;
    case OP_STORR :
        tmp = htons(RREG(operand_1));
        memcpy(&(vm->mem[vm->regs[RREG(operand_0)]]), &tmp, 2);
        break;
    case OP_LOADB  : RREG(operand_0) = vm->mem[ntohs(ins->lval)]; break;
    case OP_LOADBR : RREG(operand_0) = vm->mem[RREG(operand_1)]; break;
    case OP_STORB  : vm->mem[ins->lval] = RREG(operand_0) & 0xff; break;
    case OP_STORBR : vm->mem[RREG(operand_0)] = RREG(operand_1) & 0xff; break;
    case OP_IN     : RREG(operand_0) = getchar(); break;
    case OP_OUT :
        putchar(RREG(operand_0));
        fflush(stdout);
        break;
    case OP_PUSH :
        vm->regs[REG_SP] -= 2;
        tmp = htons(RREG(operand_0));
        memcpy(&(vm->mem[vm->regs[REG_SP]]), &tmp, 2);
        break;
    case OP_PUSHLVAL :
        vm->regs[REG_SP] -= 2;
        tmp = ins->lval; // already in correct byte order
        memcpy(&(vm->mem[vm->regs[REG_SP]]), &tmp, 2);
        break;
    case OP_POP :
        memcpy(&tmp, &(vm->mem[vm->regs[REG_SP]]), 2);
        RREG(operand_0) = ntohs(tmp);
        vm->regs[REG_SP] += 2;
        break;
    case OP_MOV     : RREG(operand_0) = RREG(operand_1); break;
    case OP_MOVLVAL : RREG(operand_0) = ntohs(ins->lval); break;
    case OP_CMP     : vm->flags = RREG(operand_0) - RREG(operand_1); break;
    case OP_CMPLVAL : vm->flags = RREG(operand_0) - ntohs(ins->lval); break;
    case OP_HLT     : vm->halted = 1; return VM_HALTED;
    case OP_SYSCALL : vm_syscall(vm); break;
    case OP_NOP     : break;
    default :
        // on a bad instruction, reset IP
        vm->regs[REG_IP] -= 4;
        vm->halted = 1;
        return VM_BAD_INSTRUCTION;
    }
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x24(%rax)
je 0x73e5
movl $0x1, -0x4(%rbp)
jmp 0x8393
movq -0x10(%rbp), %rcx
movq (%rcx), %rax
movzwl 0x16(%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movw 0x16(%rax), %cx
addw $0x4, %cx
movw %cx, 0x16(%rax)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
addl $-0x10, %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0x80, %eax
ja 0x8369
movq -0x28(%rbp), %rax
leaq 0x2483(%rip), %rcx      # 0x98b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x48(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x3c(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0x3c(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
addl %ecx, %eax
movw %ax, -0x2a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x38(%rbp), %rax
movl %edx, %ecx
movw -0x2a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x68(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x5c(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0x5c(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
subl %ecx, %eax
movw %ax, -0x4a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x58(%rbp), %rax
movl %edx, %ecx
movw -0x4a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x88(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x7c(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0x7c(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
imull %ecx, %eax
movw %ax, -0x6a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x78(%rbp), %rax
movl %edx, %ecx
movw -0x6a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xa8(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x9c(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0x9c(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
cltd
idivl %ecx
movw %ax, -0x8a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x98(%rbp), %rax
movl %edx, %ecx
movw -0x8a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xc8(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0xbc(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0xbc(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
cltd
idivl %ecx
movw %dx, %ax
movw %ax, -0xaa(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xb8(%rbp), %rax
movl %edx, %ecx
movw -0xaa(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xe8(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0xdc(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0xdc(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
andl %ecx, %eax
movw %ax, -0xca(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xd8(%rbp), %rax
movl %edx, %ecx
movw -0xca(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x108(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0xfc(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0xfc(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
orl %ecx, %eax
movw %ax, -0xea(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0xf8(%rbp), %rax
movl %edx, %ecx
movw -0xea(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x128(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x11c(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x3(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl -0x11c(%rbp), %eax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
xorl %ecx, %eax
movw %ax, -0x10a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x118(%rbp), %rax
movl %edx, %ecx
movw -0x10a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x130(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
addl %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x138(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
subl %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x140(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
imull %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x148(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
cltd
idivl %esi
movl %eax, %edx
movq -0x148(%rbp), %rax
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x150(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
cltd
idivl %esi
movq -0x150(%rbp), %rax
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x158(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
andl %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x160(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x160(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
orl %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %esi
movq -0x10(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x168(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edx
xorl %esi, %edx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jne 0x7b20
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
je 0x7b4d
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jge 0x7b7a
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jg 0x7ba7
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jle 0x7bd4
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jl 0x7c01
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movzwl 0x1a(%rax), %ecx
subl $0x2, %ecx
movw %cx, 0x1a(%rax)
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %edi
callq 0x2110
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movzwl 0x1a(%rcx), %ecx
movw -0x1a(%rbp), %dx
movw %dx, (%rax,%rcx)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x27, %eax
jne 0x7c69
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movzwl %ax, %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x7c88
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
movzwl 0x8(%rax,%rcx,2), %edx
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
addl %edx, %ecx
movw %cx, 0x16(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movzwl 0x1a(%rcx), %ecx
movw (%rax,%rcx), %ax
movw %ax, -0x1a(%rbp)
movzwl -0x1a(%rbp), %edi
callq 0x2240
movw %ax, %cx
movq -0x10(%rbp), %rax
movw %cx, 0x16(%rax)
movq -0x10(%rbp), %rax
movzwl 0x1a(%rax), %ecx
addl $0x2, %ecx
movw %cx, 0x1a(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x180(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movw %ax, %cx
movq -0x180(%rbp), %rax
movzwl %cx, %ecx
movw (%rax,%rcx), %ax
movw %ax, -0x1a(%rbp)
movzwl -0x1a(%rbp), %edi
callq 0x2240
movw %ax, -0x16a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x178(%rbp), %rax
movl %edx, %ecx
movw -0x16a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x198(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movq -0x198(%rbp), %rax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
movw (%rax,%rcx), %ax
movw %ax, -0x1a(%rbp)
movzwl -0x1a(%rbp), %edi
callq 0x2240
movw %ax, -0x182(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x190(%rbp), %rax
movl %edx, %ecx
movw -0x182(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x1a8(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edi
callq 0x2110
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1a0(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movw %ax, %cx
movq -0x1a0(%rbp), %rax
movzwl %cx, %ecx
movw -0x1a(%rbp), %dx
movw %dx, (%rax,%rcx)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x1c0(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edi
callq 0x2110
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1b8(%rbp)
movq -0x10(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movq -0x1b8(%rbp), %rax
movl %edx, %esi
movq -0x1b0(%rbp), %rdx
movslq %esi, %rsi
movzwl 0x8(%rdx,%rsi,2), %edx
movzwl 0x8(%rcx,%rdx,2), %ecx
movw -0x1a(%rbp), %dx
movw %dx, (%rax,%rcx)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1d8(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movw %ax, %cx
movq -0x1d8(%rbp), %rax
movzwl %cx, %ecx
movzbl (%rax,%rcx), %eax
movw %ax, -0x1c2(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x1d0(%rbp), %rax
movl %edx, %ecx
movw -0x1c2(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1f0(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movq -0x1f0(%rbp), %rax
movslq %edx, %rdx
movzwl 0x8(%rcx,%rdx,2), %ecx
movzbl (%rax,%rcx), %eax
movw %ax, -0x1da(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x1e8(%rbp), %rax
movl %edx, %ecx
movw -0x1da(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x1f8(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movzwl 0x2(%rcx), %ecx
movb %dl, (%rax,%rcx)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x210(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
andl $0xff, %eax
movb %al, -0x1f9(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x208(%rbp)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movq -0x208(%rbp), %rax
movl %edx, %esi
movb -0x1f9(%rbp), %dl
movslq %esi, %rsi
movzwl 0x8(%rcx,%rsi,2), %ecx
movb %dl, (%rax,%rcx)
jmp 0x838c
movb $0x0, %al
callq 0x24a0
movw %ax, -0x212(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x220(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x220(%rbp), %rax
movl %edx, %ecx
movw -0x212(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x228(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x228(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edi
callq 0x2050
movq 0x3f00(%rip), %rax      # 0xbfd0
movq (%rax), %rdi
callq 0x2200
jmp 0x838c
movq -0x10(%rbp), %rax
movzwl 0x1a(%rax), %ecx
subl $0x2, %ecx
movw %cx, 0x1a(%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x230(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x230(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %edi
callq 0x2110
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movzwl 0x1a(%rcx), %ecx
movw -0x1a(%rbp), %dx
movw %dx, (%rax,%rcx)
jmp 0x838c
movq -0x10(%rbp), %rax
movzwl 0x1a(%rax), %ecx
subl $0x2, %ecx
movw %cx, 0x1a(%rax)
movq -0x18(%rbp), %rax
movw 0x2(%rax), %ax
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movzwl 0x1a(%rcx), %ecx
movw -0x1a(%rbp), %dx
movw %dx, (%rax,%rcx)
jmp 0x838c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movzwl 0x1a(%rcx), %ecx
movw (%rax,%rcx), %ax
movw %ax, -0x1a(%rbp)
movzwl -0x1a(%rbp), %edi
callq 0x2240
movw %ax, -0x232(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x240(%rbp), %rax
movl %edx, %ecx
movw -0x232(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
movq -0x10(%rbp), %rax
movzwl 0x1a(%rax), %ecx
addl $0x2, %ecx
movw %cx, 0x1a(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x258(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x258(%rbp), %rax
movslq %edx, %rcx
movw 0x8(%rax,%rcx,2), %ax
movw %ax, -0x242(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x250(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x250(%rbp), %rax
movl %edx, %ecx
movw -0x242(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movw %ax, -0x25a(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x268(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x268(%rbp), %rax
movl %edx, %ecx
movw -0x25a(%rbp), %dx
movslq %ecx, %rcx
movw %dx, 0x8(%rax,%rcx,2)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x278(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x278(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %ecx
movq -0x10(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x2(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movq -0x270(%rbp), %rax
movslq %edx, %rdx
movzwl 0x8(%rax,%rdx,2), %eax
subl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movq %rax, -0x288(%rbp)
movq -0x18(%rbp), %rax
movzbl 0x1(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movq -0x288(%rbp), %rax
movslq %edx, %rcx
movzwl 0x8(%rax,%rcx,2), %eax
movl %eax, -0x27c(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x2(%rax), %edi
callq 0x2240
movl -0x27c(%rbp), %ecx
movzwl %ax, %eax
subl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x20(%rax)
jmp 0x838c
movq -0x10(%rbp), %rax
movl $0x1, 0x24(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x8393
movq -0x10(%rbp), %rdi
callq 0x6fd0
jmp 0x838c
jmp 0x838c
movq -0x10(%rbp), %rax
movzwl 0x16(%rax), %ecx
subl $0x4, %ecx
movw %cx, 0x16(%rax)
movq -0x10(%rbp), %rax
movl $0x1, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x8393
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
nop