// File: /workspace/github_cpp_makefile_star2_O1/aalto-speech[P]ftk/src/cmsfg.cc
// Function: main
int main(int argc, char* argv[]) {

    conf::Config config;
    config("usage: cmsfg [OPTION...] WORDLIST VOCAB MSFG\n")
      ('h', "help", "", "", "display help")
      ('n', "no-lookahead", "", "", "don't use lookahead, uses less memory but much slower")
      ('t', "temp-graphs=INT", "arg", "0", "Write out intermediate graphs for #G mod INT == 0")
      ('8', "utf-8", "", "", "Utf-8 character encoding in use");
    config.default_parse(argc, argv);
    if (config.arguments.size() != 3) config.print_help(stderr, 1);

    string wordlist_fname = config.arguments[0];
    string vocab_fname = config.arguments[1];
    string msfg_fname = config.arguments[2];
    unsigned int temp_graph_interval = config["temp-graphs"].get_int();
    bool lookahead = !config["no-lookahead"].specified;
    bool utf8_encoding = config["utf-8"].specified;

    cerr << std::boolalpha;
    cerr << "parameters, wordlist: " << wordlist_fname << endl;
    cerr << "parameters, initial vocabulary: " << vocab_fname << endl;
    cerr << "parameters, msfg to write: " << msfg_fname << endl;
    cerr << "parameters, lookahead: " << lookahead << endl;
    if (temp_graph_interval > 0)
        cerr << "parameters, write intermediate graphs whenever #V modulo " << temp_graph_interval << " == 0" << endl;
    else
        cerr << "parameters, write intermediate graphs: NO" << endl;
    cerr << "parameters, utf-8 encoding: " << utf8_encoding << endl;

    int maxlen, word_maxlen;
    map<string, flt_type> vocab;
    map<string, flt_type> words;

    cerr << "Reading vocabulary " << vocab_fname << endl;
    int retval = Unigrams::read_vocab(vocab_fname, vocab, maxlen, utf8_encoding);
    if (retval < 0) {
        cerr << "something went wrong reading vocabulary" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\t" << "vocabulary size: " << vocab.size() << endl;
    cerr << "\t" << "maximum string length: " << maxlen << endl;

    cerr << "Reading word list " << wordlist_fname << endl;
    retval = Unigrams::read_vocab(wordlist_fname, words, word_maxlen, utf8_encoding);
    if (retval < 0) {
        cerr << "something went wrong reading word list" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\t" << "wordlist size: " << words.size() << endl;
    cerr << "\t" << "maximum word length: " << word_maxlen << endl;

    StringSet ss_vocab(vocab);
    MultiStringFactorGraph msfg(start_end_symbol);
    vocab[start_end_symbol] = 0.0;

    unsigned int num_separate_nodes = 0;
    unsigned int num_separate_arcs = 0;
    unsigned int curr_word_idx = 0;
    for (auto it = words.cbegin(); it != words.cend(); ++it) {
        FactorGraph fg(it->first, start_end_symbol, ss_vocab);
        msfg.add(fg, lookahead);
        num_separate_nodes += fg.nodes.size();
        num_separate_arcs += fg.arcs.size();
        curr_word_idx++;
        if (curr_word_idx % 10000 == 0) cerr << "... processing word " << curr_word_idx << endl;
        if (temp_graph_interval > 0 && curr_word_idx % temp_graph_interval == 0) {
            stringstream tempfname;
            tempfname << msfg_fname << "." << curr_word_idx;
            cerr << "... writing intermediate graph to file " << tempfname.str() << endl;
            msfg.write(tempfname.str());
        }
    }

    msfg.write(msfg_fname);

    cerr << "factor graph strings: " << msfg.string_end_nodes.size() << endl;
    cerr << "factor graph nodes: " << msfg.nodes.size() << endl;
    cerr << "nodes for separate fgs: " << num_separate_nodes << endl;
    cerr << "arcs for separate fgs: " << num_separate_arcs << endl;

    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x8b8, %rsp            # imm = 0x8B8
movq %rsi, %rbx
movl %edi, %r14d
leaq -0x4c8(%rbp), %rdi
callq 0x7eda
leaq -0x3a0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x21f0b(%rip), %rsi     # 0x27020
leaq 0x21f31(%rip), %rdx     # 0x2704d
leaq -0x3b0(%rbp), %rdi
callq 0x708c
leaq -0x4c8(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x7f40
movq %rax, %r15
leaq -0x380(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x21f06(%rip), %rsi     # 0x27056
leaq 0x21f03(%rip), %rdx     # 0x2705a
leaq -0x390(%rbp), %rdi
callq 0x708c
leaq -0x300(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x225a2(%rip), %rdx     # 0x27717
leaq -0x310(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x2e0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22581(%rip), %rdx     # 0x27717
leaq -0x2f0(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x2c0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21e97(%rip), %rsi     # 0x2704e
leaq 0x21e9c(%rip), %rdx     # 0x2705a
leaq -0x2d0(%rbp), %rdi
callq 0x708c
leaq -0x390(%rbp), %rdx
leaq -0x310(%rbp), %rcx
leaq -0x2f0(%rbp), %r8
leaq -0x2d0(%rbp), %r9
movq %r15, %rdi
movl $0x68, %esi
callq 0x7f58
movq %rax, %r15
leaq -0x2a0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21e53(%rip), %rsi     # 0x2705b
leaq 0x21e58(%rip), %rdx     # 0x27067
leaq -0x2b0(%rbp), %rdi
callq 0x708c
leaq -0x280(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x224ea(%rip), %rdx     # 0x27717
leaq -0x290(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x260(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x224c9(%rip), %rdx     # 0x27717
leaq -0x270(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x240(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21df9(%rip), %rsi     # 0x27068
leaq 0x21e27(%rip), %rdx     # 0x2709d
leaq -0x250(%rbp), %rdi
callq 0x708c
leaq -0x2b0(%rbp), %rdx
leaq -0x290(%rbp), %rcx
leaq -0x270(%rbp), %r8
leaq -0x250(%rbp), %r9
movq %r15, %rdi
movl $0x6e, %esi
callq 0x7f58
movq %rax, %r15
leaq -0x220(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21dde(%rip), %rsi     # 0x2709e
leaq 0x21de6(%rip), %rdx     # 0x270ad
leaq -0x230(%rbp), %rdi
callq 0x708c
leaq -0x200(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21dc9(%rip), %rsi     # 0x270ae
leaq 0x21dc5(%rip), %rdx     # 0x270b1
leaq -0x210(%rbp), %rdi
callq 0x708c
leaq -0x1e0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21dd8(%rip), %rsi     # 0x270e2
leaq 0x21dd2(%rip), %rdx     # 0x270e3
leaq -0x1f0(%rbp), %rdi
callq 0x708c
leaq -0x1c0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21d83(%rip), %rsi     # 0x270b2
leaq 0x21dad(%rip), %rdx     # 0x270e3
leaq -0x1d0(%rbp), %rdi
callq 0x708c
leaq -0x230(%rbp), %rdx
leaq -0x210(%rbp), %rcx
leaq -0x1f0(%rbp), %r8
leaq -0x1d0(%rbp), %r9
movq %r15, %rdi
movl $0x74, %esi
callq 0x7f58
movq %rax, %r15
leaq -0x1a0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21d64(%rip), %rsi     # 0x270e4
leaq 0x21d62(%rip), %rdx     # 0x270e9
leaq -0x1b0(%rbp), %rdi
callq 0x708c
leaq -0x180(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22372(%rip), %rdx     # 0x27717
leaq -0x190(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x160(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22351(%rip), %rdx     # 0x27717
leaq -0x170(%rbp), %rdi
movq %rdx, %rsi
callq 0x708c
leaq -0x140(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21d03(%rip), %rsi     # 0x270ea
leaq 0x21d1b(%rip), %rdx     # 0x27109
leaq -0x150(%rbp), %rdi
callq 0x708c
leaq -0x1b0(%rbp), %rdx
leaq -0x190(%rbp), %rcx
leaq -0x170(%rbp), %r8
leaq -0x150(%rbp), %r9
movq %r15, %rdi
movl $0x38, %esi
callq 0x7f58
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x543b
callq 0x4360
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x5453
callq 0x4360
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0x546b
callq 0x4360
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rax
cmpq %rax, %rdi
je 0x5483
callq 0x4360
movq -0x1d0(%rbp), %rdi
leaq -0x1c0(%rbp), %rax
cmpq %rax, %rdi
je 0x549b
callq 0x4360
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
cmpq %rax, %rdi
je 0x54b3
callq 0x4360
movq -0x210(%rbp), %rdi
leaq -0x200(%rbp), %rax
cmpq %rax, %rdi
je 0x54cb
callq 0x4360
movq -0x230(%rbp), %rdi
leaq -0x220(%rbp), %rax
cmpq %rax, %rdi
je 0x54e3
callq 0x4360
movq -0x250(%rbp), %rdi
leaq -0x240(%rbp), %rax
cmpq %rax, %rdi
je 0x54fb
callq 0x4360
movq -0x270(%rbp), %rdi
leaq -0x260(%rbp), %rax
cmpq %rax, %rdi
je 0x5513
callq 0x4360
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
cmpq %rax, %rdi
je 0x552b
callq 0x4360
movq -0x2b0(%rbp), %rdi
leaq -0x2a0(%rbp), %rax
cmpq %rax, %rdi
je 0x5543
callq 0x4360
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0x555b
callq 0x4360
movq -0x2f0(%rbp), %rdi
leaq -0x2e0(%rbp), %rax
cmpq %rax, %rdi
je 0x5573
callq 0x4360
movq -0x310(%rbp), %rdi
leaq -0x300(%rbp), %rax
cmpq %rax, %rdi
je 0x558b
callq 0x4360
movq -0x390(%rbp), %rdi
cmpq %r13, %rdi
je 0x559c
callq 0x4360
movq -0x3b0(%rbp), %rdi
cmpq %r12, %rdi
je 0x55ad
callq 0x4360
leaq -0x4c8(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x89a6
movq -0x428(%rbp), %rax
subq -0x430(%rbp), %rax
cmpq $0x60, %rax
je 0x55ee
movq 0x2f9ee(%rip), %rax     # 0x34fc8
movq (%rax), %rsi
leaq -0x4c8(%rbp), %rdi
movl $0x1, %edx
callq 0x8f48
movq -0x430(%rbp), %rax
leaq -0xb0(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xc0(%rbp), %rdi
callq 0x6ff2
movq -0x430(%rbp), %rax
leaq -0x90(%rbp), %r12
movq %r12, -0x10(%r12)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
leaq -0xa0(%rbp), %rdi
callq 0x6ff2
movq -0x430(%rbp), %rax
leaq -0xe0(%rbp), %r13
movq %r13, -0x10(%r13)
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
addq %rsi, %rdx
leaq -0xf0(%rbp), %rdi
callq 0x6ff2
leaq -0x360(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x21a8f(%rip), %rsi     # 0x2710a
leaq 0x21a93(%rip), %rdx     # 0x27115
leaq -0x370(%rbp), %rdi
callq 0x708c
leaq -0x4c8(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x8a60
movq %rax, %rdi
callq 0x7dfc
movl %eax, %ebx
movq -0x370(%rbp), %rdi
cmpq %r15, %rdi
je 0x56bc
callq 0x4360
leaq -0x340(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x2198d(%rip), %rsi     # 0x2705b
leaq 0x21992(%rip), %rdx     # 0x27067
leaq -0x350(%rbp), %rdi
callq 0x708c
leaq -0x4c8(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x8a60
movb 0x4a(%rax), %al
movb %al, -0x34(%rbp)
movq -0x350(%rbp), %rdi
cmpq %r15, %rdi
je 0x570b
callq 0x4360
leaq -0x320(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x219c7(%rip), %rsi     # 0x270e4
leaq 0x219c5(%rip), %rdx     # 0x270e9
leaq -0x330(%rbp), %rdi
callq 0x708c
leaq -0x4c8(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x8a60
movb 0x4a(%rax), %al
movb %al, -0x30(%rbp)
movq -0x330(%rbp), %rdi
cmpq %r15, %rdi
je 0x575a
callq 0x4360
movq 0x2f887(%rip), %rdi     # 0x34fe8
movq (%rdi), %rax
movq -0x18(%rax), %rax
orl $0x1, 0x18(%rdi,%rax)
leaq 0x219a2(%rip), %rsi     # 0x27116
movl $0x16, %edx
callq 0x4410
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq 0x2f855(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f841(%rip), %rdi     # 0x34fe8
leaq 0x2197f(%rip), %rsi     # 0x2712d
movl $0x20, %edx
callq 0x4410
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq 0x2f81b(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f807(%rip), %rdi     # 0x34fe8
leaq 0x21966(%rip), %rsi     # 0x2714e
movl $0x1b, %edx
callq 0x4410
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq 0x2f7e1(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f7cd(%rip), %rdi     # 0x34fe8
leaq 0x21948(%rip), %rsi     # 0x2716a
movl $0x17, %edx
callq 0x4410
movb -0x34(%rbp), %al
xorb $0x1, %al
movzbl %al, %esi
movq 0x2f7ad(%rip), %r15     # 0x34fe8
movq %r15, %rdi
movl %esi, -0x34(%rbp)
callq 0x45f0
movq %rax, %rdi
callq 0x4180
testl %ebx, %ebx
jne 0x5868
leaq 0x21963(%rip), %rsi     # 0x271bc
movl $0x29, %edx
movq %r15, %rdi
callq 0x4410
jmp 0x58a5
movq 0x2f779(%rip), %rdi     # 0x34fe8
leaq 0x2190c(%rip), %rsi     # 0x27182
movl $0x39, %edx
callq 0x4410
movl %ebx, %esi
movq 0x2f75f(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %r15
leaq 0x21846(%rip), %rsi     # 0x270de
movl $0x5, %edx
movq %rax, %rdi
callq 0x4410
movq %r15, %rdi
callq 0x4180
movq 0x2f734(%rip), %rdi     # 0x34fe8
leaq 0x2192b(%rip), %rsi     # 0x271e6
movl $0x1c, %edx
callq 0x4410
movzbl -0x30(%rbp), %r15d
movq 0x2f717(%rip), %rdi     # 0x34fe8
movl %r15d, %esi
callq 0x45f0
movq %rax, %rdi
callq 0x4180
leaq -0x408(%rbp), %rax
xorl %ecx, %ecx
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq -0x3d8(%rbp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq 0x2f6cc(%rip), %rdi     # 0x34fe8
leaq 0x218e0(%rip), %rsi     # 0x27203
movl $0x13, %edx
callq 0x4410
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq 0x2f6a6(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
addq %rsi, %rdx
leaq -0x130(%rbp), %rdi
callq 0x6ff2
leaq -0x130(%rbp), %rdi
leaq -0x410(%rbp), %rsi
leaq -0x4c(%rbp), %rdx
movl %r15d, %ecx
callq 0x1ddfe
movl %eax, -0x30(%rbp)
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x59ac
callq 0x4360
cmpl $0x0, -0x30(%rbp)
jns 0x59db
movq 0x2f62f(%rip), %rdi     # 0x34fe8
leaq 0x21857(%rip), %rsi     # 0x27217
movl $0x27, %edx
callq 0x4410
movq 0x2f617(%rip), %rdi     # 0x34fe8
callq 0x4180
jmp 0x5b2d
movq 0x2f606(%rip), %rdi     # 0x34fe8
leaq 0x21d2d(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f5ee(%rip), %rdi     # 0x34fe8
leaq 0x2183e(%rip), %rsi     # 0x2723f
movl $0x11, %edx
callq 0x4410
movq -0x3e8(%rbp), %rsi
movq 0x2f5cf(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f5bb(%rip), %rdi     # 0x34fe8
leaq 0x21ce2(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f5a3(%rip), %rdi     # 0x34fe8
leaq 0x21805(%rip), %rsi     # 0x27251
movl $0x17, %edx
callq 0x4410
movl -0x4c(%rbp), %esi
movq 0x2f588(%rip), %rdi     # 0x34fe8
callq 0x4640
movq %rax, %rdi
callq 0x4180
movq 0x2f574(%rip), %rdi     # 0x34fe8
leaq 0x217ee(%rip), %rsi     # 0x27269
movl $0x12, %edx
callq 0x4410
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq 0x2f54e(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
leaq -0x100(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x6ff2
leaq -0x110(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
leaq -0x48(%rbp), %rdx
movl %r15d, %ecx
callq 0x1ddfe
movl %eax, %r15d
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x5b04
callq 0x4360
testl %r15d, %r15d
jns 0x5b37
movq 0x2f4d8(%rip), %rdi     # 0x34fe8
leaq 0x21765(%rip), %rsi     # 0x2727c
movl $0x26, %edx
callq 0x4410
movq 0x2f4c0(%rip), %rdi     # 0x34fe8
callq 0x4180
movl $0x1, %edi
callq 0x4430
movq 0x2f4aa(%rip), %rdi     # 0x34fe8
leaq 0x21bd1(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f492(%rip), %rdi     # 0x34fe8
leaq 0x21746(%rip), %rsi     # 0x272a3
movl $0xf, %edx
callq 0x4410
movq -0x3b8(%rbp), %rsi
movq 0x2f473(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f45f(%rip), %rdi     # 0x34fe8
leaq 0x21b86(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f447(%rip), %rdi     # 0x34fe8
leaq 0x2170b(%rip), %rsi     # 0x272b3
movl $0x15, %edx
callq 0x4410
movl -0x48(%rbp), %esi
movq 0x2f42c(%rip), %rdi     # 0x34fe8
callq 0x4640
movq %rax, %rdi
callq 0x4180
leaq -0x8e0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0xdcbc
leaq 0x2f7d5(%rip), %rsi     # 0x353b8
leaq -0x638(%rbp), %rdi
callq 0x62d8
leaq 0x2f7c2(%rip), %rsi     # 0x353b8
leaq -0x410(%rbp), %rdi
callq 0x6488
movq $0x0, (%rax)
movq -0x3c8(%rbp), %rcx
movq $0x0, -0x40(%rbp)
leaq -0x3d8(%rbp), %rax
movq %rcx, -0x30(%rbp)
cmpq %rax, %rcx
jne 0x5c2f
xorl %ebx, %ebx
jmp 0x5e66
movl $0x1, %r15d
movl $0x0, -0x44(%rbp)
movq -0x30(%rbp), %rax
leaq 0x20(%rax), %rsi
leaq -0x540(%rbp), %rdi
leaq 0x2f766(%rip), %rdx     # 0x353b8
leaq -0x8e0(%rbp), %rcx
xorl %r8d, %r8d
callq 0xf958
leaq -0x638(%rbp), %rdi
leaq -0x540(%rbp), %rsi
movl -0x34(%rbp), %edx
callq 0x12d0a
movl %r15d, %eax
movq %rax, -0x80(%rbp)
movl $0xd1b71759, %ecx       # imm = 0xD1B71759
imulq %rcx, %rax
shrq $0x2d, %rax
imull $0x2710, %eax, %eax     # imm = 0x2710
movl $0x1, %ecx
subl %eax, %ecx
movq -0x4f8(%rbp), %rdx
movq -0x4e0(%rbp), %rax
subq -0x500(%rbp), %rdx
movq %rdx, -0xc8(%rbp)
subq -0x4e8(%rbp), %rax
movq %rax, -0xd0(%rbp)
addl %r15d, %ecx
cmpl $0x1, %ecx
jne 0x5cfa
movl $0x14, %edx
movq 0x2f312(%rip), %rdi     # 0x34fe8
leaq 0x215ec(%rip), %rsi     # 0x272c9
callq 0x4410
movq 0x2f2ff(%rip), %rdi     # 0x34fe8
movq -0x80(%rbp), %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
testl %ebx, %ebx
je 0x5e04
movl %r15d, %eax
xorl %edx, %edx
divl %ebx
testl %edx, %edx
jne 0x5e04
leaq -0x7c0(%rbp), %rdi
callq 0x4290
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
leaq -0x7b0(%rbp), %rdi
callq 0x4410
movq %rax, -0x78(%rbp)
movl $0x1, %edx
movq -0x78(%rbp), %rdi
leaq 0x2199d(%rip), %rsi     # 0x276e8
callq 0x4410
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x4250
movl $0x27, %edx
movq 0x2f27f(%rip), %rdi     # 0x34fe8
leaq 0x2156e(%rip), %rsi     # 0x272de
callq 0x4410
leaq -0x70(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x4590
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq 0x2f254(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5db3
callq 0x4360
leaq -0x70(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x4590
leaq -0x638(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x13a22
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5de5
callq 0x4360
leaq -0x7c0(%rbp), %rdi
movq 0x2f19d(%rip), %rsi     # 0x34f90
callq 0x42d0
leaq -0x740(%rbp), %rdi
callq 0x4110
movq -0xc8(%rbp), %rax
shrq $0x3, %rax
imull $0xb6db6db7, %eax, %eax # imm = 0xB6DB6DB7
addl %eax, -0x44(%rbp)
movq -0xd0(%rbp), %rcx
shrq $0x3, %rcx
movq -0x40(%rbp), %rax
addl %ecx, %eax
movq %rax, -0x40(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x11348
movq -0x30(%rbp), %rdi
callq 0x4420
movq %rax, %rcx
incl %r15d
leaq -0x3d8(%rbp), %rax
movq %rcx, -0x30(%rbp)
cmpq %rax, %rcx
jne 0x5c3c
movl -0x40(%rbp), %ebx
movl -0x44(%rbp), %eax
movq %rax, -0x40(%rbp)
leaq -0x638(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x13a22
movq 0x2f168(%rip), %rdi     # 0x34fe8
leaq 0x2147f(%rip), %rsi     # 0x27306
movl $0x16, %edx
callq 0x4410
movq -0x5d8(%rbp), %rsi
movq 0x2f149(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f135(%rip), %rdi     # 0x34fe8
leaq 0x21463(%rip), %rsi     # 0x2731d
movl $0x14, %edx
callq 0x4410
movq -0x610(%rbp), %rsi
subq -0x618(%rbp), %rsi
sarq $0x7, %rsi
movq 0x2f10b(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f0f7(%rip), %rdi     # 0x34fe8
leaq 0x2143a(%rip), %rsi     # 0x27332
movl $0x18, %edx
callq 0x4410
movq 0x2f0df(%rip), %rdi     # 0x34fe8
movq -0x40(%rbp), %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f0c7(%rip), %rdi     # 0x34fe8
leaq 0x21423(%rip), %rsi     # 0x2734b
movl $0x17, %edx
callq 0x4410
movq 0x2f0af(%rip), %rdi     # 0x34fe8
movq %rbx, %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
xorl %edi, %edi
callq 0x4430
jmp 0x5fa8
jmp 0x5f56
jmp 0x5f6f
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5f72
callq 0x4360
jmp 0x5f72
jmp 0x5f6f
movq %rax, %rbx
movq 0x2f017(%rip), %rsi     # 0x34f90
leaq -0x7c0(%rbp), %rdi
callq 0x42d0
leaq -0x740(%rbp), %rdi
callq 0x4110
jmp 0x5f98
jmp 0x5f95
movq %rax, %rbx
leaq -0x540(%rbp), %rdi
callq 0x11348
jmp 0x5fab
jmp 0x5fa8
movq %rax, %rbx
leaq -0x638(%rbp), %rdi
callq 0x12be0
jmp 0x5fbc
movq %rax, %rbx
leaq -0x8e0(%rbp), %rdi
callq 0xe008
jmp 0x6001
jmp 0x5ffe
jmp 0x5ffe
movq %rax, %rbx
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
jmp 0x5ff2
movq %rax, %rbx
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x6001
callq 0x4360
jmp 0x6001
movq %rax, %rbx
leaq -0x3e0(%rbp), %rdi
callq 0x6da8
leaq -0x410(%rbp), %rdi
callq 0x6da8
jmp 0x6052
jmp 0x604f
movq %rax, %rbx
movq -0x330(%rbp), %rdi
jmp 0x6043
jmp 0x604f
movq %rax, %rbx
movq -0x350(%rbp), %rdi
jmp 0x6043
jmp 0x604f
movq %rax, %rbx
movq -0x370(%rbp), %rdi
cmpq %r15, %rdi
je 0x6052
callq 0x4360
jmp 0x6052
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r13, %rdi
je 0x6068
callq 0x4360
jmp 0x6068
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
cmpq %r12, %rdi
je 0x607e
callq 0x4360
jmp 0x607e
movq %rax, %rbx
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
jne 0x627d
jmp 0x6287
jmp 0x6284
jmp 0x6284
movq %rax, %rbx
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x60bd
callq 0x4360
jmp 0x60bd
movq %rax, %rbx
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x60da
callq 0x4360
jmp 0x60da
movq %rax, %rbx
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0x60f7
callq 0x4360
jmp 0x60f7
movq %rax, %rbx
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rax
cmpq %rax, %rdi
je 0x6116
callq 0x4360
jmp 0x6116
jmp 0x6113
movq %rax, %rbx
movq -0x1d0(%rbp), %rdi
leaq -0x1c0(%rbp), %rax
cmpq %rax, %rdi
je 0x6133
callq 0x4360
jmp 0x6133
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
cmpq %rax, %rdi
je 0x6150
callq 0x4360
jmp 0x6150
movq %rax, %rbx
movq -0x210(%rbp), %rdi
leaq -0x200(%rbp), %rax
cmpq %rax, %rdi
je 0x616d
callq 0x4360
jmp 0x616d
movq %rax, %rbx
movq -0x230(%rbp), %rdi
leaq -0x220(%rbp), %rax
cmpq %rax, %rdi
je 0x618c
callq 0x4360
jmp 0x618c
jmp 0x6189
movq %rax, %rbx
movq -0x250(%rbp), %rdi
leaq -0x240(%rbp), %rax
cmpq %rax, %rdi
je 0x61a9
callq 0x4360
jmp 0x61a9
movq %rax, %rbx
movq -0x270(%rbp), %rdi
leaq -0x260(%rbp), %rax
cmpq %rax, %rdi
je 0x61c6
callq 0x4360
jmp 0x61c6
movq %rax, %rbx
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
cmpq %rax, %rdi
je 0x61e3
callq 0x4360
jmp 0x61e3
movq %rax, %rbx
movq -0x2b0(%rbp), %rdi
leaq -0x2a0(%rbp), %rax
cmpq %rax, %rdi
je 0x6202
callq 0x4360
jmp 0x6202
jmp 0x61ff
movq %rax, %rbx
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0x621f
callq 0x4360
jmp 0x621f
movq %rax, %rbx
movq -0x2f0(%rbp), %rdi
leaq -0x2e0(%rbp), %rax
cmpq %rax, %rdi
je 0x623c
callq 0x4360
jmp 0x623c
movq %rax, %rbx
movq -0x310(%rbp), %rdi
leaq -0x300(%rbp), %rax
cmpq %rax, %rdi
je 0x6259
callq 0x4360
jmp 0x6259
movq %rax, %rbx
movq -0x390(%rbp), %rdi
cmpq %r13, %rdi
je 0x6271
callq 0x4360
jmp 0x6271
jmp 0x626e
movq %rax, %rbx
movq -0x3b0(%rbp), %rdi
cmpq %r12, %rdi
je 0x6287
callq 0x4360
jmp 0x6287
movq %rax, %rbx
leaq -0x430(%rbp), %rdi
callq 0x6e3c
leaq -0x460(%rbp), %rdi
callq 0x6ebe
leaq -0x490(%rbp), %rdi
callq 0x6f28
leaq -0x4a8(%rbp), %r14
movq %r14, %rdi
callq 0x6e8a
movq -0x20(%r14), %rdi
leaq -0x4b8(%rbp), %rax
cmpq %rax, %rdi
je 0x62cf
callq 0x4360
movq %rbx, %rdi
callq 0x4670
nop