// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_factor[abi:cxx11](pl0_ast_factor const*)
pair<Value *, string> pl0_tac_factor(pl0_ast_factor const * factor) {
    cout << __func__;
    pair<Value *, string> ans;
    // variables used inner switch-case block.
    int d1, d2;
    constant val;
    variable var, array;
    Value *idx, *t;

    switch (factor->t) {
        case pl0_ast_factor::type_t::ID:
            d1 = valtb.depth(factor->ptr.id->id), d2 = vartb.depth(factor->ptr.id->id);
            if (d1 > d2) {
                // constant
                valtb.find(factor->ptr.id->id, true, val);
                ans = make_pair(new Value(val.val, val.dt), "integer");
            }
            else if (d2 > d1) {
                // variable
                vartb.find(factor->ptr.id->id, true, var);
                if (var.type.length() >= 5 && var.type.substr(0, 5) == "array") {
                    pl0_ast_error(factor->loc, string("use an array identifier ") + "\"" + var.name + "\"" + " as a factor.");
                }
                ans = make_pair(new Value(var.name, var.dt), var.dt);
            }
            else {
                // undeclared identifier
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->ptr.id->id + "\"");
                ans = make_pair(new Value(factor->ptr.id->id, "undefined"), "");
            }
            break;
        case pl0_ast_factor::type_t::UNSIGNED:
            ans = make_pair(new Value(factor->ptr.unsignedn->val, factor->ptr.unsignedn->dt == pl0_ast_constv::INT ? "integer" : "char"), "integer");
            break;
        case pl0_ast_factor::type_t::EXPR:
            ans = pl0_tac_expr(factor->ptr.expr);
            break;
        case pl0_ast_factor::type_t::CALL_FUNC:
            ans = pl0_tac_call_func(factor->ptr.call_func);
            break;
        case pl0_ast_factor::type_t::ARRAY_E:
            // validate array identifier.
            if (vartb.find(factor->arraye.first->id, true, array)) {
                if (array.len == -1) {
                    pl0_ast_error(factor->loc, "expected an array identifier.");
                }
            }
            else {
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->arraye.first->id + "\"");
                array.name = factor->arraye.first->id; // give it a default value, although it's wrong.
            }
            // validate array index.
            idx = pl0_tac_expr(factor->arraye.second).first;
            t = new Value(irb.maketmp()+"#"+array.name+"#"+idx->value()+"#", array.dt);
            irb.emit("=[]", t, new Value(array.name, array.dt), idx);
            ans = make_pair(t, array.type.substr(0, array.type.length()-5));
            break;
        default:
            pl0_ast_error(factor->loc, "undefined syntax");
            ans = make_pair(new Value("^^^^^", "undefined"), "");
            cout << "UNIMPLEMENT EXPRESSION" << endl;
            break;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x438, %rsp            # imm = 0x438
