// File: /workspace/github_cpp_makefile_star2_O2/demon386[P]git-store/./libs/program_options/src/options_description.cpp
// Function: boost::program_options::option_description::match(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool, bool, bool) const
option_description::match_result
    option_description::match(const std::string& option, 
                              bool approx, 
                              bool long_ignore_case,
                              bool short_ignore_case) const
    {
        match_result result = no_match;        
        
        std::string local_long_name((long_ignore_case ? tolower_(m_long_name) : m_long_name));
        
        if (!local_long_name.empty()) {
        
            std::string local_option = (long_ignore_case ? tolower_(option) : option);

            if (*local_long_name.rbegin() == '*')
            {
                // The name ends with '*'. Any specified name with the given
                // prefix is OK.
                if (local_option.find(local_long_name.substr(0, local_long_name.length()-1))
                    == 0)
                    result = approximate_match;
            }

            if (local_long_name == local_option)
            {
                result = full_match;
            }
            else if (approx)
            {
                if (local_long_name.find(local_option) == 0)
                {
                    result = approximate_match;
                }
            }
        }
         
        if (result != full_match)
        {
            std::string local_option(short_ignore_case ? tolower_(option) : option);
            std::string local_short_name(short_ignore_case ? tolower_(m_short_name) : m_short_name);

            if (local_short_name == local_option)
            {
                result = full_match;
            }
        }

        return result;        
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movl %r8d, -0x2c(%rbp)
movl %edx, %r12d
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x28(%rdi), %rsi
testl %ecx, %ecx
movq %r15, -0x38(%rbp)
leaq -0x78(%rbp), %r13
movq %r13, %rdi
je 0x14965
callq 0x14ae3
cmpq $0x0, 0x8(%r13)
je 0x14a25
leaq -0x58(%rbp), %rdi
movq %r15, %rsi
callq 0x14ae3
jmp 0x14981
callq 0xc660
cmpq $0x0, 0x8(%r13)
je 0x14a25
leaq -0x58(%rbp), %rdi
movq %r15, %rsi
callq 0xc660
movq -0x78(%rbp), %rax
movq -0x70(%rbp), %rcx
xorl %r13d, %r13d
cmpb $0x2a, -0x1(%rax,%rcx)
jne 0x149d2
decq %rcx
leaq -0x98(%rbp), %rdi
leaq -0x78(%rbp), %rsi
xorl %edx, %edx
callq 0xc4f0
leaq -0x58(%rbp), %rdi
leaq -0x98(%rbp), %r14
movq %r14, %rsi
xorl %edx, %edx
callq 0xc960
xorl %r13d, %r13d
testq %rax, %rax
sete %r13b
movq %r14, %rdi
callq 0xc9a0
addl %r13d, %r13d
pushq $0x1
popq %r14
leaq -0x78(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x15d61
xorb $0x1, %r12b
orb %al, %r12b
testb %al, %al
movl %r13d, %r15d
cmovnel %r14d, %r15d
testb %r12b, %r12b
jne 0x14a14
leaq -0x78(%rbp), %rdi
leaq -0x58(%rbp), %rsi
xorl %edx, %edx
callq 0xc960
testq %rax, %rax
pushq $0x2
popq %rax
cmovel %eax, %r13d
movl %r13d, %r15d
leaq -0x58(%rbp), %rdi
callq 0xc9a0
cmpl $0x1, %r15d
jne 0x14a28
jmp 0x14aa2
xorl %r15d, %r15d
cmpb $0x0, -0x2c(%rbp)
je 0x14a50
leaq -0x58(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x14ae3
addq $0x8, %rbx
leaq -0x98(%rbp), %rdi
movq %rbx, %rsi
callq 0x14ae3
jmp 0x14a70
leaq -0x58(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xc660
addq $0x8, %rbx
leaq -0x98(%rbp), %rdi
movq %rbx, %rsi
callq 0xc660
leaq -0x98(%rbp), %rbx
leaq -0x58(%rbp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x15d61
testb %al, %al
pushq $0x1
popq %rax
cmovnel %eax, %r15d
movq %rbx, %rdi
callq 0xc9a0
movq %r14, %rdi
callq 0xc9a0
movl %r15d, %r14d
leaq -0x78(%rbp), %rdi
callq 0xc9a0
movl %r14d, %eax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x14ac1
jmp 0x14acf
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0xc9a0
jmp 0x14ad2
movq %rax, %rbx
leaq -0x78(%rbp), %rdi
callq 0xc9a0
movq %rbx, %rdi
callq 0xc850