// File: /workspace/github_c_makefile_star2_O1/jaroslov[P]docoptc/./docopt.h
// Function: docopt
docopt_t docopt(const char* doc, int argc, char** argv, unsigned int flags, unsigned int version)
{
    struct docopt_parse_state   dS  = { 0 };
    struct docopt_entries*      dE  = 0;
    uint32_t VERSION                = DOCOPT_VERSION;
    if (((version & 0x00FF0000) != (VERSION & 0x00FF0000)) || (version < VERSION))
    {
        dS.entries->error           = DOCOPT_BAD_VERSION;
        goto docoptFail;
    }
    if (docopt_parse_state_init(&dS, doc, argc, argv, flags)) goto docoptFail;
    if (dS.entries->error) goto docoptFail;
    fprintf(dS.log, "%s", "Getting Usage Section.\n");
    if (docopt_get_section(&dS, &dS.re_usage_section_start, &dS.re_usage_section_stop, dS.entries->docstr.fst, &dS.usage_section, 0, 0)) goto docoptFail;
    if (dS.entries->error) goto docoptFail;
    fprintf(dS.log, "%s", "Getting Usage PNAME... ");
    if (regexec(&dS.re_pname, dS.usage_section.fst, DOCOPT_NUM_PMATCHES, &dS.docopt_pmatches[0], 0)) return 0;
    if (dS.entries->error) goto docoptFail;
    fprintf(dS.log, "" PRdocS "\n", DOCOPT_PR(&dS.pname));
    dS.pname.fst    = dS.docopt_pmatches[2].rm_so + dS.usage_section.fst;
    dS.pname.lst    = dS.docopt_pmatches[2].rm_eo + dS.usage_section.fst;
    fprintf(dS.log, "%s", "Getting Parse Options.\n");
    if (docopt_parse_options(&dS)) goto docoptFail;
    if (dS.entries->error) goto docoptFail;
    fprintf(dS.log, "%s", "Getting Parse Usage.\n");
    if (docopt_parse_usage(&dS)) goto docoptFail;
    if (dS.entries->error) goto docoptFail;
    fprintf(dS.log, "Getting Parse Args (%d).\n", argc);
    if (argc && docopt_parse_args(&dS))
    {
        goto docoptFail;
    }
    dE      = dS.entries;

    fprintf(dS.log, "%s", "Success!\n");

docoptFail:
    for (int i = 0; i < argc; ++i)
        if (!strncmp(argv[i], "--help", 6) || !strncmp(argv[i], "-h", 2))
        {
            docopt_print_help(&dS, 1);
            return dE;
        }
    if (!dE) docopt_print_help(&dS, 0);
    docopt_parse_state_free(&dS);
    return dE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x618, %rsp            # imm = 0x618
movl %r8d, %r13d
movl %ecx, %r15d
movq %rdx, -0x38(%rbp)
movl %esi, %r14d
movq %rdi, %r12
leaq -0x638(%rbp), %rdi
movl $0x600, %edx            # imm = 0x600
xorl %esi, %esi
callq 0x70a0
testl $0xff0000, %r13d        # imm = 0xFF0000
sete %al
cmpl $0x100, %r13d           # imm = 0x100
setae %cl
testb %al, %cl
jne 0x73b6
movq -0x630(%rbp), %rax
movl $0x7, (%rax)
jmp 0x7641
movq 0x29c1b(%rip), %rax     # 0x30fd8
movq (%rax), %rax
movq %rax, -0x638(%rbp)
movabsq $0x200000000, %rax      # imm = 0x200000000
movq %rax, -0x4b8(%rbp)
movl $0x40, %edi
movl $0x1, %esi
callq 0x70d0
movq %rax, -0x630(%rbp)
testq %rax, %rax
je 0x7641
movq %rax, %r13
movl %r14d, -0x4cc(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x4c0(%rbp)
movl $0x0, -0x4d0(%rbp)
movq %r12, 0x8(%r13)
movq %r12, %rdi
callq 0x7070
addq %r12, %rax
movq %rax, 0x10(%r13)
movl %r15d, 0x18(%r13)
movabsq $0x100000002, %rax      # imm = 0x100000002
movq %rax, 0x1c(%r13)
movl $0x38, %edi
movl $0x2, %esi
callq 0x70d0
movq %rax, 0x28(%r13)
testq %rax, %rax
je 0x7641
movq $0x1, -0x620(%rbp)
movl $0x8, %edi
movl $0x1, %esi
callq 0x70d0
movq %rax, -0x618(%rbp)
testq %rax, %rax
je 0x7641
leaq -0x478(%rbp), %rdi
leaq 0x4a90(%rip), %rsi      # 0xbf1f
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x438(%rbp), %rdi
leaq 0x4a8f(%rip), %rsi      # 0xbf3e
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x3f8(%rbp), %rdi
leaq 0x4a79(%rip), %rsi      # 0xbf48
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x3b8(%rbp), %rdi
leaq 0x4a72(%rip), %rsi      # 0xbf61
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x378(%rbp), %rdi
leaq 0x4a74(%rip), %rsi      # 0xbf83
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x338(%rbp), %rdi
leaq 0x4aa9(%rip), %rsi      # 0xbfd8
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x2f8(%rbp), %rdi
leaq 0x4aca(%rip), %rsi      # 0xc019
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x2b8(%rbp), %rdi
leaq 0x4ab4(%rip), %rsi      # 0xc023
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x278(%rbp), %rdi
leaq 0x4aa4(%rip), %rsi      # 0xc033
movl $0x3, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x238(%rbp), %rdi
leaq 0x4a8e(%rip), %rsi      # 0xc03d
movl $0x3, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x1b8(%rbp), %rdi
leaq 0x4a8b(%rip), %rsi      # 0xc05a
movl $0x3, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x178(%rbp), %rdi
leaq 0x4a94(%rip), %rsi      # 0xc07f
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0x138(%rbp), %rdi
leaq 0x4a8a(%rip), %rsi      # 0xc091
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
leaq -0xb8(%rbp), %rdi
leaq 0x4ac3(%rip), %rsi      # 0xc0e6
movl $0x1, %edx
callq 0x70b0
testl %eax, %eax
jne 0x7641
movq -0x630(%rbp), %rax
cmpl $0x0, (%rax)
je 0x77bf
movq $0x0, -0x30(%rbp)
testl %r14d, %r14d
jle 0x76a1
movl %r14d, %r15d
xorl %ebx, %ebx
leaq 0x2aa2(%rip), %r14      # 0xa0fc
leaq 0x2aa2(%rip), %r12      # 0xa103
movq -0x38(%rbp), %rax
movq (%rax,%rbx,8), %r13
movl $0x6, %edx
movq %r13, %rdi
movq %r14, %rsi
callq 0x7040
testl %eax, %eax
je 0x7795
movl $0x2, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0x7040
testl %eax, %eax
je 0x7795
incq %rbx
cmpq %rbx, %r15
jne 0x7661
movq -0x30(%rbp), %r14
testq %r14, %r14
jne 0x76b8
leaq -0x638(%rbp), %rdi
xorl %esi, %esi
callq 0x72dc
movq -0x618(%rbp), %rdi
testq %rdi, %rdi
je 0x76c9
callq 0x7030
leaq -0x478(%rbp), %rdi
movq $0x0, -0x1b8(%rdi)
callq 0x7060
leaq -0x438(%rbp), %rdi
callq 0x7060
leaq -0x3f8(%rbp), %rdi
callq 0x7060
leaq -0x3b8(%rbp), %rdi
callq 0x7060
leaq -0x378(%rbp), %rdi
callq 0x7060
leaq -0x338(%rbp), %rdi
callq 0x7060
leaq -0x2f8(%rbp), %rdi
callq 0x7060
leaq -0x2b8(%rbp), %rdi
callq 0x7060
leaq -0x278(%rbp), %rbx
movq %rbx, %rdi
callq 0x7060
leaq -0x1b8(%rbp), %rdi
callq 0x7060
leaq -0x178(%rbp), %rdi
callq 0x7060
leaq -0x138(%rbp), %rdi
callq 0x7060
leaq -0xf8(%rbp), %rdi
callq 0x7060
leaq -0x1f8(%rbp), %rdi
callq 0x7060
leaq -0xb8(%rbp), %rdi
callq 0x7060
movq %rbx, %rdi
callq 0x7060
jmp 0x77aa
leaq -0x638(%rbp), %rdi
movl $0x1, %esi
callq 0x72dc
movq -0x30(%rbp), %r14
movq %r14, %rax
addq $0x618, %rsp            # imm = 0x618
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x278(%rbp), %r12
movq -0x3c0(%r12), %rsi
leaq 0x28a5(%rip), %rdi      # 0xa07a
callq 0x7090
leaq -0x238(%rbp), %rdx
movq -0x3f8(%rdx), %rax
movq 0x8(%rax), %rcx
leaq -0x610(%rbp), %r8
leaq -0x638(%rbp), %rdi
movq $0x0, -0x30(%rbp)
movq %r12, %rsi
xorl %r9d, %r9d
callq 0x7987
testl %eax, %eax
jne 0x7649
movq -0x630(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x7641
leaq -0x478(%rbp), %r12
movq -0x1c0(%r12), %rsi
leaq 0x2857(%rip), %rdi      # 0xa092
callq 0x7090
movq -0x198(%r12), %rsi
leaq -0x4b0(%rbp), %rcx
movl $0x7, %edx
movq %r12, %rdi
xorl %r8d, %r8d
callq 0x7100
testl %eax, %eax
je 0x786b
xorl %r14d, %r14d
jmp 0x77aa
movq -0x630(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x7641
leaq -0x638(%rbp), %r12
movl 0x50(%r12), %edx
movq (%r12), %rdi
movq 0x48(%r12), %rcx
subl %ecx, %edx
leaq 0x27d3(%rip), %rsi      # 0xa06c
movq $0x0, -0x30(%rbp)
xorl %eax, %eax
callq 0x70f0
movslq 0x198(%r12), %rax
movq (%r12), %rsi
movq 0x28(%r12), %rcx
addq %rcx, %rax
movq %rax, 0x48(%r12)
movslq 0x19c(%r12), %rax
addq %rcx, %rax
movq %rax, 0x50(%r12)
leaq 0x27d2(%rip), %rdi      # 0xa0aa
callq 0x7090
movq %r12, %rdi
callq 0x7a2f
testl %eax, %eax
jne 0x7649
movq -0x630(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x7641
leaq -0x638(%rbp), %r15
movq (%r15), %rsi
leaq 0x27b4(%rip), %rdi      # 0xa0c2
callq 0x7090
movq %r15, %rdi
callq 0x8014
testl %eax, %eax
jne 0x7641
movq -0x630(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x7641
movq -0x638(%rbp), %rdi
leaq 0x2797(%rip), %rsi      # 0xa0d8
movl %r14d, %edx
xorl %eax, %eax
callq 0x70f0
testl %r14d, %r14d
je 0x7964
leaq -0x638(%rbp), %rdi
callq 0x822b
testl %eax, %eax
jne 0x7641
movq -0x638(%rbp), %rsi
movq -0x630(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x2775(%rip), %rdi      # 0xa0f2
callq 0x7090
jmp 0x7649