// File: cjxgm[P]libgpp/src/libgpp.cpp
// Function: (anonymous namespace)::Preprocessor::parse_possible_user()
int parse_possible_user() {
            int idstart, idend, sh_end, lg_end, macend;
            int argc, id, i, l;
            char *argv[max_arg_count];
            int argb[max_arg_count], arge[max_arg_count];
            Input_Context *T;

            idstart = 1;
            id = 0;
            if (!splice_possible_user(&idstart, &idend, &sh_end, &lg_end, argb, arge,
                    &argc, 1, &id, FLAG_USER))
                return -1;
            if ((sh_end >= 0) && (C->namedargs != nullptr )) {
                i = find_named_arg(C->buf + idstart, idend - idstart);
                if (i >= 0) {
                    if (i < C->argc)
                        sendout(C->argv[i], strlen(C->argv[i]), 0);
                    shift_in(sh_end);
                    return 0;
                }
            }

            if (id < 0)
                return -1;
            if (lg_end >= 0)
                macend = lg_end;
            else {
                macend = sh_end;
                argc = 0;
            }

            if (macros[id].nnamedargs == -2) { // defined(...) macro for arithmetic
                char *s, *t;
                if (argc != 1)
                    return -1;
                s = remove_comments(argb[0], arge[0], FLAG_USER);
                t = s + strlen(s) - 1;
                if (*s != 0)
                    while ((t != s) && is_white(*t))
                        *(t--) = 0;
                t = s;
                while (is_white(*t))
                    t++;
                if (find_ident(t, strlen(t)) >= 0)
                    outchar('1');
                else
                    outchar('0');
                free(s);
                shift_in(macend);
                return 0;
            }
            if (!macros[id].macrotext[0]) { // the empty macro
                shift_in(macend);
                return 0;
            }

            for (i = 0; i < argc; i++)
                argv[i] = process_text(C->buf + argb[i], arge[i] - argb[i], FLAG_USER);
            // process macro text
            T = C;
            C = XX malloc(sizeof *C);
            C->out = T->out;
            C->read_stdin = 0;
            C->argc = argc;
            C->argv = argv;
            C->lineno = T->lineno;
            C->may_have_args = 1;
            if ((macros[id].nnamedargs == -1) && (lg_end >= 0)
                    && (macros[id].define_specs->user.macro_end[0] == 0)) {
                // build an aliased macro call
                l = strlen(macros[id].macrotext) + 2
                        + strlen(macros[id].define_specs->user.macro_arg_start)
                        + strlen(macros[id].define_specs->user.macro_arg_end)
                        + (argc - 1) * strlen(macros[id].define_specs->user.macro_arg_sep);
                for (i = 0; i < argc; i++)
                    l += strlen(argv[i]);
                C->buf = C->malloced_buf = XX malloc(l);
                l = strlen(macros[id].macrotext) + 1;
                C->buf[0] = '\n';
                strcpy(C->buf + 1, macros[id].macrotext);
                while ((l > 1) && is_white(C->buf[l - 1]))
                    l--;
                strcpy(C->buf + l, macros[id].define_specs->user.macro_arg_start);
                for (i = 0; i < argc; i++) {
                    if (i > 0)
                        strcat(C->buf, macros[id].define_specs->user.macro_arg_sep);
                    strcat(C->buf, argv[i]);
                }
                strcat(C->buf, macros[id].define_specs->user.macro_arg_end);
                C->may_have_args = 0;
            } else {
                C->buf = C->malloced_buf = XX malloc(strlen(macros[id].macrotext) + 2);
                C->buf[0] = '\n';
                strcpy(C->buf + 1, macros[id].macrotext);
            }
            C->len = strlen(C->buf);
            C->bufsize = C->len + 1;
            C->eof = 0;
            C->namedargs = macros[id].argnames;
            C->in_comment = macros[id].defined_in_comment;
            C->ambience = FLAG_META;
            push_specs(macros[id].define_specs);
            process_context();
            pop_specs();
            free(C);
            C = T;

            for (i = 0; i < argc; i++)
                free(argv[i]);
            shift_in(macend);
            return 0;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x740, %rsp            # imm = 0x740
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x6d0(%rbp)
movl $0x1, -0x14(%rbp)
movl $0x0, -0x2c(%rbp)
leaq -0x4f0(%rbp), %r9
leaq -0x680(%rbp), %r11
leaq -0x14(%rbp), %rsi
leaq -0x18(%rbp), %rdx
leaq -0x1c(%rbp), %rcx
leaq -0x20(%rbp), %r8
leaq -0x28(%rbp), %r10
leaq -0x2c(%rbp), %rax
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movl $0x1, 0x10(%rsp)
movq %rax, 0x18(%rsp)
movl $0x1, 0x20(%rsp)
callq 0x8f00
cmpl $0x0, %eax
jne 0x5f52
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x6802
cmpl $0x0, -0x1c(%rbp)
jl 0x6015
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
cmpq $0x0, 0x30(%rax)
je 0x6015
movq -0x6d0(%rbp), %rdi
movq 0x20(%rdi), %rax
movq (%rax), %rsi
movslq -0x14(%rbp), %rax
addq %rax, %rsi
movl -0x18(%rbp), %edx
subl -0x14(%rbp), %edx
callq 0xa930
movl %eax, -0x30(%rbp)
cmpl $0x0, -0x30(%rbp)
jl 0x6013
movq -0x6d0(%rbp), %rcx
movl -0x30(%rbp), %eax
movq 0x20(%rcx), %rcx
cmpl 0x20(%rcx), %eax
jge 0x5ff8
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq 0x28(%rcx), %rcx
movslq -0x30(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq %rcx, -0x6d8(%rbp)
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movslq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2070
movq -0x6d0(%rbp), %rdi
movq -0x6d8(%rbp), %rsi
movl %eax, %edx
xorl %ecx, %ecx
callq 0x4020
movq -0x6d0(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x43c0
movl $0x0, -0x4(%rbp)
jmp 0x6802
jmp 0x6015
cmpl $0x0, -0x2c(%rbp)
jge 0x6027
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x6802
cmpl $0x0, -0x20(%rbp)
jl 0x6035
movl -0x20(%rbp), %eax
movl %eax, -0x24(%rbp)
jmp 0x6042
movl -0x1c(%rbp), %eax
movl %eax, -0x24(%rbp)
movl $0x0, -0x28(%rbp)
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
cmpl $-0x2, 0x1c(%rax)
jne 0x61eb
cmpl $0x1, -0x28(%rbp)
je 0x6074
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x6802
movq -0x6d0(%rbp), %rdi
movl -0x4f0(%rbp), %esi
movl -0x680(%rbp), %edx
movl $0x1, %ecx
callq 0x7b70
movq %rax, -0x690(%rbp)
movq -0x690(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movq -0x690(%rbp), %rdi
callq 0x2070
movq %rax, %rcx
movq -0x6e0(%rbp), %rax
addq %rcx, %rax
addq $-0x1, %rax
movq %rax, -0x698(%rbp)
movq -0x690(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x6136
jmp 0x60db
movq -0x698(%rbp), %rcx
xorl %eax, %eax
cmpq -0x690(%rbp), %rcx
movb %al, -0x6e1(%rbp)
je 0x610e
movq -0x698(%rbp), %rax
movsbl (%rax), %edi
callq 0x9370
cmpl $0x0, %eax
setne %al
movb %al, -0x6e1(%rbp)
movb -0x6e1(%rbp), %al
testb $0x1, %al
jne 0x611a
jmp 0x6134
movq -0x698(%rbp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, -0x698(%rbp)
movb $0x0, (%rax)
jmp 0x60db
jmp 0x6136
movq -0x690(%rbp), %rax
movq %rax, -0x698(%rbp)
movq -0x698(%rbp), %rax
movsbl (%rax), %edi
callq 0x9370
cmpl $0x0, %eax
je 0x616c
movq -0x698(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x698(%rbp)
jmp 0x6144
movq -0x698(%rbp), %rax
movq %rax, -0x6f0(%rbp)
movq -0x698(%rbp), %rdi
callq 0x2070
movq -0x6d0(%rbp), %rdi
movq -0x6f0(%rbp), %rsi
movl %eax, %edx
callq 0x77e0
cmpl $0x0, %eax
jl 0x61b3
movq -0x6d0(%rbp), %rdi
movl $0x31, %esi
callq 0x6f00
jmp 0x61c4
movq -0x6d0(%rbp), %rdi
movl $0x30, %esi
callq 0x6f00
movq -0x690(%rbp), %rdi
callq 0x2170
movq -0x6d0(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x43c0
movl $0x0, -0x4(%rbp)
jmp 0x6802
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
cmpb $0x0, (%rax)
jne 0x6225
movq -0x6d0(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x43c0
movl $0x0, -0x4(%rbp)
jmp 0x6802
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x628b
movq -0x6d0(%rbp), %rdi
movq 0x20(%rdi), %rax
movq (%rax), %rsi
movslq -0x30(%rbp), %rax
movslq -0x4f0(%rbp,%rax,4), %rax
addq %rax, %rsi
movslq -0x30(%rbp), %rax
movl -0x680(%rbp,%rax,4), %edx
movslq -0x30(%rbp), %rax
subl -0x4f0(%rbp,%rax,4), %edx
movl $0x1, %ecx
callq 0x40f0
movq %rax, %rcx
movslq -0x30(%rbp), %rax
movq %rcx, -0x360(%rbp,%rax,8)
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x622c
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x688(%rbp)
movl $0x50, %edi
callq 0x21a0
movq %rax, %rsi
leaq -0x6a1(%rbp), %rdi
callq 0x3060
movq %rax, -0x6a0(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x3560
movq %rax, %rcx
movq -0x6d0(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x688(%rbp), %rcx
movq 0x38(%rcx), %rdx
movq 0x20(%rax), %rcx
movq %rdx, 0x38(%rcx)
movq 0x20(%rax), %rcx
movl $0x0, 0x1c(%rcx)
movl -0x28(%rbp), %edx
movq 0x20(%rax), %rcx
movl %edx, 0x20(%rcx)
leaq -0x360(%rbp), %rdx
movq 0x20(%rax), %rcx
movq %rdx, 0x28(%rcx)
movq -0x688(%rbp), %rcx
movl 0x18(%rcx), %edx
movq 0x20(%rax), %rcx
movl %edx, 0x18(%rcx)
movq 0x20(%rax), %rcx
movl $0x1, 0x4c(%rcx)
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
cmpl $-0x1, 0x1c(%rax)
jne 0x665e
cmpl $0x0, -0x20(%rbp)
jl 0x665e
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x665e
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rdi
callq 0x2070
movq %rax, %rcx
movq -0x6d0(%rbp), %rax
addq $0x2, %rcx
movq %rcx, -0x710(%rbp)
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0x2070
movq -0x710(%rbp), %rcx
movq %rax, %rdx
movq -0x6d0(%rbp), %rax
addq %rdx, %rcx
movq %rcx, -0x708(%rbp)
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rdi
callq 0x2070
movq -0x708(%rbp), %rcx
movq %rax, %rdx
movq -0x6d0(%rbp), %rax
addq %rdx, %rcx
movq %rcx, -0x6f8(%rbp)
movl -0x28(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq %rcx, -0x700(%rbp)
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rdi
callq 0x2070
movq -0x700(%rbp), %rcx
movq %rax, %rdx
movq -0x6f8(%rbp), %rax
imulq %rdx, %rcx
addq %rcx, %rax
movl %eax, -0x34(%rbp)
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x6498
movslq -0x30(%rbp), %rax
movq -0x360(%rbp,%rax,8), %rdi
callq 0x2070
movq %rax, %rcx
movslq -0x34(%rbp), %rax
addq %rcx, %rax
movl %eax, -0x34(%rbp)
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x6467
movslq -0x34(%rbp), %rdi
callq 0x21a0
movq %rax, %rsi
leaq -0x6b1(%rbp), %rdi
callq 0x3060
movq %rax, -0x6b0(%rbp)
leaq -0x6b0(%rbp), %rdi
callq 0x3730
movq %rax, %rdx
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq %rdx, 0x8(%rcx)
movq 0x20(%rax), %rcx
movq %rdx, (%rcx)
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rdi
callq 0x2070
movq %rax, %rcx
movq -0x6d0(%rbp), %rax
addq $0x1, %rcx
movl %ecx, -0x34(%rbp)
movq 0x20(%rax), %rcx
movq (%rcx), %rcx
movb $0xa, (%rcx)
movq 0x20(%rax), %rcx
movq (%rcx), %rdi
addq $0x1, %rdi
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rsi
callq 0x2130
xorl %eax, %eax
cmpl $0x1, -0x34(%rbp)
movb %al, -0x711(%rbp)
jle 0x656c
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsbl (%rax,%rcx), %edi
callq 0x9370
cmpl $0x0, %eax
setne %al
movb %al, -0x711(%rbp)
movb -0x711(%rbp), %al
testb $0x1, %al
jne 0x6578
jmp 0x6583
movl -0x34(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x6532
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq (%rcx), %rdi
movslq -0x34(%rbp), %rcx
addq %rcx, %rdi
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rsi
callq 0x2130
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x661d
cmpl $0x0, -0x30(%rbp)
jle 0x65f3
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq (%rcx), %rdi
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x18(%rax), %rsi
callq 0x22a0
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rdi
movslq -0x30(%rbp), %rax
movq -0x360(%rbp,%rax,8), %rsi
callq 0x22a0
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x65bb
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq (%rcx), %rdi
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rsi
callq 0x22a0
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
movl $0x0, 0x4c(%rax)
jmp 0x66f1
movq -0x6d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rdi
callq 0x2070
movq %rax, %rdi
addq $0x2, %rdi
callq 0x21a0
movq %rax, %rsi
leaq -0x6c1(%rbp), %rdi
callq 0x3060
movq %rax, -0x6c0(%rbp)
leaq -0x6c0(%rbp), %rdi
callq 0x3730
movq %rax, %rdx
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rcx
movq %rdx, 0x8(%rcx)
movq 0x20(%rax), %rcx
movq %rdx, (%rcx)
movq 0x20(%rax), %rcx
movq (%rcx), %rcx
movb $0xa, (%rcx)
movq 0x20(%rax), %rcx
movq (%rcx), %rdi
addq $0x1, %rdi
movq 0x8(%rax), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rsi
callq 0x2130
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rdi
callq 0x2070
movq -0x6d0(%rbp), %rdi
movl %eax, %ecx
movq 0x20(%rdi), %rax
movl %ecx, 0x10(%rax)
movq 0x20(%rdi), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movq 0x20(%rdi), %rax
movl %ecx, 0x14(%rax)
movq 0x20(%rdi), %rax
movl $0x0, 0x40(%rax)
movq 0x8(%rdi), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rcx
movq 0x20(%rdi), %rax
movq %rcx, 0x30(%rax)
movq 0x8(%rdi), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x28(%rax), %ecx
movq 0x20(%rdi), %rax
movl %ecx, 0x44(%rax)
movq 0x20(%rdi), %rax
movl $0x0, 0x48(%rax)
movq 0x8(%rdi), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rsi
callq 0x70b0
movq -0x6d0(%rbp), %rdi
callq 0x3770
movq -0x6d0(%rbp), %rdi
callq 0x8d20
movq -0x6d0(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x2170
movq -0x6d0(%rbp), %rax
movq -0x688(%rbp), %rcx
movq %rcx, 0x20(%rax)
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x67ec
movslq -0x30(%rbp), %rax
movq -0x360(%rbp,%rax,8), %rdi
callq 0x2170
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x67c8
movq -0x6d0(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x43c0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x740, %rsp            # imm = 0x740
popq %rbp
retq
nop