// File: /workspace/github_cpp_makefile_star2_O2/jovermann[P]streplace/src/streplace.cpp
// Function: main
int main(int argc, char* argv[])
{
    // Run unit tests and exit if enabled at compile time.
    UNIT_TEST_RUN();

    // Command line options.
    ut1::CommandLineParser cl("streplace", "Replace strings in files, filenames and symbolic links, in place, recursively.\n"
                                           "\n"
                                           "Usage: $programName [OPTIONS, FILES, DIRS and RULES] [--] [FILES and DIRS]\n"
                                           "\n"
                                           "This program substitutes strings in files, filenames and symbolic links according to rules:\n"
                                           "- A rule is of the from FOO=BAR which replaces FOO by BAR. FOO is a regular expression by default (unless -x is specified).\n"
                                           "- Use C escape sequences like \\n \\t \\xff. Use \\\\ to get a verbatim backslash. Note that you will need to protect backslashes from the shell by using single quotes or by duplicating backslashes.\n"
                                           "- Use \\= to get a verbatim =.\n"
                                           "- Use 'IMG([0-9]*).jpeg=pic$1.jpg' to reuse subexpressions of regular expressions ($& for the whole match, $n for subexpressions)."
                                           "\n",
        "\n"
        "$programName version $version *** Copyright (c) 2021-2022 Johannes Overmann *** https://github.com/jovermann/streplace",
        "0.10.2");

    cl.addHeader("\nFile options:\n");
    cl.addOption('r', "recursive", "Recursively process directories.");
    cl.addOption('l', "follow-links", "Follow symbolic links.");
    cl.addOption(' ', "all", "Process all files and directories. By default '.git' directories are skipped.");

    cl.addHeader("\nMatching options:\n");
    cl.addOption('i', "ignore-case", "Ignore case.");
    cl.addOption('x', "no-regex", "Match the left side of each rule as a simple string, not as a regex (substring search, useful with binary files).");
    cl.addOption('w', "whole-words", "Match only whole words. A word is an alphanumeric seuqnece with underscores. If the match begins/ends with a non-word char then this is always considered to be a word boundary, e.g. 'foo;' matches '::foo;' but not 'barfoo;'.");
    cl.addOption(' ', "equals", "Use STR instead of \"=\" as the rule lhs/rhs-separator, e.g. fooSTRbar. This may be one or more chars long. Example: --equals==== allows rules to have the form \"int a = 0;===unsigned a = 0;\"", "STR", "=");
    cl.addOption(' ', "dollar", "Use STR instead of \"$\" in substring references in the replacement string, e.g. STR&, STR1, STR12. This may be one or more chars long. Example: --dollar=SUB for \"0x([0-9A-Za-z]+)=$SUB1\"", "STR", "$");

    cl.addHeader("\nRenaming options:\n");
    cl.addOption('N', "rename-only", "Rename files and dirs. Do not modify files contents.");
    cl.addOption('A', "rename", "Rename files and dirs and modify files contents.");
    cl.addOption('s', "modify-symlinks", "Modify the path symlinks point to. Do not modify files contents. Do not rename. -N, -A and -s are mutually exclusive.");

    cl.addHeader("\nVerbose / common options:\n");
    cl.addOption('v', "verbose", "Increase verbosity. Specify multiple times to be more verbose.");
    cl.addOption('d', "dummy-mode", "Do not write/change anything.").addAlias('0');
    cl.addOption('P', "preview", "Do not write/change anything, but print matching lines of matching files with context to stdout and highlight replacements.");
    cl.addOption(' ', "context", "set number of context lines for --preview to N (use +N to hide line separator, use -1 to display the whole file) (range=[-1..], default=1).", "N", "1");

    // Parse command line options.
    cl.parse(argc, argv);

    try
    {
        // Steplace instance.
        Streplace streplace(cl);

        // Parse non-option arguments (paths and rules).
        std::vector<std::filesystem::directory_entry> paths;
        bool                                          allowRules = true;
        for (const std::string& arg: cl.getArgs())
        {
            if (arg.empty())
            {
                cl.printMessage("Ignoring empty argument.");
                continue;
            }
            if (allowRules && ut1::contains(arg, cl.getStr("equals")))
            {
                streplace.addRule(arg);
            }
            else if (allowRules && (arg == "--"))
            {
                allowRules = false;
            }
            else if (std::filesystem::exists(arg))
            {
                paths.emplace_back(arg);
            }
            else
            {
                cl.error("'" + arg + "': No such file or directory.");
            }
        }

        // Print rules.
        if (cl.getCount("verbose") >= 2)
        {
            streplace.printRules();
        }

        // Process files and directories.
        for (std::filesystem::directory_entry path: paths)
        {
            streplace.processDirectoryEntry(path);
        }

        // Print stats.
        if (cl("verbose"))
        {
            streplace.printStats();
        }
    }
    catch (const std::exception& e)
    {
        cl.error(e.what());
    }

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rsi, %rbx
movl %edi, %ebp
leaq 0x11789(%rip), %rsi     # 0x1b97e
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x1142a(%rip), %rsi     # 0x1b638
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x116ec(%rip), %rsi     # 0x1b910
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x760a
leaq 0x1174e(%rip), %rsi     # 0x1b988
leaq 0x30(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x10(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x5a6c
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x116f0(%rip), %rsi     # 0x1b98f
leaq 0x88(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x6010
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x116c5(%rip), %rsi     # 0x1b99f
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x116b6(%rip), %rsi     # 0x1b9a9
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
andq $0x0, -0x8(%r14)
xorl %eax, %eax
movb %al, (%r14)
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
andq $0x0, -0x8(%r15)
movb %al, (%r15)
leaq 0x1a0(%rsp), %rdi
pushq $0x72
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
leaq 0x10(%rsp), %r8
leaq 0x30(%rsp), %r9
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1164b(%rip), %rsi     # 0x1b9ca
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x1163f(%rip), %rsi     # 0x1b9d7
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x6c
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x115d4(%rip), %rsi     # 0x1b9ee
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x115bf(%rip), %rsi     # 0x1b9f2
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x20
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1158b(%rip), %rsi     # 0x1ba40
leaq 0x88(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x6010
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11564(%rip), %rsi     # 0x1ba54
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x11557(%rip), %rsi     # 0x1ba60
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x69
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x114e2(%rip), %rsi     # 0x1ba6d
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x114d2(%rip), %rsi     # 0x1ba76
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x78
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x114c2(%rip), %rsi     # 0x1bae8
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x114b5(%rip), %rsi     # 0x1baf4
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x77
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11514(%rip), %rsi     # 0x1bbd5
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x11502(%rip), %rsi     # 0x1bbdc
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x115a9(%rip), %rsi     # 0x1bc99
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x760a
leaq 0x10a93(%rip), %rsi     # 0x1b199
leaq 0x30(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
pushq $0x20
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
leaq 0x10(%rsp), %r8
leaq 0x30(%rsp), %r9
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1152f(%rip), %rsi     # 0x1bc9d
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x1151d(%rip), %rsi     # 0x1bca4
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x114fc(%rip), %rsi     # 0x1bc99
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x760a
leaq 0x11ab4(%rip), %rsi     # 0x1c267
leaq 0x30(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
pushq $0x20
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
leaq 0x10(%rsp), %r8
leaq 0x30(%rsp), %r9
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11542(%rip), %rsi     # 0x1bd5d
leaq 0x88(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x6010
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11852(%rip), %rsi     # 0x1c0a8
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x11502(%rip), %rsi     # 0x1bd71
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x4e
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x114b5(%rip), %rsi     # 0x1bda6
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x114a3(%rip), %rsi     # 0x1bdad
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x41
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11452(%rip), %rsi     # 0x1bdde
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x11449(%rip), %rsi     # 0x1bdee
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x73
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1143d(%rip), %rsi     # 0x1be64
leaq 0x88(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x6010
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1141e(%rip), %rsi     # 0x1be80
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x1140d(%rip), %rsi     # 0x1be88
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x76
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x113ca(%rip), %rsi     # 0x1bec7
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x113bc(%rip), %rsi     # 0x1bed2
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x64
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
pushq $0x30
popq %rsi
movq %rax, %rdi
callq 0xb19e
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1134d(%rip), %rsi     # 0x1bef0
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x1133c(%rip), %rsi     # 0x1bef8
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x10(%rsp), %r8
movq %r14, (%r8)
andq $0x0, 0x8(%r8)
xorl %eax, %eax
movb %al, 0x10(%r8)
leaq 0x30(%rsp), %r9
movq %r15, (%r9)
andq $0x0, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1a0(%rsp), %rdi
pushq $0x50
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x11336(%rip), %rsi     # 0x1bf74
leaq 0x88(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x760a
leaq 0x11325(%rip), %rsi     # 0x1bf7c
leaq 0x58(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x760a
leaq 0x11ae7(%rip), %rsi     # 0x1c754
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x760a
leaq 0x11ab5(%rip), %rsi     # 0x1c738
leaq 0x30(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
pushq $0x20
popq %rsi
leaq 0x88(%rsp), %rdx
leaq 0x58(%rsp), %rcx
leaq 0x10(%rsp), %r8
leaq 0x30(%rsp), %r9
callq 0x5cfc
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
leaq 0x1a0(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x60c4
leaq 0x88(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0xb1da
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %rax
andq $0x0, 0x10(%rax)
movaps %xmm0, (%rax)
leaq 0x1a0(%rsp), %r15
movq 0x78(%r15), %rbx
movq 0x80(%r15), %r14
movb $0x1, %bpl
leaq 0x58(%rsp), %r13
cmpq %r14, %rbx
je 0xae1f
cmpq $0x0, 0x8(%rbx)
je 0xad9f
testb $0x1, %bpl
je 0xaddf
movq %r13, %rdi
leaq 0x10e7b(%rip), %rsi     # 0x1bbd5
leaq 0x10(%rsp), %rdx
callq 0x760a
movq %r15, %rdi
movq %r13, %rsi
callq 0x7208
movq %rbx, %rdi
movq %rax, %rsi
callq 0x8c98
movl %eax, %r12d
movq %r13, %rdi
callq 0x51f0
testb %r12b, %r12b
je 0xadc8
movb $0x1, %bpl
leaq 0x88(%rsp), %rdi
movq %rbx, %rsi
callq 0xb8a2
jmp 0xae16
movq %r13, %rdi
leaq 0x1125f(%rip), %rsi     # 0x1c008
leaq 0x10(%rsp), %rdx
callq 0x760a
movq %r15, %rdi
movq %r13, %rsi
callq 0x6968
movq %r13, %rdi
callq 0x51f0
jmp 0xae16
movq %rbx, %rdi
leaq 0x10421(%rip), %rsi     # 0x1b1f3
callq 0xb8b6
testb %al, %al
je 0xaddf
xorl %ebp, %ebp
jmp 0xae16
movq %r13, %rdi
movq %rbx, %rsi
pushq $0x2
popq %rdx
callq 0xb8c4
movq %r13, %rdi
callq 0xa080
movl %eax, %r12d
movq %r13, %rdi
callq 0xb92c
testb %r12b, %r12b
je 0xaf22
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
callq 0xb942
addq $0x20, %rbx
jmp 0xad36
leaq 0x1105a(%rip), %rsi     # 0x1be80
leaq 0x58(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x714e
movl %eax, %ebx
leaq 0x58(%rsp), %rdi
callq 0x51f0
cmpl $0x2, %ebx
jb 0xae65
leaq 0x88(%rsp), %rdi
callq 0xb97c
movq 0x30(%rsp), %rbx
movq 0x38(%rsp), %r12
leaq 0x58(%rsp), %r14
leaq 0x88(%rsp), %r15
cmpq %r12, %rbx
je 0xaea5
movq %r14, %rdi
movq %rbx, %rsi
callq 0xb9da
movq %r15, %rdi
movq %r14, %rsi
callq 0xb9f8
movq %r14, %rdi
callq 0xb92c
addq $0x30, %rbx
jmp 0xae7c
leaq 0x10fd4(%rip), %rsi     # 0x1be80
leaq 0x58(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x79ee
movl %eax, %ebx
leaq 0x58(%rsp), %rdi
callq 0x51f0
testb %bl, %bl
je 0xaeea
leaq 0x88(%rsp), %rdi
callq 0xbcce
leaq 0x30(%rsp), %rdi
callq 0xc6a0
leaq 0x88(%rsp), %rdi
callq 0xc6c2
leaq 0x1a0(%rsp), %rdi
callq 0xc6f2
xorl %eax, %eax
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10244(%rip), %rsi     # 0x1b16d
leaq 0x10(%rsp), %rdi
movq %rbx, %rdx
callq 0x7667
leaq 0x110e4(%rip), %rdx     # 0x1c021
leaq 0x58(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x76f8
leaq 0x1a0(%rsp), %rdi
leaq 0x58(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x7540
jmp 0xb0db
jmp 0xb0f3
jmp 0xb0f3
jmp 0xb0db
jmp 0xb0f3
movq %rdx, %r14
movq %rax, %rbx
jmp 0xb122
jmp 0xb02f
jmp 0xb081
jmp 0xafee
jmp 0xaff6
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xafee
jmp 0xaff6
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
movq %rax, %rbx
jmp 0xb08e
movq %rax, %rbx
jmp 0xb098
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
jmp 0xb081
jmp 0xb02a
jmp 0xb02f
movq %rax, %rbx
jmp 0xb0a2
movq %rax, %rbx
jmp 0xb180
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x51f0
jmp 0xb049
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x51f0
jmp 0xb058
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x51f0
jmp 0xb067
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x51f0
jmp 0xb18d
movq %rax, %rbx
jmp 0xb18d
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x51f0
leaq 0x10(%rsp), %rdi
callq 0x51f0
leaq 0x58(%rsp), %rdi
callq 0x51f0
leaq 0x88(%rsp), %rdi
callq 0x51f0
jmp 0xb180
movq %rdx, %r14
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x51f0
jmp 0xb0cc
movq %rdx, %r14
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
jmp 0xb0e6
jmp 0xb0f3
jmp 0xb0db
jmp 0xb0f3
jmp 0xb0f3
movq %rdx, %r14
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x51f0
jmp 0xb10b
jmp 0xb0fb
jmp 0xb0f3
jmp 0xb0f3
movq %rdx, %r14
movq %rax, %rbx
jmp 0xb10b
movq %rdx, %r14
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0xb92c
leaq 0x30(%rsp), %rdi
callq 0xc6a0
leaq 0x88(%rsp), %rdi
callq 0xc6c2
cmpl $0x1, %r14d
jne 0xb180
movq %rbx, %rdi
callq 0x51b0
movq (%rax), %rcx
movq %rax, %rdi
callq *0x10(%rcx)
leaq 0x88(%rsp), %rdi
leaq 0x58(%rsp), %rdx
movq %rax, %rsi
callq 0x760a
leaq 0x1a0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x7540
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x51f0
jmp 0xb17b
movq %rax, %rbx
callq 0x56c0
leaq 0x1a0(%rsp), %rdi
callq 0xc6f2
movq %rbx, %rdi
callq 0x5730
movq %rax, %rdi
callq 0x7ba6
nop