// File: /workspace/github_cpp_makefile_star2_O3/demon386[P]git-store/main.cpp
// Function: main
int main(int argc, char *argv[])
{
    check_git_cmd_available();
    command::add_subcommand("init", "Initialize git repo.");
    command::add_subcommand("write", "Write content into git repo.",
            [](po::options_description& subopts) {
            subopts.add_options()
            ("tree,t", "give tree's hash even given just one file")
            ("delete,d", "delete added files");
            });
    command::add_subcommand("read", "read content into current dir.");

    const po::variables_map options = command::parse_args(argc, argv);

    std::map<std::string, ProcessFuncT> process_func_map = {
        {"init", process_init_cmd},
        {"write", process_write_cmd},
        {"read", process_read_cmd}
    };

    const auto& cmd = options["command"].as<std::string>();
    auto func = process_func_map.at(cmd);
    func(options);
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
movq %rsi, %rbx
movl %edi, %r14d
callq 0x2d291
leaq -0x100(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x951d(%rip), %rsi      # 0x37066
leaq 0x951a(%rip), %rdx      # 0x3706a
leaq -0x110(%rbp), %rdi
callq 0xf8ee
leaq -0xe0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x94fc(%rip), %rsi      # 0x3706b
leaq 0x9509(%rip), %rdx      # 0x3707f
leaq -0xf0(%rbp), %rdi
callq 0xf8ee
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2c7c9
movq -0xf0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2dba6
callq 0xb430
movq -0x110(%rbp), %rdi
cmpq %r15, %rdi
je 0x2dbb7
callq 0xb430
leaq -0xc0(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x929e(%rip), %rsi      # 0x36e67
leaq 0x929c(%rip), %rdx      # 0x36e6c
leaq -0xd0(%rbp), %rdi
callq 0xf8ee
leaq -0xa0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x9491(%rip), %rsi      # 0x37080
leaq 0x94a6(%rip), %rdx      # 0x3709c
leaq -0xb0(%rbp), %rdi
callq 0xf8ee
xorps %xmm0, %xmm0
leaq -0x50(%rbp), %rdx
movaps %xmm0, (%rdx)
leaq 0x39d(%rip), %rax       # 0x2dfb0
movq %rax, 0x18(%rdx)
leaq 0x3d8(%rip), %rax       # 0x2dff6
movq %rax, 0x10(%rdx)
leaq -0xd0(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x2c6aa
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x2dc4c
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq -0xb0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2dc5d
callq 0xb430
movq -0xd0(%rbp), %rdi
cmpq %r15, %rdi
je 0x2dc6e
callq 0xb430
leaq -0x80(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x9420(%rip), %rsi      # 0x3709d
leaq 0x941d(%rip), %rdx      # 0x370a1
leaq -0x90(%rbp), %rdi
callq 0xf8ee
leaq -0x60(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x9402(%rip), %rsi      # 0x370a2
leaq 0x9419(%rip), %rdx      # 0x370c0
leaq -0x70(%rbp), %rdi
callq 0xf8ee
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x2c7c9
movq -0x70(%rbp), %rdi
cmpq %r12, %rdi
je 0x2dcce
callq 0xb430
movq -0x90(%rbp), %rdi
cmpq %r15, %rdi
je 0x2dcdf
callq 0xb430
leaq -0x258(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x2c910
leaq -0x178(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x9362(%rip), %rsi      # 0x37066
leaq 0x935f(%rip), %rdx      # 0x3706a
leaq -0x188(%rbp), %r14
movq %r14, %rdi
callq 0xf8ee
leaq -0xa14(%rip), %rax      # 0x2d30d
leaq -0x160(%rbp), %r15
movq %rax, -0x8(%r15)
leaq -0x150(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x9129(%rip), %rsi      # 0x36e67
leaq 0x9127(%rip), %rdx      # 0x36e6c
movq %r15, %rdi
callq 0xf8ee
leaq -0x9b5(%rip), %rax      # 0x2d39f
leaq -0x138(%rbp), %r15
movq %rax, -0x8(%r15)
leaq -0x128(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x932c(%rip), %rsi      # 0x3709d
leaq 0x9329(%rip), %rdx      # 0x370a1
movq %r15, %rdi
callq 0xf8ee
leaq -0x52d(%rip), %rax      # 0x2d85a
leaq -0x188(%rbp), %rsi
movq %rax, 0x70(%rsi)
leaq -0x1b8(%rbp), %rdi
leaq -0x2a(%rbp), %rcx
leaq -0x29(%rbp), %r8
movl $0x3, %edx
callq 0x2e44e
leaq -0x128(%rbp), %rbx
xorl %r14d, %r14d
movq -0x138(%rbp,%r14), %rdi
leaq (%rbx,%r14), %rax
cmpq %rdi, %rax
je 0x2ddcb
callq 0xb430
addq $-0x28, %r14
cmpq $-0x78, %r14
jne 0x2ddb5
leaq -0x188(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x909d(%rip), %rsi      # 0x36e83
leaq 0x909d(%rip), %rdx      # 0x36e8a
callq 0xf8ee
leaq -0x258(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x24d1c
movq %rax, %rdi
callq 0x30c12
movq %rax, %rbx
movq -0x188(%rbp), %rdi
cmpq %r12, %rdi
je 0x2de21
callq 0xb430
leaq -0x1b8(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e4d2
leaq -0x258(%rbp), %rdi
callq *(%rax)
leaq -0x1b8(%rbp), %rdi
callq 0x2e5f2
leaq 0x1d42c(%rip), %rax     # 0x4b278
addq $0x10, %rax
leaq -0x1e8(%rbp), %rdi
movq %rax, -0x70(%rdi)
callq 0xf714
leaq -0x218(%rbp), %rdi
callq 0x138f0
leaq -0x248(%rbp), %rdi
callq 0x251ba
xorl %eax, %eax
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2df36
jmp 0x2df76
movq %rax, %rbx
movq $-0x78, %r14
movq -0x10(%r13), %rdi
cmpq %rdi, %r13
je 0x2deae
callq 0xb430
addq $-0x28, %r13
addq $0x28, %r14
jne 0x2dea0
jmp 0x2df9b
jmp 0x2debf
movq %rax, %rbx
movq -0x28(%r15), %rdi
leaq -0x18(%r15), %rax
cmpq %rdi, %rax
je 0x2ded4
callq 0xb430
addq $-0x28, %r15
cmpq %r14, %r15
jne 0x2dec2
jmp 0x2df9b
movq %rax, %rbx
jmp 0x2df9b
movq %rax, %rbx
movq -0x70(%rbp), %rdi
cmpq %r12, %rdi
je 0x2df00
callq 0xb430
jmp 0x2df00
movq %rax, %rbx
movq -0x90(%rbp), %rdi
jmp 0x2df6a
movq %rax, %rbx
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x2df23
leaq -0x50(%rbp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq -0xb0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2df41
callq 0xb430
jmp 0x2df41
movq %rax, %rdi
callq 0xe915
movq %rax, %rbx
movq -0xd0(%rbp), %rdi
jmp 0x2df6a
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r12, %rdi
je 0x2df63
callq 0xb430
jmp 0x2df63
movq %rax, %rbx
movq -0x110(%rbp), %rdi
cmpq %r15, %rdi
je 0x2dfa7
callq 0xb430
jmp 0x2dfa7
movq %rax, %rbx
jmp 0x2df8f
movq %rax, %rbx
movq -0x188(%rbp), %rdi
cmpq %r12, %rdi
je 0x2df8f
callq 0xb430
leaq -0x1b8(%rbp), %rdi
callq 0x2e5f2
leaq -0x258(%rbp), %rdi
callq 0x25124
movq %rbx, %rdi
callq 0xb7f0
nop