// File: /workspace/github_cpp_makefile_star2_O3/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 0x7efe
leaq -0x3a0(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x21f0b(%rip), %rsi     # 0x27020
leaq 0x21f31(%rip), %rdx     # 0x2704d
leaq -0x3b0(%rbp), %rdi
callq 0x70b8
leaq -0x4c8(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x7f64
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 0x70b8
leaq -0x300(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x225a2(%rip), %rdx     # 0x27717
leaq -0x310(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x2e0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22581(%rip), %rdx     # 0x27717
leaq -0x2f0(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x2c0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21e97(%rip), %rsi     # 0x2704e
leaq 0x21e9c(%rip), %rdx     # 0x2705a
leaq -0x2d0(%rbp), %rdi
callq 0x70b8
leaq -0x390(%rbp), %rdx
leaq -0x310(%rbp), %rcx
leaq -0x2f0(%rbp), %r8
leaq -0x2d0(%rbp), %r9
movq %r15, %rdi
movl $0x68, %esi
callq 0x7f7c
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 0x70b8
leaq -0x280(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x224ea(%rip), %rdx     # 0x27717
leaq -0x290(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x260(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x224c9(%rip), %rdx     # 0x27717
leaq -0x270(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x240(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21df9(%rip), %rsi     # 0x27068
leaq 0x21e27(%rip), %rdx     # 0x2709d
leaq -0x250(%rbp), %rdi
callq 0x70b8
leaq -0x2b0(%rbp), %rdx
leaq -0x290(%rbp), %rcx
leaq -0x270(%rbp), %r8
leaq -0x250(%rbp), %r9
movq %r15, %rdi
movl $0x6e, %esi
callq 0x7f7c
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 0x70b8
leaq -0x200(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21dc9(%rip), %rsi     # 0x270ae
leaq 0x21dc5(%rip), %rdx     # 0x270b1
leaq -0x210(%rbp), %rdi
callq 0x70b8
leaq -0x1e0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21dd8(%rip), %rsi     # 0x270e2
leaq 0x21dd2(%rip), %rdx     # 0x270e3
leaq -0x1f0(%rbp), %rdi
callq 0x70b8
leaq -0x1c0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21d83(%rip), %rsi     # 0x270b2
leaq 0x21dad(%rip), %rdx     # 0x270e3
leaq -0x1d0(%rbp), %rdi
callq 0x70b8
leaq -0x230(%rbp), %rdx
leaq -0x210(%rbp), %rcx
leaq -0x1f0(%rbp), %r8
leaq -0x1d0(%rbp), %r9
movq %r15, %rdi
movl $0x74, %esi
callq 0x7f7c
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 0x70b8
leaq -0x180(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22372(%rip), %rdx     # 0x27717
leaq -0x190(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x160(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x22351(%rip), %rdx     # 0x27717
leaq -0x170(%rbp), %rdi
movq %rdx, %rsi
callq 0x70b8
leaq -0x140(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x21d03(%rip), %rsi     # 0x270ea
leaq 0x21d1b(%rip), %rdx     # 0x27109
leaq -0x150(%rbp), %rdi
callq 0x70b8
leaq -0x1b0(%rbp), %rdx
leaq -0x190(%rbp), %rcx
leaq -0x170(%rbp), %r8
leaq -0x150(%rbp), %r9
movq %r15, %rdi
movl $0x38, %esi
callq 0x7f7c
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 0x89a4
movq -0x430(%rbp), %rax
movq -0x428(%rbp), %rcx
subq %rax, %rcx
cmpq $0x60, %rcx
je 0x55f8
movq 0x2f9eb(%rip), %rax     # 0x34fc8
movq (%rax), %rsi
leaq -0x4c8(%rbp), %rdi
movl $0x1, %edx
callq 0x8f46
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 0x701a
movq -0x430(%rbp), %rax
leaq -0x90(%rbp), %r13
movq %r13, -0x10(%r13)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
leaq -0xa0(%rbp), %rdi
callq 0x701a
movq -0x430(%rbp), %rax
leaq -0xe0(%rbp), %r12
movq %r12, -0x10(%r12)
movq 0x40(%rax), %rsi
movq 0x48(%rax), %rdx
addq %rsi, %rdx
leaq -0xf0(%rbp), %rdi
callq 0x701a
leaq -0x360(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x21a8c(%rip), %rsi     # 0x2710a
leaq 0x21a90(%rip), %rdx     # 0x27115
leaq -0x370(%rbp), %rdi
callq 0x70b8
leaq -0x4c8(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x8a5e
movq %rax, %rdi
callq 0x7e20
movl %eax, %ebx
movq -0x370(%rbp), %rdi
cmpq %r15, %rdi
je 0x56bf
callq 0x4360
leaq -0x340(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x2198a(%rip), %rsi     # 0x2705b
leaq 0x2198f(%rip), %rdx     # 0x27067
leaq -0x350(%rbp), %rdi
callq 0x70b8
leaq -0x4c8(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x8a5e
movb 0x4a(%rax), %al
movb %al, -0x34(%rbp)
movq -0x350(%rbp), %rdi
cmpq %r15, %rdi
je 0x570e
callq 0x4360
leaq -0x320(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x219c4(%rip), %rsi     # 0x270e4
leaq 0x219c2(%rip), %rdx     # 0x270e9
leaq -0x330(%rbp), %rdi
callq 0x70b8
leaq -0x4c8(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x8a5e
movb 0x4a(%rax), %al
movb %al, -0x30(%rbp)
movq -0x330(%rbp), %rdi
cmpq %r15, %rdi
je 0x575d
callq 0x4360
movq 0x2f884(%rip), %rdi     # 0x34fe8
movq (%rdi), %rax
movq -0x18(%rax), %rax
orl $0x1, 0x18(%rdi,%rax)
leaq 0x2199f(%rip), %rsi     # 0x27116
movl $0x16, %edx
callq 0x4410
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq 0x2f852(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f83e(%rip), %rdi     # 0x34fe8
leaq 0x2197c(%rip), %rsi     # 0x2712d
movl $0x20, %edx
callq 0x4410
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq 0x2f818(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f804(%rip), %rdi     # 0x34fe8
leaq 0x21963(%rip), %rsi     # 0x2714e
movl $0x1b, %edx
callq 0x4410
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq 0x2f7de(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq 0x2f7ca(%rip), %rdi     # 0x34fe8
leaq 0x21945(%rip), %rsi     # 0x2716a
movl $0x17, %edx
callq 0x4410
movb -0x34(%rbp), %al
xorb $0x1, %al
movzbl %al, %esi
movq 0x2f7aa(%rip), %r15     # 0x34fe8
movq %r15, %rdi
movl %esi, -0x34(%rbp)
callq 0x45f0
movq %rax, %rdi
callq 0x4180
testl %ebx, %ebx
jne 0x586b
leaq 0x21960(%rip), %rsi     # 0x271bc
movl $0x29, %edx
movq %r15, %rdi
callq 0x4410
jmp 0x58a8
movq 0x2f776(%rip), %rdi     # 0x34fe8
leaq 0x21909(%rip), %rsi     # 0x27182
movl $0x39, %edx
callq 0x4410
movl %ebx, %esi
movq 0x2f75c(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %r15
leaq 0x21843(%rip), %rsi     # 0x270de
movl $0x5, %edx
movq %rax, %rdi
callq 0x4410
movq %r15, %rdi
callq 0x4180
movq 0x2f731(%rip), %rdi     # 0x34fe8
leaq 0x21928(%rip), %rsi     # 0x271e6
movl $0x1c, %edx
callq 0x4410
movzbl -0x30(%rbp), %r15d
movq 0x2f714(%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 0x2f6c9(%rip), %rdi     # 0x34fe8
leaq 0x218dd(%rip), %rsi     # 0x27203
movl $0x13, %edx
callq 0x4410
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq 0x2f6a3(%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 0x701a
leaq -0x130(%rbp), %rdi
leaq -0x410(%rbp), %rsi
leaq -0x4c(%rbp), %rdx
movl %r15d, %ecx
callq 0x1dcce
movl %eax, -0x30(%rbp)
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x59af
callq 0x4360
cmpl $0x0, -0x30(%rbp)
jns 0x59de
movq 0x2f62c(%rip), %rdi     # 0x34fe8
leaq 0x21854(%rip), %rsi     # 0x27217
movl $0x27, %edx
callq 0x4410
movq 0x2f614(%rip), %rdi     # 0x34fe8
callq 0x4180
jmp 0x5b30
movq 0x2f603(%rip), %rdi     # 0x34fe8
leaq 0x21d2a(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f5eb(%rip), %rdi     # 0x34fe8
leaq 0x2183b(%rip), %rsi     # 0x2723f
movl $0x11, %edx
callq 0x4410
movq -0x3e8(%rbp), %rsi
movq 0x2f5cc(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f5b8(%rip), %rdi     # 0x34fe8
leaq 0x21cdf(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f5a0(%rip), %rdi     # 0x34fe8
leaq 0x21802(%rip), %rsi     # 0x27251
movl $0x17, %edx
callq 0x4410
movl -0x4c(%rbp), %esi
movq 0x2f585(%rip), %rdi     # 0x34fe8
callq 0x4640
movq %rax, %rdi
callq 0x4180
movq 0x2f571(%rip), %rdi     # 0x34fe8
leaq 0x217eb(%rip), %rsi     # 0x27269
movl $0x12, %edx
callq 0x4410
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq 0x2f54b(%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 0x701a
leaq -0x110(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
leaq -0x48(%rbp), %rdx
movl %r15d, %ecx
callq 0x1dcce
movl %eax, %r15d
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x5b07
callq 0x4360
testl %r15d, %r15d
jns 0x5b3a
movq 0x2f4d5(%rip), %rdi     # 0x34fe8
leaq 0x21762(%rip), %rsi     # 0x2727c
movl $0x26, %edx
callq 0x4410
movq 0x2f4bd(%rip), %rdi     # 0x34fe8
callq 0x4180
movl $0x1, %edi
callq 0x4430
movq 0x2f4a7(%rip), %rdi     # 0x34fe8
leaq 0x21bce(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f48f(%rip), %rdi     # 0x34fe8
leaq 0x21743(%rip), %rsi     # 0x272a3
movl $0xf, %edx
callq 0x4410
movq -0x3b8(%rbp), %rsi
movq 0x2f470(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f45c(%rip), %rdi     # 0x34fe8
leaq 0x21b83(%rip), %rsi     # 0x27716
movl $0x1, %edx
callq 0x4410
movq 0x2f444(%rip), %rdi     # 0x34fe8
leaq 0x21708(%rip), %rsi     # 0x272b3
movl $0x15, %edx
callq 0x4410
movl -0x48(%rbp), %esi
movq 0x2f429(%rip), %rdi     # 0x34fe8
callq 0x4640
movq %rax, %rdi
callq 0x4180
leaq -0x8e0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0xdc34
leaq 0x2f7d2(%rip), %rsi     # 0x353b8
leaq -0x638(%rbp), %rdi
callq 0x62da
leaq 0x2f7bf(%rip), %rsi     # 0x353b8
leaq -0x410(%rbp), %rdi
callq 0x648a
movq $0x0, (%rax)
movq -0x3c8(%rbp), %rcx
movq $0x0, -0x40(%rbp)
leaq -0x3d8(%rbp), %rax
movq %rcx, -0x30(%rbp)
cmpq %rax, %rcx
jne 0x5c32
xorl %ebx, %ebx
jmp 0x5e69
movl $0x1, %r15d
movl $0x0, -0x44(%rbp)
movq -0x30(%rbp), %rax
leaq 0x20(%rax), %rsi
leaq -0x540(%rbp), %rdi
leaq 0x2f763(%rip), %rdx     # 0x353b8
leaq -0x8e0(%rbp), %rcx
xorl %r8d, %r8d
callq 0xf880
leaq -0x638(%rbp), %rdi
leaq -0x540(%rbp), %rsi
movl -0x34(%rbp), %edx
callq 0x12bfa
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 0x5cfd
movl $0x14, %edx
movq 0x2f30f(%rip), %rdi     # 0x34fe8
leaq 0x215e9(%rip), %rsi     # 0x272c9
callq 0x4410
movq 0x2f2fc(%rip), %rdi     # 0x34fe8
movq -0x80(%rbp), %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
testl %ebx, %ebx
je 0x5e07
movl %r15d, %eax
xorl %edx, %edx
divl %ebx
testl %edx, %edx
jne 0x5e07
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 0x2199a(%rip), %rsi     # 0x276e8
callq 0x4410
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x4250
movl $0x27, %edx
movq 0x2f27c(%rip), %rdi     # 0x34fe8
leaq 0x2156b(%rip), %rsi     # 0x272de
callq 0x4410
leaq -0x70(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x4590
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq 0x2f251(%rip), %rdi     # 0x34fe8
callq 0x4410
movq %rax, %rdi
callq 0x4180
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5db6
callq 0x4360
leaq -0x70(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x4590
leaq -0x638(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x13926
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5de8
callq 0x4360
leaq -0x7c0(%rbp), %rdi
movq 0x2f19a(%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 0x1126c
movq -0x30(%rbp), %rdi
callq 0x4420
movq %rax, %rcx
incl %r15d
leaq -0x3d8(%rbp), %rax
movq %rcx, -0x30(%rbp)
cmpq %rax, %rcx
jne 0x5c3f
movl -0x40(%rbp), %ebx
movl -0x44(%rbp), %eax
movq %rax, -0x40(%rbp)
leaq -0x638(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x13926
movq 0x2f165(%rip), %rdi     # 0x34fe8
leaq 0x2147c(%rip), %rsi     # 0x27306
movl $0x16, %edx
callq 0x4410
movq -0x5d8(%rbp), %rsi
movq 0x2f146(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f132(%rip), %rdi     # 0x34fe8
leaq 0x21460(%rip), %rsi     # 0x2731d
movl $0x14, %edx
callq 0x4410
movq -0x610(%rbp), %rsi
subq -0x618(%rbp), %rsi
sarq $0x7, %rsi
movq 0x2f108(%rip), %rdi     # 0x34fe8
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f0f4(%rip), %rdi     # 0x34fe8
leaq 0x21437(%rip), %rsi     # 0x27332
movl $0x18, %edx
callq 0x4410
movq 0x2f0dc(%rip), %rdi     # 0x34fe8
movq -0x40(%rbp), %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
movq 0x2f0c4(%rip), %rdi     # 0x34fe8
leaq 0x21420(%rip), %rsi     # 0x2734b
movl $0x17, %edx
callq 0x4410
movq 0x2f0ac(%rip), %rdi     # 0x34fe8
movq %rbx, %rsi
callq 0x4250
movq %rax, %rdi
callq 0x4180
xorl %edi, %edi
callq 0x4430
jmp 0x5fab
jmp 0x5f59
jmp 0x5f72
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5f75
callq 0x4360
jmp 0x5f75
jmp 0x5f72
movq %rax, %rbx
movq 0x2f014(%rip), %rsi     # 0x34f90
leaq -0x7c0(%rbp), %rdi
callq 0x42d0
leaq -0x740(%rbp), %rdi
callq 0x4110
jmp 0x5f9b
jmp 0x5f98
movq %rax, %rbx
leaq -0x540(%rbp), %rdi
callq 0x1126c
jmp 0x5fae
jmp 0x5fab
movq %rax, %rbx
leaq -0x638(%rbp), %rdi
callq 0x12ac8
jmp 0x5fbf
movq %rax, %rbx
leaq -0x8e0(%rbp), %rdi
callq 0xdfb4
jmp 0x6004
jmp 0x6001
jmp 0x6001
movq %rax, %rbx
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
jmp 0x5ff5
movq %rax, %rbx
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x6004
callq 0x4360
jmp 0x6004
movq %rax, %rbx
leaq -0x3e0(%rbp), %rdi
callq 0x6dc6
leaq -0x410(%rbp), %rdi
callq 0x6dc6
jmp 0x6055
jmp 0x6052
movq %rax, %rbx
movq -0x330(%rbp), %rdi
jmp 0x6046
jmp 0x6052
movq %rax, %rbx
movq -0x350(%rbp), %rdi
jmp 0x6046
jmp 0x6052
movq %rax, %rbx
movq -0x370(%rbp), %rdi
cmpq %r15, %rdi
je 0x6055
callq 0x4360
jmp 0x6055
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r12, %rdi
je 0x606b
callq 0x4360
jmp 0x606b
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
cmpq %r13, %rdi
je 0x6081
callq 0x4360
jmp 0x6081
movq %rax, %rbx
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
jne 0x6280
jmp 0x628a
jmp 0x6287
jmp 0x6287
movq %rax, %rbx
movq -0x150(%rbp), %rdi
leaq -0x140(%rbp), %rax
cmpq %rax, %rdi
je 0x60c0
callq 0x4360
jmp 0x60c0
movq %rax, %rbx
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0x60dd
callq 0x4360
jmp 0x60dd
movq %rax, %rbx
movq -0x190(%rbp), %rdi
leaq -0x180(%rbp), %rax
cmpq %rax, %rdi
je 0x60fa
callq 0x4360
jmp 0x60fa
movq %rax, %rbx
movq -0x1b0(%rbp), %rdi
leaq -0x1a0(%rbp), %rax
cmpq %rax, %rdi
je 0x6119
callq 0x4360
jmp 0x6119
jmp 0x6116
movq %rax, %rbx
movq -0x1d0(%rbp), %rdi
leaq -0x1c0(%rbp), %rax
cmpq %rax, %rdi
je 0x6136
callq 0x4360
jmp 0x6136
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
cmpq %rax, %rdi
je 0x6153
callq 0x4360
jmp 0x6153
movq %rax, %rbx
movq -0x210(%rbp), %rdi
leaq -0x200(%rbp), %rax
cmpq %rax, %rdi
je 0x6170
callq 0x4360
jmp 0x6170
movq %rax, %rbx
movq -0x230(%rbp), %rdi
leaq -0x220(%rbp), %rax
cmpq %rax, %rdi
je 0x618f
callq 0x4360
jmp 0x618f
jmp 0x618c
movq %rax, %rbx
movq -0x250(%rbp), %rdi
leaq -0x240(%rbp), %rax
cmpq %rax, %rdi
je 0x61ac
callq 0x4360
jmp 0x61ac
movq %rax, %rbx
movq -0x270(%rbp), %rdi
leaq -0x260(%rbp), %rax
cmpq %rax, %rdi
je 0x61c9
callq 0x4360
jmp 0x61c9
movq %rax, %rbx
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
cmpq %rax, %rdi
je 0x61e6
callq 0x4360
jmp 0x61e6
movq %rax, %rbx
movq -0x2b0(%rbp), %rdi
leaq -0x2a0(%rbp), %rax
cmpq %rax, %rdi
je 0x6205
callq 0x4360
jmp 0x6205
jmp 0x6202
movq %rax, %rbx
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0x6222
callq 0x4360
jmp 0x6222
movq %rax, %rbx
movq -0x2f0(%rbp), %rdi
leaq -0x2e0(%rbp), %rax
cmpq %rax, %rdi
je 0x623f
callq 0x4360
jmp 0x623f
movq %rax, %rbx
movq -0x310(%rbp), %rdi
leaq -0x300(%rbp), %rax
cmpq %rax, %rdi
je 0x625c
callq 0x4360
jmp 0x625c
movq %rax, %rbx
movq -0x390(%rbp), %rdi
cmpq %r13, %rdi
je 0x6274
callq 0x4360
jmp 0x6274
jmp 0x6271
movq %rax, %rbx
movq -0x3b0(%rbp), %rdi
cmpq %r12, %rdi
je 0x628a
callq 0x4360
jmp 0x628a
movq %rax, %rbx
leaq -0x430(%rbp), %rdi
callq 0x6e5a
leaq -0x460(%rbp), %rdi
callq 0x6ee6
leaq -0x490(%rbp), %rdi
callq 0x6f50
leaq -0x4a8(%rbp), %r14
movq %r14, %rdi
callq 0x6eb2
movq -0x20(%r14), %rdi
leaq -0x4b8(%rbp), %rax
cmpq %rax, %rdi
je 0x62d2
callq 0x4360
movq %rbx, %rdi
callq 0x4670