// File: joncampbell123[P]haxcc/haxpp.cpp
// Function: do_macro_expand(std::vector<token, std::allocator<token>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void do_macro_expand(token_string &tokens,const string &ident,string::iterator &li,const string::iterator lie,const int32_t lineno,const string &source) {
    auto mi = macro_store.find(ident);
    if (mi != macro_store.end()) {
        const macro_t &macro = mi->second;
        bool variadic_given = false;
        vector<string> param;
        string fstr;

        if (macro.parens) {
            parse_skip_whitespace(li,lie);
            if (strit_next_match_inc(li,lie,'(')) {
                do {
                    bool variad = macro.last_param_variadic && (param.size()+size_t(1)) == macro.param.size();

                    if (variad)
                        variadic_given = variad;

                    parse_skip_whitespace(li,lie);
                    if (li == lie) throw invalid_argument("macro invocation parameter list ended suddenly");
                    if (strit_next_match_inc(li,lie,')')) break;

                    if (param.size() >= macro.param.size())
                        throw invalid_argument("macro invocation parameter list with too many parameters");
                    param.push_back(do_macro_expand_read_invoke_param(li,lie,variad));

                    parse_skip_whitespace(li,lie);
                    if (li == lie) throw invalid_argument("macro invocation parameter list ended suddenly");
                    if (strit_next_match_inc(li,lie,')'))
                        break;
                    else if (!strit_next_match_inc(li,lie,','))
                        throw invalid_argument(string("macro invocation parameter list unexpected char ") + *li);
                } while(1);

                /* enforce required param count. the one for the variadic macro is not required to be present. */
                size_t reqd_params = macro.param.size();
                if (macro.last_param_variadic && macro.last_param_optional && reqd_params != size_t(0)) reqd_params--;
                if (param.size() < reqd_params)
                    throw invalid_argument("macro invocation parameter list has too few parameters");

                /* fill in the rest with blank */
                while (param.size() < macro.param.size())
                    param.push_back(string());

                parse_skip_whitespace(li,lie);
            }
            else {
                throw invalid_argument("macro invoked without parenthesis when defined with parameters");
            }
        }

        for (vector<token>::const_iterator si=macro.subst.begin();si!=macro.subst.end();) {
            if (do_macro_expand_val(fstr,si,macro.subst.end(),param,macro,variadic_given)) {
                while (si != macro.subst.end() && (*si).tval == token::TOKEN_PASTE) {
                    si++;
                    if (si == macro.subst.end())
                        throw invalid_argument("token paste must be followed by another token");
                    if (!do_macro_expand_val(fstr,si,macro.subst.end(),param,macro,variadic_given))
                        throw invalid_argument("token paste was not followed by expandable value");
                }

                if (si != macro.subst.end())
                    fstr += " ";
            }
            else if ((*si).tval == token::STRINGIFY) {
                si++;
                if (si == macro.subst.end())
                    throw invalid_argument("macro stringify with nothing to stringify");

                string tmpr;
                if (!do_macro_expand_val(tmpr,si,macro.subst.end(),param,macro,variadic_given))
                    throw invalid_argument("stringify was not followed by expandable value");

                if (!tmpr.empty())
                    fstr += pp_stringify(tmpr) + " ";
            }
            else if ((*si).tval == token::COMMA) {
                si++;
                auto si2 = si;
                if (si2 != macro.subst.end() && (*si2).tval == token::TOKEN_PASTE) { /* , ## */
                    si2++;
                    if (si2 != macro.subst.end() && (*si2).tval == token::VA_ARGS) { /* , ## __VA_ARGS__ */
                        si = si2;

                        if (variadic_given) {
                            fstr += ",";
                            do_macro_expand_val(fstr,si,macro.subst.end(),param,macro,variadic_given);
                        }
                        else {
                            si++;
                        }

                        continue;
                    }
                }

                fstr += ",";
            }
            else {
                throw invalid_argument("unexpected token in macro expansion");
            }
        }

        parse_tokens(tokens,fstr.begin(),fstr.end(),lineno,source);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x340, %rsp            # imm = 0x340
movq %rcx, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %r8d, -0x24(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rsi
leaq 0x27a7a(%rip), %rdi     # 0x332e8
callq 0x15b10
movq %rax, -0x38(%rbp)
leaq 0x27a6a(%rip), %rdi     # 0x332e8
callq 0x15b40
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x15ae0
testb $0x1, %al
jne 0xb89d
jmp 0xc712
leaq -0x38(%rbp), %rdi
callq 0x16180
addq $0x20, %rax
movq %rax, -0x48(%rbp)
movb $0x0, -0x49(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x161a0
leaq -0x88(%rbp), %rdi
callq 0x33d0
movq -0x48(%rbp), %rax
testb $0x1, 0x32(%rax)
je 0xbf7a
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rsi
callq 0x4e50
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rsi
movl $0x28, %edx
callq 0x64a0
movb %al, -0x271(%rbp)
jmp 0xb918
movb -0x271(%rbp), %al
testb $0x1, %al
jne 0xb927
jmp 0xbf11
jmp 0xb929
movq -0x48(%rbp), %rcx
xorl %eax, %eax
testb $0x1, 0x30(%rcx)
movb %al, -0x272(%rbp)
je 0xb972
leaq -0x68(%rbp), %rdi
callq 0x161c0
addq $0x1, %rax
movq %rax, -0x280(%rbp)
movq -0x48(%rbp), %rdi
addq $0x18, %rdi
callq 0x161c0
movq %rax, %rcx
movq -0x280(%rbp), %rax
cmpq %rcx, %rax
sete %al
movb %al, -0x272(%rbp)
movb -0x272(%rbp), %al
andb $0x1, %al
movb %al, -0xa5(%rbp)
testb $0x1, -0xa5(%rbp)
je 0xb9ad
movb -0xa5(%rbp), %al
andb $0x1, %al
movb %al, -0x49(%rbp)
jmp 0xb9ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0xc6fb
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rsi
callq 0x4e50
movq -0x20(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x15b70
testb $0x1, %al
jne 0xb9db
jmp 0xba42
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x288(%rbp)
leaq 0x19810(%rip), %rsi     # 0x25209
callq 0x3530
jmp 0xba00
movq -0x288(%rbp), %rdi
movq 0x275ca(%rip), %rsi     # 0x32fd8
movq 0x275ab(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x288(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rsi
movl $0x29, %edx
callq 0x64a0
movb %al, -0x289(%rbp)
jmp 0xba6a
movb -0x289(%rbp), %al
testb $0x1, %al
jne 0xba76
jmp 0xba7b
jmp 0xbdb3
leaq -0x68(%rbp), %rdi
callq 0x161c0
movq %rax, -0x298(%rbp)
movq -0x48(%rbp), %rdi
addq $0x18, %rdi
callq 0x161c0
movq %rax, %rcx
movq -0x298(%rbp), %rax
cmpq %rcx, %rax
jb 0xbb0e
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x2a0(%rbp)
leaq 0x19773(%rip), %rsi     # 0x25238
callq 0x3530
jmp 0xbacc
movq -0x2a0(%rbp), %rdi
movq 0x274fe(%rip), %rsi     # 0x32fd8
movq 0x274df(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x2a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
movq -0x20(%rbp), %rsi
movq -0x8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdx
movzbl -0xa5(%rbp), %ecx
andl $0x1, %ecx
leaq -0xd8(%rbp), %rdi
callq 0xb590
jmp 0xbb3c
leaq -0x68(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x161e0
jmp 0xbb4e
leaq -0xd8(%rbp), %rdi
callq 0x3598
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rsi
callq 0x4e50
movq -0x20(%rbp), %rdi
leaq -0x8(%rbp), %rsi
callq 0x15b70
testb $0x1, %al
jne 0xbb8b
jmp 0xbc15
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x2a8(%rbp)
leaq 0x19660(%rip), %rsi     # 0x25209
callq 0x3530
jmp 0xbbb0
movq -0x2a8(%rbp), %rdi
movq 0x2741a(%rip), %rsi     # 0x32fd8
movq 0x273fb(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x3598
jmp 0xc6fb
movq -0x2a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rsi
movl $0x29, %edx
callq 0x64a0
movb %al, -0x2a9(%rbp)
jmp 0xbc3d
movb -0x2a9(%rbp), %al
testb $0x1, %al
jne 0xbc49
jmp 0xbc4e
jmp 0xbdb3
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rsi
movl $0x2c, %edx
callq 0x64a0
movb %al, -0x2aa(%rbp)
jmp 0xbc76
movb -0x2aa(%rbp), %al
testb $0x1, %al
jne 0xbda3
jmp 0xbc86
movb $0x1, -0x13a(%rbp)
movl $0x10, %edi
callq 0x3130
movq %rax, -0x2c0(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
callq 0x34f0
movq -0x2b8(%rbp), %rdx
leaq 0x195b2(%rip), %rsi     # 0x25271
leaq -0x138(%rbp), %rdi
callq 0x15960
jmp 0xbccd
movq -0x20(%rbp), %rdi
callq 0x15a50
movsbl (%rax), %edx
leaq -0x118(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x15c10
jmp 0xbcee
movq -0x2c0(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x34d0
jmp 0xbd03
movq -0x2c0(%rbp), %rdi
movb $0x0, -0x13a(%rbp)
movq 0x272c0(%rip), %rsi     # 0x32fd8
movq 0x272a1(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0xbd7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0xbd6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x3598
leaq -0x138(%rbp), %rdi
callq 0x3598
leaq -0x139(%rbp), %rdi
callq 0x32f0
testb $0x1, -0x13a(%rbp)
jne 0xbd92
jmp 0xbd9e
movq -0x2c0(%rbp), %rdi
callq 0x31f0
jmp 0xc6fb
jmp 0xbda5
jmp 0xbda7
movb $0x1, %al
testb $0x1, %al
jne 0xb929
jmp 0xbdb3
movq -0x48(%rbp), %rdi
addq $0x18, %rdi
callq 0x161c0
movq %rax, -0x148(%rbp)
movq -0x48(%rbp), %rax
testb $0x1, 0x30(%rax)
je 0xbdf7
movq -0x48(%rbp), %rax
testb $0x1, 0x31(%rax)
je 0xbdf7
cmpq $0x0, -0x148(%rbp)
je 0xbdf7
movq -0x148(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x148(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x161c0
cmpq -0x148(%rbp), %rax
jae 0xbe70
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x2c8(%rbp)
leaq 0x1947b(%rip), %rsi     # 0x252a2
callq 0x3530
jmp 0xbe2e
movq -0x2c8(%rbp), %rdi
movq 0x2719c(%rip), %rsi     # 0x32fd8
movq 0x2717d(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x2c8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
jmp 0xbe72
leaq -0x68(%rbp), %rdi
callq 0x161c0
movq %rax, -0x2d0(%rbp)
movq -0x48(%rbp), %rdi
addq $0x18, %rdi
callq 0x161c0
movq %rax, %rcx
movq -0x2d0(%rbp), %rax
cmpq %rcx, %rax
jae 0xbef4
leaq -0x168(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0x33d0
movq -0x2d8(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x161e0
jmp 0xbec3
leaq -0x168(%rbp), %rdi
callq 0x3598
jmp 0xbe72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x3598
jmp 0xc6fb
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x170(%rbp), %rsi
callq 0x4e50
jmp 0xbf78
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x2e0(%rbp)
leaq 0x193aa(%rip), %rsi     # 0x252d9
callq 0x3530
jmp 0xbf36
movq -0x2e0(%rbp), %rdi
movq 0x27094(%rip), %rsi     # 0x32fd8
movq 0x27075(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x2e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
jmp 0xbf7a
movq -0x48(%rbp), %rdi
callq 0x16210
movq %rax, -0x178(%rbp)
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x180(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x16240
testb $0x1, %al
jne 0xbfb6
jmp 0xc689
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x188(%rbp)
movq -0x48(%rbp), %r8
movq -0x188(%rbp), %rdx
movzbl -0x49(%rbp), %r9d
andl $0x1, %r9d
leaq -0x88(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x68(%rbp), %rcx
callq 0xc730
movb %al, -0x2e1(%rbp)
jmp 0xbff9
movb -0x2e1(%rbp), %al
testb $0x1, %al
jne 0xc008
jmp 0xc20a
jmp 0xc00a
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x190(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x16240
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x2e2(%rbp)
jne 0xc03e
jmp 0xc056
leaq -0x178(%rbp), %rdi
callq 0x162b0
cmpl $0x7b, (%rax)
sete %al
movb %al, -0x2e2(%rbp)
movb -0x2e2(%rbp), %al
testb $0x1, %al
jne 0xc065
jmp 0xc1c5
leaq -0x178(%rbp), %rdi
xorl %esi, %esi
callq 0x162d0
movq %rax, -0x198(%rbp)
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x1a0(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x16310
testb $0x1, %al
jne 0xc0a3
jmp 0xc10a
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x2f0(%rbp)
leaq 0x19257(%rip), %rsi     # 0x25318
callq 0x3530
jmp 0xc0c8
movq -0x2f0(%rbp), %rdi
movq 0x26f02(%rip), %rsi     # 0x32fd8
movq 0x26ee3(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x2f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x1a8(%rbp)
movq -0x48(%rbp), %r8
movq -0x1a8(%rbp), %rdx
movzbl -0x49(%rbp), %r9d
andl $0x1, %r9d
leaq -0x88(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x68(%rbp), %rcx
callq 0xc730
movb %al, -0x2f1(%rbp)
jmp 0xc14d
movb -0x2f1(%rbp), %al
testb $0x1, %al
jne 0xc1c0
jmp 0xc159
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x300(%rbp)
leaq 0x191cf(%rip), %rsi     # 0x25346
callq 0x3530
jmp 0xc17e
movq -0x300(%rbp), %rdi
movq 0x26e4c(%rip), %rsi     # 0x32fd8
movq 0x26e2d(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x300(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
jmp 0xc00a
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x1b0(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x16240
testb $0x1, %al
jne 0xc1ee
jmp 0xc205
leaq 0x18d0a(%rip), %rsi     # 0x24eff
leaq -0x88(%rbp), %rdi
callq 0x3280
jmp 0xc203
jmp 0xc205
jmp 0xc684
leaq -0x178(%rbp), %rdi
callq 0x162b0
cmpl $0x7a, (%rax)
jne 0xc47e
leaq -0x178(%rbp), %rdi
xorl %esi, %esi
callq 0x162d0
movq %rax, -0x1b8(%rbp)
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x1c0(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x16310
testb $0x1, %al
jne 0xc25d
jmp 0xc2c4
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x308(%rbp)
leaq 0x190fc(%rip), %rsi     # 0x25377
callq 0x3530
jmp 0xc282
movq -0x308(%rbp), %rdi
movq 0x26d48(%rip), %rsi     # 0x32fd8
movq 0x26d29(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x308(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
leaq -0x1e0(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x33d0
movq -0x48(%rbp), %rdi
callq 0x16280
movq -0x318(%rbp), %rdi
movq %rax, -0x1e8(%rbp)
movq -0x48(%rbp), %r8
movq -0x1e8(%rbp), %rdx
movzbl -0x49(%rbp), %r9d
andl $0x1, %r9d
leaq -0x178(%rbp), %rsi
leaq -0x68(%rbp), %rcx
callq 0xc730
movb %al, -0x309(%rbp)
jmp 0xc31a
movb -0x309(%rbp), %al
testb $0x1, %al
jne 0xc3a8
jmp 0xc32a
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x320(%rbp)
leaq 0x19059(%rip), %rsi     # 0x253a1
callq 0x3530
jmp 0xc34f
movq -0x320(%rbp), %rdi
movq 0x26c7b(%rip), %rsi     # 0x32fd8
movq 0x26c5c(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0xc46d
movq -0x320(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc46d
leaq -0x1e0(%rbp), %rdi
callq 0x34a0
testb $0x1, %al
jne 0xc45c
leaq -0x228(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0xb710
jmp 0xc3d1
leaq 0x18b27(%rip), %rdx     # 0x24eff
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x15cb0
jmp 0xc3ed
leaq -0x88(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x3390
jmp 0xc402
leaq -0x208(%rbp), %rdi
callq 0x3598
leaq -0x228(%rbp), %rdi
callq 0x3598
jmp 0xc45c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0xc44e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x3598
leaq -0x228(%rbp), %rdi
callq 0x3598
jmp 0xc46d
leaq -0x1e0(%rbp), %rdi
callq 0x3598
jmp 0xc682
leaq -0x1e0(%rbp), %rdi
callq 0x3598
jmp 0xc6fb
leaq -0x178(%rbp), %rdi
callq 0x162b0
cmpl $0x17, (%rax)
jne 0xc61c
leaq -0x178(%rbp), %rdi
xorl %esi, %esi
callq 0x162d0
movq %rax, -0x230(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x238(%rbp)
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x240(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x16240
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x321(%rbp)
jne 0xc4ea
jmp 0xc502
leaq -0x238(%rbp), %rdi
callq 0x162b0
cmpl $0x7b, (%rax)
sete %al
movb %al, -0x321(%rbp)
movb -0x321(%rbp), %al
testb $0x1, %al
jne 0xc511
jmp 0xc605
leaq -0x238(%rbp), %rdi
xorl %esi, %esi
callq 0x162d0
movq %rax, -0x248(%rbp)
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x250(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x16240
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x322(%rbp)
jne 0xc55a
jmp 0xc572
leaq -0x238(%rbp), %rdi
callq 0x162b0
cmpl $0x7c, (%rax)
sete %al
movb %al, -0x322(%rbp)
movb -0x322(%rbp), %al
testb $0x1, %al
jne 0xc581
jmp 0xc603
movq -0x238(%rbp), %rax
movq %rax, -0x178(%rbp)
testb $0x1, -0x49(%rbp)
je 0xc5e9
leaq 0x18e34(%rip), %rsi     # 0x253d0
leaq -0x88(%rbp), %rdi
callq 0x3280
jmp 0xc5aa
movq -0x48(%rbp), %rdi
callq 0x16280
movq %rax, -0x258(%rbp)
movq -0x48(%rbp), %r8
movq -0x258(%rbp), %rdx
movzbl -0x49(%rbp), %r9d
andl $0x1, %r9d
leaq -0x88(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x68(%rbp), %rcx
callq 0xc730
jmp 0xc5e7
jmp 0xc5fe
leaq -0x178(%rbp), %rdi
xorl %esi, %esi
callq 0x162d0
movq %rax, -0x260(%rbp)
jmp 0xbf8a
jmp 0xc605
leaq 0x18dc4(%rip), %rsi     # 0x253d0
leaq -0x88(%rbp), %rdi
callq 0x3280
jmp 0xc61a
jmp 0xc680
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x330(%rbp)
leaq 0x18d98(%rip), %rsi     # 0x253d2
callq 0x3530
jmp 0xc641
movq -0x330(%rbp), %rdi
movq 0x26989(%rip), %rsi     # 0x32fd8
movq 0x2696a(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0xc727
movq -0x330(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
callq 0x31f0
jmp 0xc6fb
jmp 0xc682
jmp 0xc684
jmp 0xbf8a
movq -0x10(%rbp), %rax
movq %rax, -0x338(%rbp)
leaq -0x88(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0x3240
movq -0x340(%rbp), %rdi
movq %rax, -0x268(%rbp)
callq 0x3160
movq -0x338(%rbp), %rdi
movq %rax, -0x270(%rbp)
movl -0x24(%rbp), %ecx
movq -0x30(%rbp), %r8
movq -0x268(%rbp), %rsi
movq -0x270(%rbp), %rdx
callq 0xcc80
jmp 0xc6e4
leaq -0x88(%rbp), %rdi
callq 0x3598
leaq -0x68(%rbp), %rdi
callq 0x16350
jmp 0xc712
leaq -0x88(%rbp), %rdi
callq 0x3598
leaq -0x68(%rbp), %rdi
callq 0x16350
jmp 0xc71b
addq $0x340, %rsp            # imm = 0x340
popq %rbp
retq
movq -0xa0(%rbp), %rdi
callq 0x34e0
nopw (%rax,%rax)