// File: /workspace/github_c_makefile_star2_O0/wtakuo[P]SVM/svm.c
// Function: vm
void vm (Bcode code[], size_t codelen,
         Value *vs_base, size_t vs_size,
         Value gv[], size_t gv_size,
         vm_mode_t mode) {

    Bcode *ip = code;     // instruction pointer
    Value *sp = vs_base;  // stack pointer
    Value *fp = sp;       // frame pointer
    Value *lv = sp;       // local variable base pointer

#ifndef DISABLE_EXECUTION_TRACE
    long nsteps = 0;
#endif

    for (;;) {
#ifndef DISABLE_EXECUTION_TRACE
        nsteps++;
        dump_vm(nsteps, ip, code, lv, fp, sp, vs_base, gv, gv_size, mode);
#endif

        switch (*ip) {
        case i_nop:
            ip++;
            break;
        case i_dup:
            sp--;
            sp[0] = sp[1];
            ip++;
            break;
        case i_pop:
            sp++;
            ip++;
            break;
        case i_goto:
            ip += B2INT(ip[1], ip[2]) + 3;
            break;
        case i_ifeq:
            if ((int)sp[0] == 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_ifne:
            if ((int)sp[0] != 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_iflt:
            if ((int)sp[0] < 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_ifle:
            if ((int)sp[0] <= 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_ifgt:
            if ((int)sp[0] > 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_ifge:
            if ((int)sp[0] >= 0)
                ip += B2INT(ip[1], ip[2]);
            ip += 3;
            sp++;
            break;
        case i_giload:
        case i_gaload:
            sp--;
            /* sp[0] = gv[(int)ip[1] << 8 | (int)ip[2]]; */
            sp[0] = gv[B2INT(ip[1], ip[2])];
            ip += 3;
            break;
        case i_gistore:
        case i_gastore:
            /* gv[(int)ip[1] << 8 | (int)ip[2]] = sp[0]; */
            gv[B2INT(ip[1], ip[2])] = sp[0];
            sp++;
            ip += 3;
            break;
        case i_iload:
        case i_aload:
            sp--;
            /* sp[0] = lv[-(int)ip[1]]; */
            sp[0] = lv[-B1INT(ip[1])];
            ip += 2;
            break;
        case i_iload_0:
        case i_aload_0:
            sp--;
            sp[0] = lv[0];
            ip += 1;
            break;
        case i_iload_1:
        case i_aload_1:
            sp--;
            sp[0] = lv[-1];
            ip += 1;
            break;
        case i_iload_2:
        case i_aload_2:
            sp--;
            sp[0] = lv[-2];
            ip += 1;
            break;
        case i_iload_3:
        case i_aload_3:
            sp--;
            sp[0] = lv[-3];
            ip += 1;
            break;
        case i_istore:
        case i_astore:
            /* lv[-(int)ip[1]] = sp[0]; */
            lv[-B1INT(ip[1])] = sp[0];
            sp++;
            ip += 2;
            break;
        case i_istore_0:
        case i_astore_0:
            lv[0] = sp[0];
            sp++;
            ip += 1;
            break;
        case i_istore_1:
        case i_astore_1:
            lv[-1] = sp[0];
            sp++;
            ip += 1;
            break;
        case i_istore_2:
        case i_astore_2:
            lv[-2] = sp[0];
            sp++;
            ip += 1;
            break;
        case i_istore_3:
        case i_astore_3:
            lv[-3] = sp[0];
            sp++;
            ip += 1;
            break;
        case i_bipush:
            sp--;
            /* sp[0] = (Value)ip[1]; */
            sp[0] = (Value)B1INT(ip[1]);
            ip += 2;
            break;
        case i_sipush:
            sp--;
            sp[0] = (Value)((int)ip[1] + (int)ip[2] * 256);
            ip += 3;
            break;
        case i_iconst_m1:
            sp--;
            sp[0] = (Value)-1;
            ip++;
            break;
        case i_iconst_0:
            sp--;
            sp[0] = (Value)0;
            ip++;
            break;
        case i_iconst_1:
            sp--;
            sp[0] = (Value)1;
            ip++;
            break;
        case i_iconst_2:
            sp--;
            sp[0] = (Value)2;
            ip++;
            break;
        case i_iadd:
            sp[1] = sp[1] + sp[0];
            sp++;
            ip++;
            break;
        case i_isub:
            sp[1] = sp[1] - sp[0];
            sp++;
            ip++;
            break;
        case i_imul:
            sp[1] = sp[1] * sp[0];
            sp++;
            ip++;
            break;
        case i_idiv:
            sp[1] = sp[1] / sp[0];
            sp++;
            ip++;
            break;
        case i_irem:
            sp[1] = sp[1] % sp[0];
            sp++;
            ip++;
            break;
        case i_icall: 
        case i_acall: {
            Function f = (Function)sp[0];
            int nargs = (int)ip[1];
            Value *newfp = sp - f->nlv - 2;
            newfp[0] = (Value)(ip + 2);
            newfp[1] = (Value)lv;
            newfp[2] = (Value)fp;
            lv = sp + nargs;
            sp = fp = newfp;
            ip = f->code;
            break;
        }
        case i_ticall:
        case i_tacall: {
            Function f = (Function)sp[0];
            int nargs = (int)ip[1];
            Value ip_save = fp[0];
            Value lv_save = fp[1];
            Value fp_save = fp[2];
            Value *arg = sp + nargs;
            for (int i = 0; i < nargs ; i++)
                lv[-i] = arg[-i];
            fp = lv - nargs - f->nlv - 3;
            sp = fp;
            fp[0] = ip_save;
            fp[1] = lv_save;
            fp[2] = fp_save;
            ip = f->code;
            break;
        }
        case i_sicall:
        case i_sacall: {
            Function f = (Function)sp[0];
            int nargs = (int)ip[1];
            Value *arg = sp + nargs;
            for (int i = 0; i < nargs; i++)
                lv[-i] = arg[-i];
            sp = fp;
            ip = f->code;
            break;
        }
        case i_iret:
        case i_aret:
            lv[0] = sp[0];
            sp = lv;
            ip = (Bcode *)fp[0];
            lv = (Value *)fp[1];
            fp = (Value *)fp[2];
            break;
        case i_halt:
            return;
        case i_showtop:
            printf(">>> %d\n", (int)sp[0]);
            sp++;
            ip++;
            break;
        default:
            fprintf(stderr, "Invalid instruction: %d\n", (int)ip[-1]);
            return;
        }
    }
}

// Assembly:
subq $0xc8, %rsp
movl 0xd0(%rsp), %eax
movq %rdi, 0xc0(%rsp)
movq %rsi, 0xb8(%rsp)
movq %rdx, 0xb0(%rsp)
movq %rcx, 0xa8(%rsp)
movq %r8, 0xa0(%rsp)
movq %r9, 0x98(%rsp)
movq 0xc0(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0xb0(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x90(%rsp), %rax
movzbl (%rax), %eax
movq %rax, (%rsp)
subq $0x36, %rax
ja 0x1f65
movq (%rsp), %rax
leaq 0x1dc5(%rip), %rcx      # 0x3004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq $0x3, %rax
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
jne 0x1349
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
je 0x13b5
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
jge 0x1421
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
jg 0x148d
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
jle 0x14f9
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
cmpl $0x0, %eax
jl 0x1565
movq 0x90(%rsp), %rax
movsbl 0x1(%rax), %eax
shll $0x8, %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
cltq
addq 0x90(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0xa0(%rsp), %rax
movq 0x90(%rsp), %rcx
movsbl 0x1(%rcx), %ecx
shll $0x8, %ecx
movq 0x90(%rsp), %rdx
movzbl 0x2(%rdx), %edx
orl %edx, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rdx
movq 0xa0(%rsp), %rax
movq 0x90(%rsp), %rcx
movsbl 0x1(%rcx), %ecx
shll $0x8, %ecx
movq 0x90(%rsp), %rsi
movzbl 0x2(%rsi), %esi
orl %esi, %ecx
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x78(%rsp), %rax
movq 0x90(%rsp), %rcx
movzbl 0x1(%rcx), %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
movq (%rax,%rcx,8), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x2, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x78(%rsp), %rax
movq -0x8(%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x78(%rsp), %rax
movq -0x10(%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x78(%rsp), %rax
movq -0x18(%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rdx
movq 0x78(%rsp), %rax
movq 0x90(%rsp), %rcx
movzbl 0x1(%rcx), %ecx
movl %ecx, %esi
xorl %ecx, %ecx
subq %rsi, %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x2, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rcx
movq 0x78(%rsp), %rax
movq %rcx, (%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rcx
movq 0x78(%rsp), %rax
movq %rcx, -0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rcx
movq 0x78(%rsp), %rax
movq %rcx, -0x10(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rcx
movq 0x78(%rsp), %rax
movq %rcx, -0x18(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
movzbl 0x1(%rax), %eax
movl %eax, %ecx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x2, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
movzbl 0x1(%rax), %eax
movq 0x90(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
shll $0x8, %ecx
addl %ecx, %eax
movslq %eax, %rcx
movq 0x88(%rsp), %rax
movq %rcx, (%rax)
movq 0x90(%rsp), %rax
addq $0x3, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq $-0x1, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq $0x0, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq $0x1, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
addq $-0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rax
movq $0x2, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x88(%rsp), %rax
addq (%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x88(%rsp), %rax
subq (%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x88(%rsp), %rax
imulq (%rax), %rcx
movq 0x88(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x88(%rsp), %rcx
xorl %edx, %edx
divq (%rcx)
movq %rax, %rcx
movq 0x88(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x88(%rsp), %rcx
xorl %edx, %edx
divq (%rcx)
movq 0x88(%rsp), %rax
movq %rdx, 0x8(%rax)
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x70(%rsp)
movq 0x90(%rsp), %rax
movzbl 0x1(%rax), %eax
movl %eax, 0x6c(%rsp)
movq 0x88(%rsp), %rax
movq 0x70(%rsp), %rdx
xorl %ecx, %ecx
subq 0x8(%rdx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x10, %rax
movq %rax, 0x60(%rsp)
movq 0x90(%rsp), %rcx
addq $0x2, %rcx
movq 0x60(%rsp), %rax
movq %rcx, (%rax)
movq 0x78(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x80(%rsp), %rcx
movq 0x60(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x88(%rsp), %rax
movslq 0x6c(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x78(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x80(%rsp)
movq %rax, 0x88(%rsp)
movq 0x70(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x58(%rsp)
movq 0x90(%rsp), %rax
movzbl 0x1(%rax), %eax
movl %eax, 0x54(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x80(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x88(%rsp), %rax
movslq 0x54(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x30(%rsp)
movl $0x0, 0x2c(%rsp)
movl 0x2c(%rsp), %eax
cmpl 0x54(%rsp), %eax
jge 0x1d96
movq 0x30(%rsp), %rax
xorl %ecx, %ecx
subl 0x2c(%rsp), %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdx
movq 0x78(%rsp), %rax
xorl %ecx, %ecx
subl 0x2c(%rsp), %ecx
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x1d5b
movq 0x78(%rsp), %rax
movslq 0x54(%rsp), %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq 0x58(%rsp), %rdx
xorl %ecx, %ecx
subq 0x8(%rdx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x18, %rax
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x48(%rsp), %rcx
movq 0x80(%rsp), %rax
movq %rcx, (%rax)
movq 0x40(%rsp), %rcx
movq 0x80(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x38(%rsp), %rcx
movq 0x80(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x58(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x90(%rsp), %rax
movzbl 0x1(%rax), %eax
movl %eax, 0x1c(%rsp)
movq 0x88(%rsp), %rax
movslq 0x1c(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x10(%rsp)
movl $0x0, 0xc(%rsp)
movl 0xc(%rsp), %eax
cmpl 0x1c(%rsp), %eax
jge 0x1e9e
movq 0x10(%rsp), %rax
xorl %ecx, %ecx
subl 0xc(%rsp), %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdx
movq 0x78(%rsp), %rax
xorl %ecx, %ecx
subl 0xc(%rsp), %ecx
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movl 0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc(%rsp)
jmp 0x1e63
movq 0x80(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x88(%rsp), %rax
movq (%rax), %rcx
movq 0x78(%rsp), %rax
movq %rcx, (%rax)
movq 0x78(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x80(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x90(%rsp)
movq 0x80(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x78(%rsp)
movq 0x80(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x80(%rsp)
jmp 0x1f8b
jmp 0x1f90
movq 0x88(%rsp), %rax
movq (%rax), %rax
movl %eax, %esi
leaq 0x11ac(%rip), %rdi      # 0x30e0
movb $0x0, %al
callq 0x1040
movq 0x88(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x88(%rsp)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x1f8b
movq 0x308c(%rip), %rax      # 0x4ff8
movq (%rax), %rdi
movq 0x90(%rsp), %rax
movzbl -0x1(%rax), %edx
leaq 0x1166(%rip), %rsi      # 0x30e8
movb $0x0, %al
callq 0x1050
jmp 0x1f90
jmp 0x121b
addq $0xc8, %rsp
retq
nopl (%rax,%rax)