// File: /workspace/github_cpp_makefile_star2_O2/adamiaonr[P]rid-analytics/src/run-analysis.cpp
// Function: create_argv_parser()
ArgvParser * create_argv_parser() {

    ArgvParser * cmds = new ArgvParser();

    cmds->setIntroductoryDescription("\n\nrid-analytics v2.0\n\na tool to \
analyze the behavior of Bloom-filter based forwarding networks. it computes the \
probability of different delivery states for all possible request paths in a \
network topology passed as input.\nby adamiaonr@cmu.edu");

    cmds->setHelpOption("h", "help", "help page.");

    cmds->defineOption(
            OPTION_SCN_FILE,
            "path to .scn file with scenario info for analysis",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_DATA_DIR,
            "path to directory on which to save .csv files w/ results",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_OUTPUT_LABEL,
            "label to add to output .tsv files (will be created in <data-dir>)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_BF_SIZE,
            "size of Bloom filter (in bits)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_REQUEST_SIZE,
            "size of request, in # of URL components",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_MM_MODE,
            "multiple match resolution mode. 0 for 'flood' (aka 'AML'), 1 for 'random' (RML), 2/3 for 'hard/soft fallback'. default is 'flood'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_RESOLV_MODE,
            "enable/disable incorrect delivery resolution. 0 for 'off', 1 for 'on'. default is 'off'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_ORIGIN_SERVER,
            "id of origin server. default is '1'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_START_ROUTER,
            "id of starting router. default is '0'.",
            ArgvParser::OptionRequiresValue);

    // cmds->defineOption(
    //         OPTION_VERBOSE,
    //         "print stats during the model run. default: not verbose",
    //         ArgvParser::NoOptionAttribute);
    // cmds->defineOptionAlternative(OPTION_VERBOSE, "v");

    return cmds;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x78, %rsp
movl $0x158, %edi            # imm = 0x158
callq 0x43c0
movq %rax, %rbx
movq %rax, %rdi
callq 0x1ad58
leaq 0x141b5(%rip), %rsi     # 0x2a140
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x1c5b0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x10dad(%rip), %rsi     # 0x26d65
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x14266(%rip), %rsi     # 0x2a234
leaq 0x30(%rsp), %rdi
leaq 0x57(%rsp), %rdx
callq 0x16c66
leaq 0x14255(%rip), %rsi     # 0x2a239
leaq 0x58(%rsp), %rdi
leaq 0x56(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
leaq 0x58(%rsp), %rcx
movq %rbx, %rdi
callq 0x1c4fe
leaq 0x58(%rsp), %rdi
callq 0x41c0
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x14215(%rip), %rsi     # 0x2a244
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x14208(%rip), %rsi     # 0x2a24d
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141fb(%rip), %rsi     # 0x2a27f
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141ee(%rip), %rsi     # 0x2a288
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141e8(%rip), %rsi     # 0x2a2c1
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141df(%rip), %rsi     # 0x2a2ce
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141e2(%rip), %rsi     # 0x2a310
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141d4(%rip), %rsi     # 0x2a318
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141b4(%rip), %rsi     # 0x2a337
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141ab(%rip), %rsi     # 0x2a344
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x14194(%rip), %rsi     # 0x2a36c
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x14186(%rip), %rsi     # 0x2a374
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141ca(%rip), %rsi     # 0x2a3f7
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141c4(%rip), %rsi     # 0x2a407
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141de(%rip), %rsi     # 0x2a460
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141d6(%rip), %rsi     # 0x2a46e
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
leaq 0x141bc(%rip), %rsi     # 0x2a493
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x16c66
leaq 0x141b3(%rip), %rsi     # 0x2a4a0
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x16c66
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x1c3a8
leaq 0x30(%rsp), %rdi
callq 0x41c0
leaq 0x10(%rsp), %rdi
callq 0x41c0
movq %rbx, %rax
addq $0x78, %rsp
popq %rbx
popq %r14
retq
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
jmp 0x16375
jmp 0x16388
jmp 0x16397
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x41c0
jmp 0x16378
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x41c0
jmp 0x1638b
jmp 0x16388
jmp 0x16397
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x41c0
jmp 0x1639a
movq %rax, %r14
movq %r14, %rdi
callq 0x4700
movq %rax, %r14
movl $0x158, %esi            # imm = 0x158
movq %rbx, %rdi
callq 0x43d0
jmp 0x1639a