// File: /workspace/github_cpp_makefile_star2_O1/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 $0x2c8, %rsp            # imm = 0x2C8
movq %rsi, %rbx
movl %edi, %ebp
leaq 0x88(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x15998(%rip), %rsi     # 0x2197e
leaq 0x1599a(%rip), %rdx     # 0x21987
leaq 0x78(%rsp), %rdi
callq 0x90b2
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x15631(%rip), %rsi     # 0x21638
leaq 0x15901(%rip), %rdx     # 0x2190f
leaq 0x8(%rsp), %rdi
callq 0x90b2
leaq 0x48(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x158e7(%rip), %rsi     # 0x21910
leaq 0x15957(%rip), %rdx     # 0x21987
leaq 0x38(%rsp), %rdi
callq 0x90b2
leaq 0x68(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1593e(%rip), %rsi     # 0x21988
leaq 0x1593d(%rip), %rdx     # 0x2198e
leaq 0x58(%rsp), %rdi
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
leaq 0x58(%rsp), %r8
callq 0x5c6e
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc093
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc0aa
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc0c6
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc0e0
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x158a0(%rip), %rsi     # 0x2198f
leaq 0x158a8(%rip), %rdx     # 0x2199e
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x65e2
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc127
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x15869(%rip), %rsi     # 0x2199f
leaq 0x1586b(%rip), %rdx     # 0x219a8
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15853(%rip), %rsi     # 0x219a9
leaq 0x1586c(%rip), %rdx     # 0x219c9
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x72, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc1b7
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc1ce
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc1ea
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc204
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x157b7(%rip), %rsi     # 0x219ca
leaq 0x157bc(%rip), %rdx     # 0x219d6
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x157a4(%rip), %rsi     # 0x219d7
leaq 0x157b3(%rip), %rdx     # 0x219ed
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x6c, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc294
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc2ab
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc2c7
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc2e1
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x156fe(%rip), %rsi     # 0x219ee
leaq 0x156fa(%rip), %rdx     # 0x219f1
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x156e2(%rip), %rsi     # 0x219f2
leaq 0x15728(%rip), %rdx     # 0x21a3f
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x20, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc371
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc388
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc3a4
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc3be
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x15673(%rip), %rsi     # 0x21a40
leaq 0x1567f(%rip), %rdx     # 0x21a53
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x65e2
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc405
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x15640(%rip), %rsi     # 0x21a54
leaq 0x15644(%rip), %rdx     # 0x21a5f
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1562c(%rip), %rsi     # 0x21a60
leaq 0x15631(%rip), %rdx     # 0x21a6c
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x69, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc495
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc4ac
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc4c8
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc4e2
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1557c(%rip), %rsi     # 0x21a6d
leaq 0x1557d(%rip), %rdx     # 0x21a75
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15565(%rip), %rsi     # 0x21a76
leaq 0x155cf(%rip), %rdx     # 0x21ae7
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x78, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc572
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc589
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc5a5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc5bf
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1551a(%rip), %rsi     # 0x21ae8
leaq 0x1551e(%rip), %rdx     # 0x21af3
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15506(%rip), %rsi     # 0x21af4
leaq 0x155df(%rip), %rdx     # 0x21bd4
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x77, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc64f
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc666
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc682
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc69c
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1552a(%rip), %rsi     # 0x21bd5
leaq 0x15529(%rip), %rdx     # 0x21bdb
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15511(%rip), %rsi     # 0x21bdc
leaq 0x155c6(%rip), %rdx     # 0x21c98
callq 0x90b2
leaq 0x38(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x155b3(%rip), %rsi     # 0x21c99
leaq 0x155af(%rip), %rdx     # 0x21c9c
callq 0x90b2
leaq 0x58(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x14a98(%rip), %rsi     # 0x21199
leaq 0x14a92(%rip), %rdx     # 0x2119a
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
leaq 0x38(%rsp), %r8
leaq 0x58(%rsp), %r9
movl $0x20, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc74a
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc761
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc77d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc797
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x154f7(%rip), %rsi     # 0x21c9d
leaq 0x154f6(%rip), %rdx     # 0x21ca3
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x154de(%rip), %rsi     # 0x21ca4
leaq 0x1558f(%rip), %rdx     # 0x21d5c
callq 0x90b2
leaq 0x38(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x154b8(%rip), %rsi     # 0x21c99
leaq 0x154b4(%rip), %rdx     # 0x21c9c
callq 0x90b2
leaq 0x58(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x15a6b(%rip), %rsi     # 0x22267
leaq 0x15a65(%rip), %rdx     # 0x22268
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
leaq 0x38(%rsp), %r8
leaq 0x58(%rsp), %r9
movl $0x20, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc845
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc85c
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc878
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc892
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x154bc(%rip), %rsi     # 0x21d5d
leaq 0x154c8(%rip), %rdx     # 0x21d70
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x65e2
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc8d9
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x157c0(%rip), %rsi     # 0x220a8
leaq 0x157c4(%rip), %rdx     # 0x220b3
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15469(%rip), %rsi     # 0x21d71
leaq 0x15496(%rip), %rdx     # 0x21da5
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x4e, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xc969
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xc980
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xc99c
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xc9b6
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x153e1(%rip), %rsi     # 0x21da6
leaq 0x153e0(%rip), %rdx     # 0x21dac
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x153c8(%rip), %rsi     # 0x21dad
leaq 0x153f1(%rip), %rdx     # 0x21ddd
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x41, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xca46
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xca5d
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xca79
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xca93
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x1533c(%rip), %rsi     # 0x21dde
leaq 0x15344(%rip), %rdx     # 0x21ded
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1532c(%rip), %rsi     # 0x21dee
leaq 0x1539a(%rip), %rdx     # 0x21e63
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x73, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xcb23
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xcb3a
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xcb56
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xcb70
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x152e5(%rip), %rsi     # 0x21e64
leaq 0x152f9(%rip), %rdx     # 0x21e7f
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x65e2
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xcbb7
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x152ba(%rip), %rsi     # 0x21e80
leaq 0x152ba(%rip), %rdx     # 0x21e87
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x152a2(%rip), %rsi     # 0x21e88
leaq 0x152d9(%rip), %rdx     # 0x21ec6
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x76, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xcc47
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xcc5e
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xcc7a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xcc94
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x15224(%rip), %rsi     # 0x21ec7
leaq 0x15227(%rip), %rdx     # 0x21ed1
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1520f(%rip), %rsi     # 0x21ed2
leaq 0x15225(%rip), %rdx     # 0x21eef
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x64, %esi
callq 0x60d4
movq %rax, %r14
leaq 0x1(%rax), %rsi
movb $0x30, 0x1(%rax)
movq 0xb8(%rax), %rdi
addq $0x48, %rdi
callq 0x8a9e
addq $0x8, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x5220
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %r14
cmpq %r14, %rdi
je 0xcd53
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xcd6a
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xcd86
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xcda0
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x15141(%rip), %rsi     # 0x21ef0
leaq 0x15141(%rip), %rdx     # 0x21ef7
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x15129(%rip), %rsi     # 0x21ef8
leaq 0x1519d(%rip), %rdx     # 0x21f73
callq 0x90b2
leaq 0x38(%rsp), %r8
movq %r12, (%r8)
xorl %eax, %eax
movq %rax, 0x8(%r8)
movb %al, 0x10(%r8)
leaq 0x58(%rsp), %r9
movq %r14, (%r9)
movq %rax, 0x8(%r9)
movb %al, 0x10(%r9)
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movl $0x50, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xce30
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xce47
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xce63
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xce7d
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x78(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x150e8(%rip), %rsi     # 0x21f74
leaq 0x150e8(%rip), %rdx     # 0x21f7b
callq 0x90b2
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x150d0(%rip), %rsi     # 0x21f7c
leaq 0x15154(%rip), %rdx     # 0x22007
callq 0x90b2
leaq 0x38(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1588d(%rip), %rsi     # 0x22754
leaq 0x15887(%rip), %rdx     # 0x22755
callq 0x90b2
leaq 0x58(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x15856(%rip), %rsi     # 0x22738
leaq 0x15850(%rip), %rdx     # 0x22739
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rdx
leaq 0x8(%rsp), %rcx
leaq 0x38(%rsp), %r8
leaq 0x58(%rsp), %r9
movl $0x20, %esi
callq 0x60d4
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xcf2b
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xcf42
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xcf5e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xcf78
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
leaq 0x1b0(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x66f0
leaq 0x78(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0xd670
xorps %xmm0, %xmm0
movaps %xmm0, 0x190(%rsp)
movq $0x0, 0x1a0(%rsp)
movq 0x228(%rsp), %rbx
movq 0x230(%rsp), %rbp
cmpq %rbp, %rbx
je 0xd141
movb $0x1, %r12b
leaq 0x8(%rsp), %r14
leaq 0x1b0(%rsp), %r15
cmpq $0x0, 0x8(%rbx)
je 0xd02d
testb $0x1, %r12b
je 0xd07d
leaq 0x48(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x38(%rsp), %r13
movq %r13, %rdi
leaq 0x14bcf(%rip), %rsi     # 0x21bd5
leaq 0x14bce(%rip), %rdx     # 0x21bdb
callq 0x90b2
movq %r15, %rdi
movq %r13, %rsi
callq 0x8352
movq %rbx, %rdi
movq %rax, %rsi
callq 0xa3b4
movl %eax, %r13d
jmp 0xd080
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq %r14, %rdi
leaq 0x14fc7(%rip), %rsi     # 0x22008
leaq 0x14fd8(%rip), %rdx     # 0x22020
callq 0x90b2
movq %r15, %rdi
movq %r14, %rsi
callq 0x7436
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd12d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd12d
xorl %r13d, %r13d
testb $0x1, %r12b
je 0xd0a2
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0xd0a2
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
testb %r13b, %r13b
je 0xd0c9
leaq 0x90(%rsp), %rdi
movq %rbx, %rsi
leaq 0xb0(%rsp), %rdx
leaq 0xad(%rsp), %rcx
callq 0x1072a
jmp 0xd12d
testb $0x1, %r12b
je 0xd0e2
movq %rbx, %rdi
leaq 0x1411a(%rip), %rsi     # 0x211f3
callq 0x50f0
testl %eax, %eax
je 0xd13c
movq %r14, %rdi
movq %rbx, %rsi
movl $0x2, %edx
callq 0xe05c
movq %r14, %rdi
callq 0x5180
movq %rax, %r13
movq %r14, %rdi
callq 0xe0dc
testb %r13b, %r13b
je 0xd283
movzbl %r13b, %eax
cmpl $0xff, %eax
je 0xd283
leaq 0x190(%rsp), %rdi
movq %rbx, %rsi
callq 0xe114
addq $0x20, %rbx
cmpq %rbp, %rbx
jne 0xcfdc
jmp 0xd141
xorl %r12d, %r12d
jmp 0xd12d
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x14d2b(%rip), %rsi     # 0x21e80
leaq 0x14d2b(%rip), %rdx     # 0x21e87
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x820a
movl %eax, %ebx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd191
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
cmpl $0x2, %ebx
jb 0xd1a0
leaq 0x78(%rsp), %rdi
callq 0xe146
movq 0x190(%rsp), %rbx
movq 0x198(%rsp), %r12
cmpq %r12, %rbx
je 0xd1ed
leaq 0x8(%rsp), %r14
leaq 0x78(%rsp), %r15
movq %r14, %rdi
movq %rbx, %rsi
callq 0x110aa
movb 0x28(%rbx), %al
movb %al, 0x30(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xe1b4
movq %r14, %rdi
callq 0xe0dc
addq $0x30, %rbx
cmpq %r12, %rbx
jne 0xd1bf
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x14c7f(%rip), %rsi     # 0x21e80
leaq 0x14c7f(%rip), %rdx     # 0x21e87
callq 0x90b2
leaq 0x1b0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x820a
movl %eax, %ebx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd23d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
testl %ebx, %ebx
je 0xd24b
leaq 0x78(%rsp), %rdi
callq 0xe65c
leaq 0x190(%rsp), %rdi
callq 0x104d6
leaq 0x78(%rsp), %rdi
callq 0x10518
leaq 0x1b0(%rsp), %rdi
callq 0x105b4
xorl %eax, %eax
addq $0x2c8, %rsp            # imm = 0x2C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x13ee3(%rip), %rsi     # 0x2116d
leaq 0x58(%rsp), %rdi
movq %rbx, %rdx
callq 0x8929
leaq 0x14d83(%rip), %rsi     # 0x22021
leaq 0x58(%rsp), %rdi
callq 0x57c0
leaq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xd2ce
movups (%rcx), %xmm0
leaq 0x18(%rsp), %rdx
movups %xmm0, (%rdx)
jmp 0xd2db
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rax), %rdx
leaq 0x8(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1b0(%rsp), %rdi
movl $0x1, %edx
callq 0x87f0
jmp 0xd58d
jmp 0xd5b5
jmp 0xd58d
jmp 0xd5b5
movq %rdx, %r14
movq %rax, %rbx
jmp 0xd5e4
jmp 0xd476
jmp 0xd3fd
jmp 0xd3bb
jmp 0xd3c0
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd3bb
jmp 0xd3c0
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
movq %rax, %rbx
jmp 0xd417
movq %rax, %rbx
jmp 0xd42e
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
jmp 0xd3fd
jmp 0xd450
jmp 0xd476
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xd417
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xd42e
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd453
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd453
jmp 0xd450
jmp 0xd476
movq %rax, %rbx
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xd653
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd653
movq %rax, %rbx
jmp 0xd653
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0xd49d
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd49d
movq %rax, %rbx
movq 0x38(%rsp), %rdi
cmpq %r12, %rdi
je 0xd4b9
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd4b9
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd4da
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd4da
movq %rax, %rbx
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0xd660
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd660
movq %rax, %rbx
jmp 0xd660
jmp 0xd5b5
movq %rdx, %r14
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd534
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd534
movq %rdx, %r14
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0xd5cd
movq 0x68(%rsp), %rsi
jmp 0xd5a7
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
jne 0xd40a
jmp 0xd417
jmp 0xd5b5
jmp 0xd5bd
jmp 0xd5b5
movq %rdx, %r14
movq %rax, %rbx
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0xd5cd
movq 0x48(%rsp), %rsi
jmp 0xd5a7
jmp 0xd5b5
movq %rdx, %r14
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xd5cd
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd5cd
jmp 0xd5b5
jmp 0xd5b5
movq %rdx, %r14
movq %rax, %rbx
jmp 0xd5cd
movq %rdx, %r14
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xe0dc
leaq 0x190(%rsp), %rdi
callq 0x104d6
leaq 0x78(%rsp), %rdi
callq 0x10518
cmpl $0x1, %r14d
jne 0xd653
movq %rbx, %rdi
callq 0x5190
movq (%rax), %rcx
movq %rax, %rdi
callq *0x10(%rcx)
leaq 0x78(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rax, %rsi
callq 0x8890
leaq 0x1b0(%rsp), %rdi
leaq 0x78(%rsp), %rsi
movl $0x1, %edx
callq 0x87f0
movq %rax, %rbx
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0xd64e
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5410
jmp 0xd64e
movq %rax, %rbx
callq 0x56b0
leaq 0x1b0(%rsp), %rdi
callq 0x105b4
movq %rbx, %rdi
callq 0x5720
movq %rax, %rdi
callq 0x8ea4