movq %rsi, %r15
movq %rdi, %r14
movq 0x47d61(%rip), %rdi     # 0xbffd8
leaq 0x21291(%rip), %rsi     # 0x9950f
xorl %ebx, %ebx
xorl %edx, %edx
callq 0x52e0
movq %rbx, (%r14)
leaq 0x8(%r14), %rax
movq %rax, 0x50(%rsp)
leaq 0x18(%r14), %rbp
movq %rbp, 0x8(%r14)
movq %rbx, 0x10(%r14)
movb $0x0, 0x18(%r14)
leaq 0x3f0(%rsp), %rdi
callq 0x7cc20
leaq 0x388(%rsp), %rdi
callq 0x7c24c
leaq 0x320(%rsp), %rdi
callq 0x7c24c
movl 0x8(%r15), %eax
decl %eax
cmpl $0x4, %eax
ja 0x7856e
leaq 0x2062b(%rip), %rcx     # 0x9890c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbp, 0x48(%rsp)
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x49322(%rip), %rdi     # 0xc1620
callq 0x7cc84
movl %eax, %ebp
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x492dc(%rip), %rdi     # 0xc15f0
callq 0x7c43e
cmpl %eax, %ebp
jle 0x78748
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x492f0(%rip), %rdi     # 0xc1620
leaq 0x3f0(%rsp), %rcx
movl $0x1, %edx
callq 0x7ce02
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
movl 0x410(%rsp), %ebp
leaq 0x310(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x418(%rsp), %rsi
movq 0x420(%rsp), %rdx
addq %rsi, %rdx
leaq 0x300(%rsp), %rdi
callq 0x36590
movb $0x1, %bl
leaq 0x300(%rsp), %rdx
movq %r15, %rdi
movl %ebp, %esi
callq 0x7b654
movq %r15, (%r14)
movq 0x10(%r14), %rdx
xorl %ebx, %ebx
leaq 0x1ed68(%rip), %rcx     # 0x9710f
movl $0x7, %r8d
movq 0x50(%rsp), %rdi
xorl %esi, %esi
callq 0x5370
movq 0x300(%rsp), %rdi
cmpq %r12, %rdi
je 0x79477
movq 0x310(%rsp), %rsi
jmp 0x7946f
movq %rbp, 0x48(%rsp)
movq 0x18(%r15), %rsi
addq $0x8, %rsi
leaq 0x49205(%rip), %rdi     # 0xc15f0
leaq 0x320(%rsp), %rcx
movl $0x1, %edx
callq 0x7c7b8
testb %al, %al
je 0x786e5
cmpl $-0x1, 0x380(%rsp)
jne 0x78973
movq (%r15), %r12
leaq 0x270(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x207dd(%rip), %rsi     # 0x98c06
leaq 0x207f3(%rip), %rdx     # 0x98c23
leaq 0x260(%rsp), %rdi
callq 0x2670a
leaq 0x260(%rsp), %rsi
movq %r12, %rdi
callq 0x6be78
movq 0x260(%rsp), %rdi
cmpq %rbx, %rdi
je 0x78973
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x78973
movq 0x10(%r15), %rsi
movq %rsp, %rdi
callq 0x77914
jmp 0x7848d
movq 0x10(%r15), %rsi
movq %rsp, %rdi
callq 0x79b2c
leaq 0x8(%rsp), %r15
movq -0x8(%r15), %rax
movq %rax, (%r14)
movq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x5310
movq (%r15), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x79477
movq 0x18(%rsp), %rsi
jmp 0x7946f
movq %rbp, 0x48(%rsp)
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
movq 0x10(%r15), %rax
movl 0x8(%rax), %ebp
xorl %ecx, %ecx
cmpl $0x0, 0xc(%rax)
sete %cl
leaq 0x1ec25(%rip), %rax     # 0x9710f
leaq 0x20cda(%rip), %rsi     # 0x991cb
cmoveq %rax, %rsi
leaq 0x290(%rsp), %r15
movq %r15, -0x10(%r15)
leaq (%rcx,%rcx,2), %rax
leaq (%rsi,%rax), %rdx
addq $0x4, %rdx
leaq 0x280(%rsp), %rdi
callq 0x2670a
movb $0x1, %bl
leaq 0x280(%rsp), %rdx
movq %r12, %rdi
movl %ebp, %esi
callq 0x7b654
movq %r12, (%r14)
movq 0x10(%r14), %rdx
xorl %ebx, %ebx
leaq 0x1ebd1(%rip), %rcx     # 0x9710f
movl $0x7, %r8d
movq 0x50(%rsp), %rdi
xorl %esi, %esi
callq 0x5370
movq 0x280(%rsp), %rdi
cmpq %r15, %rdi
je 0x79477
movq 0x290(%rsp), %rsi
jmp 0x7946f
movq (%r15), %r15
leaq 0x1f0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x206a6(%rip), %rsi     # 0x98c2a
leaq 0x206af(%rip), %rdx     # 0x98c3a
leaq 0x1e0(%rsp), %rdi
movq %rbp, 0x48(%rsp)
callq 0x2670a
leaq 0x1e0(%rsp), %rsi
movq %r15, %rdi
callq 0x6be78
movq 0x1e0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x785ca
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x1d0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x20651(%rip), %rsi     # 0x98c3b
leaq 0x2064f(%rip), %rdx     # 0x98c40
leaq 0x1c0(%rsp), %rdi
callq 0x2670a
leaq 0x1b0(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x205eb(%rip), %rsi     # 0x98bfc
leaq 0x205ed(%rip), %rdx     # 0x98c05
leaq 0x1a0(%rsp), %rdi
callq 0x2670a
movb $0x1, %r12b
leaq 0x1c0(%rsp), %rsi
leaq 0x1a0(%rsp), %rdx
movq %r15, %rdi
callq 0x7be1c
movq %r15, (%r14)
movq 0x10(%r14), %rdx
xorl %r12d, %r12d
leaq 0x20ebe(%rip), %rcx     # 0x9950f
movq 0x50(%rsp), %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x5370
movq 0x1a0(%rsp), %rdi
cmpq %r13, %rdi
je 0x7867d
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7869a
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x47937(%rip), %r15     # 0xbffd8
leaq 0x20599(%rip), %rsi     # 0x98c41
movl $0x16, %edx
movq %r15, %rdi
callq 0x52e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x5240
movsbl %al, %esi
movq 0x47905(%rip), %rdi     # 0xbffd8
callq 0x5030
movq %rax, %rdi
callq 0x5190
jmp 0x79477
movq (%r15), %r12
leaq 0x68(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x2033b(%rip), %rsi     # 0x98a33
leaq 0x20351(%rip), %rdx     # 0x98a50
leaq 0x58(%rsp), %rdi
callq 0x2670a
leaq 0x208e3(%rip), %rsi     # 0x98ff3
leaq 0x58(%rsp), %rdi
callq 0x5420
leaq 0x38(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78815
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x7881b
jge 0x787b2
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x48e97(%rip), %rdi     # 0xc15f0
leaq 0x388(%rsp), %rcx
movl $0x1, %edx
callq 0x7c7b8
movq 0x3d0(%rsp), %rbx
cmpq $0x5, %rbx
jb 0x78edc
leaq 0x3c8(%rsp), %rsi
leaq 0x28(%rsp), %rdi
movl $0x5, %ecx
xorl %edx, %edx
callq 0x52a0
leaq 0x202d5(%rip), %rsi     # 0x98a72
leaq 0x28(%rsp), %rdi
callq 0x50c0
testl %eax, %eax
sete %bpl
jmp 0x78ede
movq (%r15), %r12
leaq 0x68(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x2026e(%rip), %rsi     # 0x98a33
leaq 0x20284(%rip), %rdx     # 0x98a50
leaq 0x58(%rsp), %rdi
callq 0x2670a
leaq 0x20816(%rip), %rsi     # 0x98ff3
leaq 0x58(%rsp), %rdi
callq 0x5420
leaq 0x38(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78f7b
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x78f81
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%r15), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
callq 0x50d0
leaq 0x10(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7886e
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x78875
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x2075d(%rip), %rsi     # 0x98ff3
callq 0x5420
leaq 0x150(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x788cb
movq %rdx, 0x140(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x150(%rsp)
jmp 0x788d1
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x140(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x6be78
movq 0x140(%rsp), %rdi
cmpq %rbx, %rdi
je 0x78915
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x7892b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x78947
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x7895e
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x18(%r15), %rsi
addq $0x8, %rsi
leaq 0x320(%rsp), %rdi
callq 0x5150
movq 0x20(%r15), %rsi
movq %rsp, %rdi
callq 0x77914
leaq 0x18(%rsp), %rax
movq -0x18(%rax), %rbx
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7899e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %rbp
leaq 0x48bf6(%rip), %rsi     # 0xc15a8
leaq 0x98(%rsp), %rdi
callq 0x69190
leaq 0x88(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x98(%rsp), %rsi
movq 0xa0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x78(%rsp), %rdi
callq 0x36590
leaq 0x20235(%rip), %rsi     # 0x98c24
leaq 0x78(%rsp), %rdi
callq 0x5420
movq 0x320(%rsp), %rsi
movq 0x328(%rsp), %rdx
leaq 0x78(%rsp), %rdi
callq 0x50d0
leaq 0x68(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78a3a
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x78a40
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x58(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x201c1(%rip), %rsi     # 0x98c24
callq 0x5420
leaq 0x38(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78a90
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x78a98
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xb8(%rsp), %rdi
movq %rbx, %rsi
callq 0x7cf94
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %r8
movq 0xc0(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
cmpq %r12, %rcx
je 0x78ae5
movq 0x38(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x78b0a
leaq 0xc8(%rsp), %rdi
movl $0xf, %esi
cmpq %rdi, -0x10(%rdi)
je 0x78b05
movq 0xc8(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x78b1e
movq 0xb8(%rsp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x50d0
jmp 0x78b2f
leaq 0xb8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x52c0
leaq 0x10(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x78b52
movq %rsi, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x78b58
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x200a8(%rip), %rsi     # 0x98c24
movq %rsp, %rdi
callq 0x5420
movq %rbx, 0x138(%rsp)
leaq 0x108(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78bbc
movq %rdx, 0xf8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x108(%rsp)
jmp 0x78bc2
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x100(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x250(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x340(%rsp), %rsi
movq 0x348(%rsp), %rdx
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0x36590
leaq 0xf8(%rsp), %rsi
leaq 0x240(%rsp), %rdx
movq %rbp, %rdi
callq 0x7be1c
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x78c3e
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xf8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x78c5b
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x78c76
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x78c97
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x78cae
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x78cca
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x78ce4
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xa8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x78d05
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xe8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1ff0e(%rip), %rsi     # 0x98c26
leaq 0x1ff0a(%rip), %rdx     # 0x98c29
leaq 0xd8(%rsp), %rdi
callq 0x2670a
movl $0x48, %edi
callq 0x5250
movq %rax, %r13
leaq 0x230(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x320(%rsp), %rsi
movq 0x328(%rsp), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0x36590
leaq 0x210(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x340(%rsp), %rsi
movq 0x348(%rsp), %rdx
addq %rsi, %rdx
leaq 0x200(%rsp), %rdi
callq 0x36590
movb $0x1, %bl
leaq 0x220(%rsp), %rsi
leaq 0x200(%rsp), %rdx
movq %r13, %rdi
callq 0x7be1c
xorl %ebx, %ebx
leaq 0x487f3(%rip), %rdi     # 0xc15a8
leaq 0xd8(%rsp), %rsi
movq %rbp, %rdx
movq %r13, %rcx
movq 0x138(%rsp), %r8
callq 0x7b53e
movq 0x200(%rsp), %rdi
cmpq %r15, %rdi
je 0x78ded
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x220(%rsp), %rdi
cmpq %r12, %rdi
leaq 0x18(%rsp), %r15
je 0x78e0f
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
leaq 0x38(%rsp), %rbx
je 0x78e39
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x360(%rsp), %rsi
movq 0x8(%rsi), %rcx
addq $-0x5, %rcx
leaq 0x28(%rsp), %rdi
xorl %edx, %edx
callq 0x52a0
leaq 0x8(%rsp), %rsi
movq %rbp, -0x8(%rsi)
movq %r15, (%rsi)
movq 0x28(%rsp), %rax
cmpq %rbx, %rax
je 0x78e7c
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x78e83
movups (%rbx), %xmm0
movups %xmm0, (%r15)
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movq %rbx, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
movq %rbp, (%r14)
movq 0x50(%rsp), %rdi
callq 0x5310
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x78ec4
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79477
movq 0x38(%rsp), %rsi
jmp 0x7946f
xorl %ebp, %ebp
cmpq $0x5, %rbx
jb 0x78eff
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x78eff
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
je 0x7935a
movq (%r15), %r15
leaq 0xa8(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1fcb6(%rip), %rsi     # 0x98bd5
leaq 0x1fcc7(%rip), %rdx     # 0x98bed
leaq 0x98(%rsp), %rdi
callq 0x2670a
leaq 0x200b9(%rip), %rsi     # 0x98ff3
leaq 0x98(%rsp), %rdi
callq 0x5420
leaq 0x88(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x79196
movq %rdx, 0x78(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x88(%rsp)
jmp 0x7919e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x10(%r15), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
callq 0x50d0
leaq 0x10(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x78fd4
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x78fdb
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1fff7(%rip), %rsi     # 0x98ff3
callq 0x5420
leaq 0x170(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x79031
movq %rdx, 0x160(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x170(%rsp)
jmp 0x79037
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x160(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x6be78
movq 0x160(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7907b
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x79091
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x790ad
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x790c4
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
movq 0x10(%r15), %rax
leaq 0x2d0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq 0x2c0(%rsp), %rdi
callq 0x36590
leaq 0x2b0(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1faf0(%rip), %rsi     # 0x98bfc
leaq 0x1faf2(%rip), %rdx     # 0x98c05
leaq 0x2a0(%rsp), %rdi
callq 0x2670a
movb $0x1, %r15b
leaq 0x2c0(%rsp), %rsi
leaq 0x2a0(%rsp), %rdx
movq %r12, %rdi
callq 0x7be1c
movq %r12, (%r14)
movq 0x10(%r14), %rdx
xorl %r15d, %r15d
leaq 0x203c3(%rip), %rcx     # 0x9950f
movq 0x50(%rsp), %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x5370
movq 0x2a0(%rsp), %rdi
cmpq %r13, %rdi
je 0x79178
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79477
movq 0x2d0(%rsp), %rsi
jmp 0x7946f
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x78(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x388(%rsp), %rsi
movq 0x390(%rsp), %rdx
callq 0x50d0
leaq 0x68(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x791f6
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x791fc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x58(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1fdd4(%rip), %rsi     # 0x98ff3
callq 0x5420
leaq 0x10(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7924a
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x79251
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1f97c(%rip), %rsi     # 0x98bee
callq 0x5420
leaq 0x190(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x792a7
movq %rdx, 0x180(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x190(%rsp)
jmp 0x792ad
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x180(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r15, %rdi
callq 0x6be78
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x792f1
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x79307
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x79323
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x7933d
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x98(%rsp), %rdi
cmpq %r12, %rdi
je 0x7935a
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0x2f0(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x388(%rsp), %rsi
movq 0x390(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2e0(%rsp), %rdi
callq 0x36590
leaq 0x128(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x118(%rsp), %rdi
callq 0x36590
movb $0x1, %bpl
leaq 0x2e0(%rsp), %rsi
leaq 0x118(%rsp), %rdx
movq %r15, %rdi
callq 0x7be1c
leaq 0x8(%rsp), %r12
movq %r15, -0x8(%r12)
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rdx
addq %rsi, %rdx
xorl %ebp, %ebp
movq %r12, %rdi
callq 0x36590
movq (%rsp), %rax
movq %rax, (%r14)
movq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x5310
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79435
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7945a
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2e0(%rsp), %rdi
cmpq %r13, %rdi
je 0x79477
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x370(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x79498
movq 0x370(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x350(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x794b9
movq 0x350(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x330(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x794da
movq 0x330(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x3d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x794fb
movq 0x3d8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x3b8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7951c
movq 0x3b8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x398(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7953d
movq 0x398(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x428(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7955e
movq 0x428(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x400(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7957f
movq 0x400(%rsp), %rsi
incq %rsi
callq 0x5260
movq %r14, %rax
addq $0x438, %rsp            # imm = 0x438
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x795b9
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x795b9
movq %rax, %r14
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x795d4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x795d4
movq %rax, %r14
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x795f5
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x795f5
movq %rax, %r14
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x79614
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x79614
movq %rax, %r14
movq 0x98(%rsp), %rdi
cmpq %r12, %rdi
je 0x79ade
movq 0xa8(%rsp), %rsi
jmp 0x79a39
jmp 0x79adb
jmp 0x79adb
movq %rax, %r14
movq 0x260(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79ade
movq 0x270(%rsp), %rsi
jmp 0x79a39
jmp 0x79adb
movq %rax, %r14
movb $0x1, %r15b
jmp 0x796ed
movq %rax, %r14
movb $0x1, %bpl
jmp 0x79740
movq %rax, %r14
movb $0x1, %r15b
jmp 0x7970a
movq %rax, %r14
movb $0x1, %bpl
jmp 0x7975d
jmp 0x79adb
jmp 0x79adb
movq %rax, %r14
movq 0x160(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7979a
movq 0x170(%rsp), %rsi
jmp 0x79783
jmp 0x79797
jmp 0x797b7
jmp 0x797d8
jmp 0x79adb
movq %rax, %r14
movq 0x2a0(%rsp), %rdi
cmpq %r13, %rdi
je 0x796ed
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7970a
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r15b, %r15b
jne 0x79aae
jmp 0x79ade
movq %rax, %r14
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x79740
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2e0(%rsp), %rdi
cmpq %r13, %rdi
je 0x7975d
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
jne 0x79a80
jmp 0x79ade
movq %rax, %r14
movq 0x140(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7979a
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7979a
movq %rax, %r14
movb $0x1, %bl
jmp 0x7995c
movq %rax, %r14
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x797ba
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x797ba
jmp 0x79adb
movq %rax, %r14
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x797db
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x797db
movq %rax, %r14
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x79ade
movq 0x68(%rsp), %rsi
jmp 0x79a39
jmp 0x79adb
jmp 0x79adb
movq %rax, %r14
movb $0x1, %bl
jmp 0x799ea
movq %rax, %r14
movb $0x1, %bl
jmp 0x79a07
movq %rax, %r14
jmp 0x79a18
jmp 0x79adb
movq %rax, %r14
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x79843
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x79843
movq %rax, %r14
movq 0xf8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79865
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x79865
movq %rax, %r14
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x79885
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x79885
movq %rax, %r14
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x798ab
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x798ab
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x798c7
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x798c7
movq %rax, %r14
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x798ea
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x798ea
jmp 0x798e7
movq %rax, %r14
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x79909
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x79909
movq %rax, %r14
leaq 0xa8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7992a
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %esi
movq %rbp, %rdi
jmp 0x79ab6
movq %rax, %r14
jmp 0x7992a
movq %rax, %r14
movq 0x300(%rsp), %rdi
cmpq %r12, %rdi
je 0x7995c
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
jne 0x79a80
jmp 0x79ade
jmp 0x79adb
movq %rax, %r14
movb $0x1, %r12b
jmp 0x79a5e
movq %rax, %r14
movb $0x1, %r12b
jmp 0x79a7b
jmp 0x79adb
movq %rax, %r14
movq 0x1e0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79ade
movq 0x1f0(%rsp), %rsi
jmp 0x79a39
movq %rax, %r14
movb $0x1, %bl
jmp 0x79aaa
jmp 0x79adb
jmp 0x79adb
jmp 0x799c0
movq %rbp, 0x48(%rsp)
jmp 0x79adb
movq %rax, %r14
movq 0x200(%rsp), %rdi
cmpq %r15, %rdi
je 0x799ea
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x220(%rsp), %rdi
cmpq %r12, %rdi
je 0x79a07
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x79a18
movl $0x48, %esi
movq %r13, %rdi
callq 0x5260
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x79ade
movq 0xe8(%rsp), %rsi
incq %rsi
jmp 0x79ab6
movq %rax, %r14
movq 0x1a0(%rsp), %rdi
cmpq %r13, %rdi
je 0x79a5e
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x79a7b
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r12b, %r12b
je 0x79ade
movl $0x48, %esi
movq %r15, %rdi
jmp 0x79ab6
movq %rax, %r14
movq 0x280(%rsp), %rdi
cmpq %r15, %rdi
je 0x79aaa
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x79ade
movl $0x48, %esi
movq %r12, %rdi
callq 0x5260
jmp 0x79ade
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x79aeb
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x79af8
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x79b05
movq %rax, %r14
leaq 0x320(%rsp), %rdi
callq 0x7bdce
leaq 0x388(%rsp), %rdi
callq 0x7bdce
leaq 0x3f0(%rsp), %rdi
callq 0x7bd98
movq 0x50(%rsp), %rax
movq (%rax), %rdi
cmpq 0x48(%rsp), %rdi
je 0x79b24
movq 0x48(%rsp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x5260
movq %r14, %rdi
callq 0x53d0