// File: /workspace/github_cpp_makefile_star2_O1/eniac[P]Mantis/src/compile/compile_c.cpp
// Function: generatePrologueEnd(std::vector<AstNode*, std::allocator<AstNode*>>, std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char>>&, int, int)
void generatePrologueEnd(std::vector<AstNode*> nodeArray, ostringstream& oss_init_end, int ing_iso_opt, int egr_iso_opt) {

    oss_init_end << "  __mantis__add_vars_ing;\n";
    oss_init_end << "  __mantis__add_vars_egr;\n";

    // Flip __vv to point to shallow copy
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_init_end << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_init_end << "\n  __mantis__flip_vv_egr;\n\n";
    }    

    P4RInitBlockNode * init_node = findInitBlock(nodeArray);
    string p4r_init_user_str = "";
    if (init_node != 0) {
        p4r_init_user_str = init_node->body_->toString();
    }

    for (auto node : nodeArray) {
        // For each mbl table
        if(typeContains(node, "P4RMalleableTableNode")) {
            TableNode* table = dynamic_cast<P4RMalleableTableNode*>(node)->table_;
            string table_name = *(table->name_->word_);

            // Whenever mbl table(s) present, isolation required

            TableActionStmtsNode* actions = table->actions_;

            // Mbl tables are always with With matches (at least match on __vv)
            // For each action
            for (TableActionStmtNode* tas : *actions->list_) {
                string action_name = *tas->name_->word_;

                string str_prepare_macro_func;
                string str_mirror_macro_func;

                std::smatch result;

                // Construct match regrex for add
                str_prepare_macro_func = table_name + "_add_" + action_name;
                std::regex e_add (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"

                // Stop after first match
                while (std::regex_search (p4r_init_user_str, result, e_add)) {
                    
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    // Call corresponding mirror macros
                    oss_init_end << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";

                    // Search remaining string of p4r_reaction_user_str
                    p4r_init_user_str = result.suffix().str();
                }
                // Mod
                str_prepare_macro_func = table_name + "_mod_" + action_name;
                std::regex e_mod (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_init_user_str, result, e_mod)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_init_end << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_init_user_str = result.suffix().str();
                }
                // Del
                str_prepare_macro_func = table_name + "_del_" + action_name;
                std::regex e_del (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_init_user_str, result, e_del)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_init_end << "\n  "
                                << str_mirror_macro_func
                                << ";\n\n";
                    p4r_init_user_str = result.suffix().str();
                }
            }   
        }
    }

    // Point __vv back to working copy for dialogue
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_init_end<< "\n  __mantis__flip_vv_ing;\n\n"; 
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_init_end<< "\n  __mantis__flip_vv_egr;\n\n";
    }  
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movl %ecx, %r12d
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x2972d(%rip), %rsi     # 0x78027
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x2e440
leaq 0x29734(%rip), %rsi     # 0x78042
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r13b
je 0x4e935
leaq 0x28c50(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r12b
je 0x4e94f
leaq 0x28c52(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
leaq -0x1f0(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x32d96
movq %r15, %rdi
callq 0x6fdcd
movq %rax, %r15
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
je 0x4e97d
callq 0x2e360
movl %r13d, -0x138(%rbp)
movl %r12d, -0x134(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x28f3e(%rip), %rdx     # 0x778db
leaq -0x130(%rbp), %rdi
movq %rdx, %rsi
callq 0x33112
testq %r15, %r15
je 0x4e9eb
movq 0x48(%r15), %rsi
movq (%rsi), %rax
leaq -0x110(%rbp), %rdi
callq *(%rax)
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %r15
movq %r15, %rsi
callq 0x2e4c0
movq (%r15), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4e9eb
callq 0x2e360
movq (%r14), %rax
movq 0x8(%r14), %rcx
movq %rcx, -0x1c0(%rbp)
cmpq %rcx, %rax
je 0x4f6d8
leaq -0x148(%rbp), %r15
leaq -0x88(%rbp), %r14
movq %rax, -0x1c8(%rbp)
movq (%rax), %r12
movq %r12, %rdi
leaq 0x291c1(%rip), %rsi     # 0x77be5
callq 0x6f390
testb %al, %al
je 0x4f6c0
movq %r12, %rdi
leaq 0x3dbf5(%rip), %rsi     # 0x8c630
leaq 0x3e98e(%rip), %rdx     # 0x8d3d0
xorl %ecx, %ecx
callq 0x2e430
movq 0x40(%rax), %r12
movq 0x40(%r12), %rax
movq 0x40(%rax), %rax
leaq -0x100(%rbp), %rcx
movq %rcx, -0x110(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x32f92
movq 0x50(%r12), %rax
movq 0x40(%rax), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
movq %rax, -0x1d0(%rbp)
cmpq %rax, %rcx
je 0x4f6a8
movq %rcx, -0x1d8(%rbp)
movq (%rcx), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
leaq -0x168(%rbp), %rcx
movq %rcx, -0x178(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x178(%rbp), %rdi
callq 0x32f92
leaq -0x98(%rbp), %rax
movq %rax, -0xa8(%rbp)
xorl %ecx, %ecx
movq %rcx, -0xa0(%rbp)
movb %cl, -0x98(%rbp)
leaq -0xe0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq %rcx, -0xe8(%rbp)
movb %cl, -0xe0(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
movaps %xmm0, -0xd0(%rbp)
leaq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x32f92
movq %r14, %rdi
leaq 0x28f17(%rip), %rsi     # 0x77a5e
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r14, %rdi
callq 0x2e130
leaq -0x188(%rbp), %r12
movq %r12, -0x198(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4eb92
movq %rdx, -0x198(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x188(%rbp)
jmp 0x4eb9a
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x190(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x2e4c0
movq -0x198(%rbp), %rdi
cmpq %r12, %rdi
je 0x4ebd8
callq 0x2e360
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4ebed
callq 0x2e360
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32f92
movq %r12, %rdi
leaq 0x29441(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x29438(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ec54
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4ec5a
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq 0x293f0(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x78(%rbp), %rsi
movq %rsi, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ecab
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4ecb1
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x198(%rbp), %rdi
movq %r14, %rsi
movl $0x10, %edx
callq 0x50c64
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4ecf1
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed03
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
jne 0x4eec8
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x198(%rbp), %rcx
xorl %r8d, %r8d
callq 0x61303
testb %al, %al
je 0x4eed2
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4ed8f
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x636da
jmp 0x4eda6
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4edc6
callq 0x2e360
movq %r14, %rdi
leaq 0x28eb7(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50cf7
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4ee00
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x29260(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x2839b(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4ee75
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4ee96
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x636da
jmp 0x4eea9
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4ed14
callq 0x2e360
jmp 0x4ed14
leaq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %r12
movq %r12, %rdi
callq 0x32f92
movq %r12, %rdi
leaq 0x28c45(%rip), %rsi     # 0x77b46
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ef46
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4ef4e
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4ef85
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4ef97
callq 0x2e360
movq %r15, -0x158(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %r12
movq %r12, %rdi
callq 0x32f92
movq %r12, %rdi
leaq 0x29095(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x2908c(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f000
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4f006
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x29044(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f051
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4f057
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
movl $0x10, %edx
callq 0x50c64
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f091
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f0a3
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
jne 0x4f262
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
movq %r14, %rcx
xorl %r8d, %r8d
callq 0x61303
testb %al, %al
je 0x4f26c
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4f12b
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
leaq -0x48(%rbp), %r13
movq %r13, %rdi
callq 0x636da
jmp 0x4f143
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x48(%rbp), %r13
leaq -0xa8(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f160
callq 0x2e360
leaq -0x48(%rbp), %r12
movq %r12, %rdi
leaq 0x28b19(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50cf7
leaq -0xf0(%rbp), %rdi
movq %r12, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f19b
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x28ec5(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x28000(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4f210
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4f232
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq %r13, %rdi
callq 0x636da
jmp 0x4f246
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x130(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f0b3
callq 0x2e360
jmp 0x4f0b3
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32f92
movq %r12, %rdi
leaq 0x28832(%rip), %rsi     # 0x77acd
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f2da
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4f2e2
movups (%rcx), %xmm0
movups %xmm0, (%r12)
leaq -0x48(%rbp), %rsi
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4f317
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f329
callq 0x2e360
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x1b8(%rbp), %r12
movq %r12, %rdi
callq 0x32f92
movq %r12, %rdi
leaq 0x28cfc(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x28cf3(%rip), %rsi     # 0x78063
callq 0x2e7e0
movq %r15, -0x158(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f39e
movq %rdx, -0x158(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x148(%rbp)
jmp 0x4f3a5
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, -0x150(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x158(%rbp), %rdi
leaq 0x28c9f(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4f3f6
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4f3fc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq -0x68(%rbp), %rsi
movl $0x10, %edx
callq 0x50c64
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f437
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f448
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
je 0x4f5ee
callq 0x2e360
jmp 0x4f5ee
movq %r14, %r13
movq %r15, %r12
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4f4bc
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
leaq -0x68(%rbp), %r14
movq %r14, %rdi
callq 0x636da
jmp 0x4f4d4
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x68(%rbp), %r14
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f4f1
callq 0x2e360
movq %r14, %rdi
leaq 0x2878c(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50cf7
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f528
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x28b38(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x27c73(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4f59d
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4f5bb
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r15, -0x68(%rbp)
movq %r14, %rdi
callq 0x636da
jmp 0x4f5cb
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f5e8
callq 0x2e360
movq %r12, %r15
movq %r13, %r14
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x48(%rbp), %rcx
xorl %r8d, %r8d
callq 0x61303
testb %al, %al
jne 0x4f469
leaq -0x48(%rbp), %rdi
callq 0x50cce
movq %r14, %rdi
callq 0x50cce
leaq -0x198(%rbp), %rdi
callq 0x50cce
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x4f648
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x4f660
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x4f678
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x4f690
callq 0x2e360
movq -0x1d8(%rbp), %rcx
addq $0x8, %rcx
cmpq -0x1d0(%rbp), %rcx
jne 0x4ea9a
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4f6c0
callq 0x2e360
movq -0x1c8(%rbp), %rax
addq $0x8, %rax
cmpq -0x1c0(%rbp), %rax
jne 0x4ea10
testb $0x2, -0x138(%rbp)
je 0x4f6f5
leaq 0x27e90(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, -0x134(%rbp)
je 0x4f712
leaq 0x27e8f(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x4f72a
callq 0x2e360
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4f762
jmp 0x4f762
movq %rax, %rbx
jmp 0x4f97b
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
jne 0x4f976
jmp 0x4f97b
jmp 0x4f762
movq %rax, %rbx
jmp 0x4f963
jmp 0x4f8d2
jmp 0x4f788
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f790
callq 0x2e360
jmp 0x4f790
movq %rax, %rbx
jmp 0x4f7a1
movq %rax, %rbx
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f7a1
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
jmp 0x4f7c3
jmp 0x4f7b8
jmp 0x4f8d2
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f8d5
callq 0x2e360
jmp 0x4f8d5
jmp 0x4f8e3
jmp 0x4f7dd
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
jne 0x4f83a
jmp 0x4f8e6
jmp 0x4f8e3
movq %rax, %rbx
jmp 0x4f818
jmp 0x4f7fe
movq %rax, %rbx
jmp 0x4f82a
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f818
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f82a
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f8e6
callq 0x2e360
jmp 0x4f8e6
movq %rax, %rbx
jmp 0x4f94b
jmp 0x4f862
jmp 0x4f850
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
jmp 0x4f8a6
jmp 0x4f86a
movq %rax, %rbx
jmp 0x4f8f2
movq %rax, %rbx
jmp 0x4f89e
movq %rax, %rbx
jmp 0x4f88c
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4f88c
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f89e
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f8f2
callq 0x2e360
jmp 0x4f8f2
jmp 0x4f8d2
jmp 0x4f8d2
jmp 0x4f8c4
jmp 0x4f8c4
jmp 0x4f8e3
jmp 0x4f8e3
jmp 0x4f8c4
jmp 0x4f8d2
jmp 0x4f8e3
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x50cce
jmp 0x4f8d5
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x50cce
jmp 0x4f8e6
movq %rax, %rbx
leaq -0x198(%rbp), %rdi
callq 0x50cce
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x4f903
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x4f91b
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x4f933
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x4f94b
callq 0x2e360
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4f963
callq 0x2e360
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x4f97b
callq 0x2e360
movq %rbx, %rdi
callq 0x2e730