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

    conf::Config config;
    config("usage: 1g-threshold [OPTION...] WORDLIST VOCAB_INIT VOCAB_FINAL\n")
      ('h', "help", "", "", "display help")
      ('i', "threshold-increment=FLOAT", "arg", "1.0", "Threshold increment for each iteration, DEFAULT: 1.0")
      ('m', "min-length=INT", "arg", "2", "Minimum length of subwords to remove, DEFAULT: 2")
      ('v', "vocab-size=INT", "arg must", "", "Target vocabulary size")
      ('s', "stop-list=STRING", "arg", "", "Text file containing subwords that should not be removed")
      ('f', "forward-backward", "", "", "Use Forward-backward segmentation instead of Viterbi")
      ('8', "utf-8", "", "", "Utf-8 character encoding in use");
    config.default_parse(argc, argv);
    if (config.arguments.size() != 3) config.print_help(stderr, 1);

    flt_type subword_min_lp = -25.0;
    string wordlist_fname = config.arguments[0];
    string vocab_fname = config.arguments[1];
    string out_vocab_fname = config.arguments[2];
    float threshold_increment = config["threshold-increment"].get_float();
    unsigned int min_removal_length = config["min-length"].get_int();
    unsigned int target_vocab_size = config["vocab-size"].get_int();
    bool enable_forward_backward = config["forward-backward"].specified;
    bool utf8_encoding = config["utf-8"].specified;

    set<string> stoplist;
    if (config["stop-list"].specified) {
        vector<string> stopstrings;
        Unigrams::read_sents(config["stop-list"].get_str(), stopstrings);
        stoplist.insert(stopstrings.begin(), stopstrings.end());
    }

    cerr << setprecision(15) << std::boolalpha;
    cerr << "parameters, wordlist: " << wordlist_fname << endl;
    cerr << "parameters, initial vocabulary: " << vocab_fname << endl;
    cerr << "parameters, final vocabulary: " << out_vocab_fname << endl;
    cerr << "parameters, threshold increment: " << threshold_increment << endl;
    cerr << "parameters, minimum length for subwords to remove: " << min_removal_length << endl;
    if (stoplist.size() > 0)
        cerr << "parameters, stoplist with " << stoplist.size() << " subwords" << endl;
    cerr << "parameters, target vocab size: " << target_vocab_size << endl;
    cerr << "parameters, use forward-backward: " << enable_forward_backward << endl;
    cerr << "parameters, utf-8 encoding: " << utf8_encoding << endl;

    int maxlen, word_maxlen;
    set<string> short_subwords;
    map<string, flt_type> vocab;
    map<string, flt_type> freqs;
    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" << "size: " << vocab.size() << endl;
    cerr << "\t" << "maximum string length: " << maxlen << endl;
    find_short_factors(vocab, short_subwords, min_removal_length, utf8_encoding);

    set<string> stop_union;
    set_union(stoplist.begin(), stoplist.end(),
              short_subwords.begin(), short_subwords.end(),
              inserter(stop_union, stop_union.begin()));
    stoplist = stop_union;

    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;

    Unigrams ug;
    if (enable_forward_backward)
        ug.set_segmentation_method(forward_backward);
    else
        ug.set_segmentation_method(viterbi);
    ug.set_utf8(utf8_encoding);

    flt_type cost = ug.resegment_words(words, vocab, freqs);
    cerr << endl << "Initial likelihood: " << cost << endl;

    flt_type threshold_value = 0.0;
    while (target_vocab_size > 0 && vocab.size() > target_vocab_size) {
        threshold_value += threshold_increment;
        ug.cutoff(freqs, threshold_value, stoplist, min_removal_length);
        cerr << "\tthreshold: " << threshold_value << "\t" << "vocabulary size: " << freqs.size() << endl;
        vocab = freqs;
        Unigrams::freqs_to_logprobs(vocab);
        assert_factors(vocab, stoplist, subword_min_lp);
        cost = ug.resegment_words(words, vocab, freqs);
        cerr << "likelihood: " << cost << endl;
    }

    Unigrams::write_vocab(out_vocab_fname, vocab);
    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd70, %rsp            # imm = 0xD70
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0xfca0
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
callq 0x5710
movq -0x9a8(%rbp), %rdx
leaq 0x640ac(%rip), %rsi     # 0x6a012
leaq -0xe8(%rbp), %rdi
callq 0x5560
jmp 0x5f74
leaq -0xc8(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0xfd10
movq %rax, -0x9b0(%rbp)
jmp 0x5f90
leaq -0x121(%rbp), %rdi
movq %rdi, -0x9b8(%rbp)
callq 0x5710
movq -0x9b8(%rbp), %rdx
leaq 0x640aa(%rip), %rsi     # 0x6a05b
leaq -0x120(%rbp), %rdi
callq 0x5560
jmp 0x5fbf
leaq -0x149(%rbp), %rdi
movq %rdi, -0x9c0(%rbp)
callq 0x5710
movq -0x9c0(%rbp), %rdx
leaq 0x6475f(%rip), %rsi     # 0x6a73f
leaq -0x148(%rbp), %rdi
callq 0x5560
jmp 0x5fee
leaq -0x171(%rbp), %rdi
movq %rdi, -0x9c8(%rbp)
callq 0x5710
movq -0x9c8(%rbp), %rdx
leaq 0x64730(%rip), %rsi     # 0x6a73f
leaq -0x170(%rbp), %rdi
callq 0x5560
jmp 0x601d
leaq -0x199(%rbp), %rdi
movq %rdi, -0x9d0(%rbp)
callq 0x5710
movq -0x9d0(%rbp), %rdx
leaq 0x64015(%rip), %rsi     # 0x6a053
leaq -0x198(%rbp), %rdi
callq 0x5560
jmp 0x604c
movq -0x9b0(%rbp), %rdi
movl $0x68, %esi
leaq -0x120(%rbp), %rdx
leaq -0x148(%rbp), %rcx
leaq -0x170(%rbp), %r8
leaq -0x198(%rbp), %r9
callq 0xfd40
movq %rax, -0x9d8(%rbp)
jmp 0x6082
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0x9e0(%rbp)
callq 0x5710
movq -0x9e0(%rbp), %rdx
leaq 0x63fbd(%rip), %rsi     # 0x6a060
leaq -0x1c0(%rbp), %rdi
callq 0x5560
jmp 0x60b1
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0x9e8(%rbp)
callq 0x5710
movq -0x9e8(%rbp), %rdx
leaq 0x63fa8(%rip), %rsi     # 0x6a07a
leaq -0x1e8(%rbp), %rdi
callq 0x5560
jmp 0x60e0
leaq -0x211(%rbp), %rdi
movq %rdi, -0x9f0(%rbp)
callq 0x5710
movq -0x9f0(%rbp), %rdx
leaq 0x63fae(%rip), %rsi     # 0x6a0af
leaq -0x210(%rbp), %rdi
callq 0x5560
jmp 0x610f
leaq -0x239(%rbp), %rdi
movq %rdi, -0x9f8(%rbp)
callq 0x5710
movq -0x9f8(%rbp), %rdx
leaq 0x63f4e(%rip), %rsi     # 0x6a07e
leaq -0x238(%rbp), %rdi
callq 0x5560
jmp 0x613e
movq -0x9d8(%rbp), %rdi
movl $0x69, %esi
leaq -0x1c0(%rbp), %rdx
leaq -0x1e8(%rbp), %rcx
leaq -0x210(%rbp), %r8
leaq -0x238(%rbp), %r9
callq 0xfd40
movq %rax, -0xa00(%rbp)
jmp 0x6174
leaq -0x261(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x5710
movq -0xa08(%rbp), %rdx
leaq 0x63f1e(%rip), %rsi     # 0x6a0b3
leaq -0x260(%rbp), %rdi
callq 0x5560
jmp 0x61a3
leaq -0x289(%rbp), %rdi
movq %rdi, -0xa10(%rbp)
callq 0x5710
movq -0xa10(%rbp), %rdx
leaq 0x63eb6(%rip), %rsi     # 0x6a07a
leaq -0x288(%rbp), %rdi
callq 0x5560
jmp 0x61d2
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0xa18(%rbp)
callq 0x5710
movq -0xa18(%rbp), %rdx
leaq 0x63efe(%rip), %rsi     # 0x6a0f1
leaq -0x2b0(%rbp), %rdi
callq 0x5560
jmp 0x6201
leaq -0x2d9(%rbp), %rdi
movq %rdi, -0xa20(%rbp)
callq 0x5710
movq -0xa20(%rbp), %rdx
leaq 0x63ea0(%rip), %rsi     # 0x6a0c2
leaq -0x2d8(%rbp), %rdi
callq 0x5560
jmp 0x6230
movq -0xa00(%rbp), %rdi
movl $0x6d, %esi
leaq -0x260(%rbp), %rdx
leaq -0x288(%rbp), %rcx
leaq -0x2b0(%rbp), %r8
leaq -0x2d8(%rbp), %r9
callq 0xfd40
movq %rax, -0xa28(%rbp)
jmp 0x6266
leaq -0x301(%rbp), %rdi
movq %rdi, -0xa30(%rbp)
callq 0x5710
movq -0xa30(%rbp), %rdx
leaq 0x63e6c(%rip), %rsi     # 0x6a0f3
leaq -0x300(%rbp), %rdi
callq 0x5560
jmp 0x6295
leaq -0x329(%rbp), %rdi
movq %rdi, -0xa38(%rbp)
callq 0x5710
movq -0xa38(%rbp), %rdx
leaq 0x63e4c(%rip), %rsi     # 0x6a102
leaq -0x328(%rbp), %rdi
callq 0x5560
jmp 0x62c4
leaq -0x351(%rbp), %rdi
movq %rdi, -0xa40(%rbp)
callq 0x5710
movq -0xa40(%rbp), %rdx
leaq 0x6445a(%rip), %rsi     # 0x6a73f
leaq -0x350(%rbp), %rdi
callq 0x5560
jmp 0x62f3
leaq -0x379(%rbp), %rdi
movq %rdi, -0xa48(%rbp)
callq 0x5710
movq -0xa48(%rbp), %rdx
leaq 0x63df7(%rip), %rsi     # 0x6a10b
leaq -0x378(%rbp), %rdi
callq 0x5560
jmp 0x6322
movq -0xa28(%rbp), %rdi
movl $0x76, %esi
leaq -0x300(%rbp), %rdx
leaq -0x328(%rbp), %rcx
leaq -0x350(%rbp), %r8
leaq -0x378(%rbp), %r9
callq 0xfd40
movq %rax, -0xa50(%rbp)
jmp 0x6358
leaq -0x3a1(%rbp), %rdi
movq %rdi, -0xa58(%rbp)
callq 0x5710
movq -0xa58(%rbp), %rdx
leaq 0x63da9(%rip), %rsi     # 0x6a122
leaq -0x3a0(%rbp), %rdi
callq 0x5560
jmp 0x6387
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0xa60(%rbp)
callq 0x5710
movq -0xa60(%rbp), %rdx
leaq 0x63cd2(%rip), %rsi     # 0x6a07a
leaq -0x3c8(%rbp), %rdi
callq 0x5560
jmp 0x63b6
leaq -0x3f1(%rbp), %rdi
movq %rdi, -0xa68(%rbp)
callq 0x5710
movq -0xa68(%rbp), %rdx
leaq 0x64368(%rip), %rsi     # 0x6a73f
leaq -0x3f0(%rbp), %rdi
callq 0x5560
jmp 0x63e5
leaq -0x419(%rbp), %rdi
movq %rdi, -0xa70(%rbp)
callq 0x5710
movq -0xa70(%rbp), %rdx
leaq 0x63d2d(%rip), %rsi     # 0x6a133
leaq -0x418(%rbp), %rdi
callq 0x5560
jmp 0x6414
movq -0xa50(%rbp), %rdi
movl $0x73, %esi
leaq -0x3a0(%rbp), %rdx
leaq -0x3c8(%rbp), %rcx
leaq -0x3f0(%rbp), %r8
leaq -0x418(%rbp), %r9
callq 0xfd40
movq %rax, -0xa78(%rbp)
jmp 0x644a
leaq -0x441(%rbp), %rdi
movq %rdi, -0xa80(%rbp)
callq 0x5710
movq -0xa80(%rbp), %rdx
leaq 0x63d01(%rip), %rsi     # 0x6a16c
leaq -0x440(%rbp), %rdi
callq 0x5560
jmp 0x6479
leaq -0x469(%rbp), %rdi
movq %rdi, -0xa88(%rbp)
callq 0x5710
movq -0xa88(%rbp), %rdx
leaq 0x642a5(%rip), %rsi     # 0x6a73f
leaq -0x468(%rbp), %rdi
callq 0x5560
jmp 0x64a8
leaq -0x491(%rbp), %rdi
movq %rdi, -0xa90(%rbp)
callq 0x5710
movq -0xa90(%rbp), %rdx
leaq 0x64276(%rip), %rsi     # 0x6a73f
leaq -0x490(%rbp), %rdi
callq 0x5560
jmp 0x64d7
leaq -0x4b9(%rbp), %rdi
movq %rdi, -0xa98(%rbp)
callq 0x5710
movq -0xa98(%rbp), %rdx
leaq 0x63c85(%rip), %rsi     # 0x6a17d
leaq -0x4b8(%rbp), %rdi
callq 0x5560
jmp 0x6506
movq -0xa78(%rbp), %rdi
movl $0x66, %esi
leaq -0x440(%rbp), %rdx
leaq -0x468(%rbp), %rcx
leaq -0x490(%rbp), %r8
leaq -0x4b8(%rbp), %r9
callq 0xfd40
movq %rax, -0xaa0(%rbp)
jmp 0x653c
leaq -0x4e1(%rbp), %rdi
movq %rdi, -0xaa8(%rbp)
callq 0x5710
movq -0xaa8(%rbp), %rdx
leaq 0x63c55(%rip), %rsi     # 0x6a1b2
leaq -0x4e0(%rbp), %rdi
callq 0x5560
jmp 0x656b
leaq -0x509(%rbp), %rdi
movq %rdi, -0xab0(%rbp)
callq 0x5710
movq -0xab0(%rbp), %rdx
leaq 0x641b3(%rip), %rsi     # 0x6a73f
leaq -0x508(%rbp), %rdi
callq 0x5560
jmp 0x659a
leaq -0x531(%rbp), %rdi
movq %rdi, -0xab8(%rbp)
callq 0x5710
movq -0xab8(%rbp), %rdx
leaq 0x64184(%rip), %rsi     # 0x6a73f
leaq -0x530(%rbp), %rdi
callq 0x5560
jmp 0x65c9
leaq -0x559(%rbp), %rdi
movq %rdi, -0xac0(%rbp)
callq 0x5710
movq -0xac0(%rbp), %rdx
leaq 0x63bce(%rip), %rsi     # 0x6a1b8
leaq -0x558(%rbp), %rdi
callq 0x5560
jmp 0x65f8
movq -0xaa0(%rbp), %rdi
movl $0x38, %esi
leaq -0x4e0(%rbp), %rdx
leaq -0x508(%rbp), %rcx
leaq -0x530(%rbp), %r8
leaq -0x558(%rbp), %r9
callq 0xfd40
jmp 0x6627
leaq -0x558(%rbp), %rdi
callq 0x5848
leaq -0x559(%rbp), %rdi
callq 0x5430
leaq -0x530(%rbp), %rdi
callq 0x5848
leaq -0x531(%rbp), %rdi
callq 0x5430
leaq -0x508(%rbp), %rdi
callq 0x5848
leaq -0x509(%rbp), %rdi
callq 0x5430
leaq -0x4e0(%rbp), %rdi
callq 0x5848
leaq -0x4e1(%rbp), %rdi
callq 0x5430
leaq -0x4b8(%rbp), %rdi
callq 0x5848
leaq -0x4b9(%rbp), %rdi
callq 0x5430
leaq -0x490(%rbp), %rdi
callq 0x5848
leaq -0x491(%rbp), %rdi
callq 0x5430
leaq -0x468(%rbp), %rdi
callq 0x5848
leaq -0x469(%rbp), %rdi
callq 0x5430
leaq -0x440(%rbp), %rdi
callq 0x5848
leaq -0x441(%rbp), %rdi
callq 0x5430
leaq -0x418(%rbp), %rdi
callq 0x5848
leaq -0x419(%rbp), %rdi
callq 0x5430
leaq -0x3f0(%rbp), %rdi
callq 0x5848
leaq -0x3f1(%rbp), %rdi
callq 0x5430
leaq -0x3c8(%rbp), %rdi
callq 0x5848
leaq -0x3c9(%rbp), %rdi
callq 0x5430
leaq -0x3a0(%rbp), %rdi
callq 0x5848
leaq -0x3a1(%rbp), %rdi
callq 0x5430
leaq -0x378(%rbp), %rdi
callq 0x5848
leaq -0x379(%rbp), %rdi
callq 0x5430
leaq -0x350(%rbp), %rdi
callq 0x5848
leaq -0x351(%rbp), %rdi
callq 0x5430
leaq -0x328(%rbp), %rdi
callq 0x5848
leaq -0x329(%rbp), %rdi
callq 0x5430
leaq -0x300(%rbp), %rdi
callq 0x5848
leaq -0x301(%rbp), %rdi
callq 0x5430
leaq -0x2d8(%rbp), %rdi
callq 0x5848
leaq -0x2d9(%rbp), %rdi
callq 0x5430
leaq -0x2b0(%rbp), %rdi
callq 0x5848
leaq -0x2b1(%rbp), %rdi
callq 0x5430
leaq -0x288(%rbp), %rdi
callq 0x5848
leaq -0x289(%rbp), %rdi
callq 0x5430
leaq -0x260(%rbp), %rdi
callq 0x5848
leaq -0x261(%rbp), %rdi
callq 0x5430
leaq -0x238(%rbp), %rdi
callq 0x5848
leaq -0x239(%rbp), %rdi
callq 0x5430
leaq -0x210(%rbp), %rdi
callq 0x5848
leaq -0x211(%rbp), %rdi
callq 0x5430
leaq -0x1e8(%rbp), %rdi
callq 0x5848
leaq -0x1e9(%rbp), %rdi
callq 0x5430
leaq -0x1c0(%rbp), %rdi
callq 0x5848
leaq -0x1c1(%rbp), %rdi
callq 0x5430
leaq -0x198(%rbp), %rdi
callq 0x5848
leaq -0x199(%rbp), %rdi
callq 0x5430
leaq -0x170(%rbp), %rdi
callq 0x5848
leaq -0x171(%rbp), %rdi
callq 0x5430
leaq -0x148(%rbp), %rdi
callq 0x5848
leaq -0x149(%rbp), %rdi
callq 0x5430
leaq -0x120(%rbp), %rdi
callq 0x5848
leaq -0x121(%rbp), %rdi
callq 0x5430
leaq -0xe8(%rbp), %rdi
callq 0x5848
leaq -0xe9(%rbp), %rdi
callq 0x5430
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0xc8(%rbp), %rdi
callq 0x10b90
jmp 0x68f4
leaq -0xc8(%rbp), %rdi
addq $0x98, %rdi
callq 0x87a0
cmpq $0x3, %rax
je 0x6f4c
movq 0x926a8(%rip), %rax     # 0x98fc0
movq (%rax), %rsi
leaq -0xc8(%rbp), %rdi
movl $0x1, %edx
callq 0x11350
jmp 0x692e
jmp 0x6f4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6f24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6f18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6f0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6ef4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6edc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6ec4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6eb8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6eac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e94
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6e04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6df8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6dec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6dd4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6dbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6da4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6ce4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cd8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6ccc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cb4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c9c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x5848
leaq -0x559(%rbp), %rdi
callq 0x5430
leaq -0x530(%rbp), %rdi
callq 0x5848
leaq -0x531(%rbp), %rdi
callq 0x5430
leaq -0x508(%rbp), %rdi
callq 0x5848
leaq -0x509(%rbp), %rdi
callq 0x5430
leaq -0x4e0(%rbp), %rdi
callq 0x5848
leaq -0x4e1(%rbp), %rdi
callq 0x5430
leaq -0x4b8(%rbp), %rdi
callq 0x5848
leaq -0x4b9(%rbp), %rdi
callq 0x5430
leaq -0x490(%rbp), %rdi
callq 0x5848
leaq -0x491(%rbp), %rdi
callq 0x5430
leaq -0x468(%rbp), %rdi
callq 0x5848
leaq -0x469(%rbp), %rdi
callq 0x5430
leaq -0x440(%rbp), %rdi
callq 0x5848
leaq -0x441(%rbp), %rdi
callq 0x5430
leaq -0x418(%rbp), %rdi
callq 0x5848
leaq -0x419(%rbp), %rdi
callq 0x5430
leaq -0x3f0(%rbp), %rdi
callq 0x5848
leaq -0x3f1(%rbp), %rdi
callq 0x5430
leaq -0x3c8(%rbp), %rdi
callq 0x5848
leaq -0x3c9(%rbp), %rdi
callq 0x5430
leaq -0x3a0(%rbp), %rdi
callq 0x5848
leaq -0x3a1(%rbp), %rdi
callq 0x5430
leaq -0x378(%rbp), %rdi
callq 0x5848
leaq -0x379(%rbp), %rdi
callq 0x5430
leaq -0x350(%rbp), %rdi
callq 0x5848
leaq -0x351(%rbp), %rdi
callq 0x5430
leaq -0x328(%rbp), %rdi
callq 0x5848
leaq -0x329(%rbp), %rdi
callq 0x5430
leaq -0x300(%rbp), %rdi
callq 0x5848
leaq -0x301(%rbp), %rdi
callq 0x5430
leaq -0x2d8(%rbp), %rdi
callq 0x5848
leaq -0x2d9(%rbp), %rdi
callq 0x5430
leaq -0x2b0(%rbp), %rdi
callq 0x5848
leaq -0x2b1(%rbp), %rdi
callq 0x5430
leaq -0x288(%rbp), %rdi
callq 0x5848
leaq -0x289(%rbp), %rdi
callq 0x5430
leaq -0x260(%rbp), %rdi
callq 0x5848
leaq -0x261(%rbp), %rdi
callq 0x5430
leaq -0x238(%rbp), %rdi
callq 0x5848
leaq -0x239(%rbp), %rdi
callq 0x5430
leaq -0x210(%rbp), %rdi
callq 0x5848
leaq -0x211(%rbp), %rdi
callq 0x5430
leaq -0x1e8(%rbp), %rdi
callq 0x5848
leaq -0x1e9(%rbp), %rdi
callq 0x5430
leaq -0x1c0(%rbp), %rdi
callq 0x5848
leaq -0x1c1(%rbp), %rdi
callq 0x5430
leaq -0x198(%rbp), %rdi
callq 0x5848
leaq -0x199(%rbp), %rdi
callq 0x5430
leaq -0x170(%rbp), %rdi
callq 0x5848
leaq -0x171(%rbp), %rdi
callq 0x5430
leaq -0x148(%rbp), %rdi
callq 0x5848
leaq -0x149(%rbp), %rdi
callq 0x5430
leaq -0x120(%rbp), %rdi
callq 0x5848
leaq -0x121(%rbp), %rdi
callq 0x5430
leaq -0xe8(%rbp), %rdi
callq 0x5848
leaq -0xe9(%rbp), %rdi
callq 0x5430
jmp 0x83a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x83a9
movabsq $-0x3fc7000000000000, %rax # imm = 0xC039000000000000
movq %rax, -0x568(%rbp)
leaq -0x30(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x87c0
movq %rax, %rsi
leaq -0x588(%rbp), %rdi
callq 0x51b0
jmp 0x6f7b
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0x87c0
movq %rax, %rsi
leaq -0x5a8(%rbp), %rdi
callq 0x51b0
jmp 0x6f9a
leaq -0x30(%rbp), %rdi
movl $0x2, %esi
callq 0x87c0
movq %rax, %rsi
leaq -0x5c8(%rbp), %rdi
callq 0x51b0
jmp 0x6fb9
leaq -0x5f1(%rbp), %rdi
movq %rdi, -0xac8(%rbp)
callq 0x5710
movq -0xac8(%rbp), %rdx
leaq 0x631fe(%rip), %rsi     # 0x6a1d8
leaq -0x5f0(%rbp), %rdi
callq 0x5560
jmp 0x6fe8
leaq -0xc8(%rbp), %rdi
leaq -0x5f0(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xad0(%rbp)
jmp 0x7004
movq -0xad0(%rbp), %rdi
callq 0xfae0
movss %xmm0, -0xad4(%rbp)
jmp 0x701a
leaq -0x5f0(%rbp), %rdi
callq 0x5848
leaq -0x5f1(%rbp), %rdi
callq 0x5430
movss -0xad4(%rbp), %xmm0
movss %xmm0, -0x5cc(%rbp)
leaq -0x619(%rbp), %rdi
movq %rdi, -0xae0(%rbp)
callq 0x5710
movq -0xae0(%rbp), %rdx
leaq 0x63189(%rip), %rsi     # 0x6a1ec
leaq -0x618(%rbp), %rdi
callq 0x5560
jmp 0x7071
leaq -0xc8(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xae8(%rbp)
jmp 0x708d
movq -0xae8(%rbp), %rdi
callq 0xfa20
movl %eax, -0xaec(%rbp)
jmp 0x70a1
leaq -0x618(%rbp), %rdi
callq 0x5848
leaq -0x619(%rbp), %rdi
callq 0x5430
movl -0xaec(%rbp), %eax
movl %eax, -0x5f8(%rbp)
leaq -0x641(%rbp), %rdi
movq %rdi, -0xaf8(%rbp)
callq 0x5710
movq -0xaf8(%rbp), %rdx
leaq 0x63111(%rip), %rsi     # 0x6a1f7
leaq -0x640(%rbp), %rdi
callq 0x5560
jmp 0x70f4
leaq -0xc8(%rbp), %rdi
leaq -0x640(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xb00(%rbp)
jmp 0x7110
movq -0xb00(%rbp), %rdi
callq 0xfa20
movl %eax, -0xb04(%rbp)
jmp 0x7124
leaq -0x640(%rbp), %rdi
callq 0x5848
leaq -0x641(%rbp), %rdi
callq 0x5430
movl -0xb04(%rbp), %eax
movl %eax, -0x620(%rbp)
leaq -0x669(%rbp), %rdi
movq %rdi, -0xb10(%rbp)
callq 0x5710
movq -0xb10(%rbp), %rdx
leaq 0x63003(%rip), %rsi     # 0x6a16c
leaq -0x668(%rbp), %rdi
callq 0x5560
jmp 0x7177
leaq -0xc8(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xb18(%rbp)
jmp 0x7193
movq -0xb18(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0xb21(%rbp)
leaq -0x668(%rbp), %rdi
callq 0x5848
leaq -0x669(%rbp), %rdi
callq 0x5430
movb -0xb21(%rbp), %al
andb $0x1, %al
movb %al, -0x642(%rbp)
leaq -0x691(%rbp), %rdi
movq %rdi, -0xb20(%rbp)
callq 0x5710
movq -0xb20(%rbp), %rdx
leaq 0x62fc8(%rip), %rsi     # 0x6a1b2
leaq -0x690(%rbp), %rdi
callq 0x5560
jmp 0x71f8
leaq -0xc8(%rbp), %rdi
leaq -0x690(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xb30(%rbp)
jmp 0x7214
movq -0xb30(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0xb39(%rbp)
leaq -0x690(%rbp), %rdi
callq 0x5848
leaq -0x691(%rbp), %rdi
callq 0x5430
movb -0xb39(%rbp), %al
andb $0x1, %al
movb %al, -0x66a(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x87e0
leaq -0x6e9(%rbp), %rdi
movq %rdi, -0xb38(%rbp)
callq 0x5710
movq -0xb38(%rbp), %rdx
leaq 0x62f8b(%rip), %rsi     # 0x6a202
leaq -0x6e8(%rbp), %rdi
callq 0x5560
jmp 0x7285
leaq -0xc8(%rbp), %rdi
leaq -0x6e8(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xb48(%rbp)
jmp 0x72a1
movq -0xb48(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0xb49(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x5848
leaq -0x6e9(%rbp), %rdi
callq 0x5430
movb -0xb49(%rbp), %al
testb $0x1, %al
je 0x762e
leaq -0x708(%rbp), %rdi
callq 0x8800
leaq -0x749(%rbp), %rdi
movq %rdi, -0xb58(%rbp)
callq 0x5710
movq -0xb58(%rbp), %rdx
leaq 0x62efe(%rip), %rsi     # 0x6a202
leaq -0x748(%rbp), %rdi
callq 0x5560
jmp 0x7312
leaq -0xc8(%rbp), %rdi
leaq -0x748(%rbp), %rsi
callq 0x10cd0
movq %rax, -0xb60(%rbp)
jmp 0x732e
movq -0xb60(%rbp), %rdi
callq 0xfc60
movq %rax, -0xb68(%rbp)
jmp 0x7343
movq -0xb68(%rbp), %rsi
leaq -0x728(%rbp), %rdi
callq 0x51b0
jmp 0x7358
leaq -0x728(%rbp), %rdi
leaq -0x708(%rbp), %rsi
callq 0x59e00
jmp 0x736d
leaq -0x728(%rbp), %rdi
callq 0x5848
leaq -0x748(%rbp), %rdi
callq 0x5848
leaq -0x749(%rbp), %rdi
callq 0x5430
leaq -0x708(%rbp), %rdi
movq %rdi, -0xb70(%rbp)
callq 0x8860
movq -0xb70(%rbp), %rdi
movq %rax, -0x758(%rbp)
callq 0x8890
movq %rax, -0x760(%rbp)
movq -0x758(%rbp), %rsi
movq -0x760(%rbp), %rdx
leaq -0x6c8(%rbp), %rdi
callq 0x8820
jmp 0x73da
leaq -0x708(%rbp), %rdi
callq 0x88c0
jmp 0x762e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x839d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8391
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x744b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x5848
leaq -0x5f1(%rbp), %rdi
callq 0x5430
jmp 0x8385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x748e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x5848
leaq -0x619(%rbp), %rdi
callq 0x5430
jmp 0x8385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x74d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x640(%rbp), %rdi
callq 0x5848
leaq -0x641(%rbp), %rdi
callq 0x5430
jmp 0x8385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x7514
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x668(%rbp), %rdi
callq 0x5848
leaq -0x669(%rbp), %rdi
callq 0x5430
jmp 0x8385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x7557
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x690(%rbp), %rdi
callq 0x5848
leaq -0x691(%rbp), %rdi
callq 0x5430
jmp 0x8385
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x759a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x5848
leaq -0x6e9(%rbp), %rdi
callq 0x5430
jmp 0x8379
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x75fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x75f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x728(%rbp), %rdi
callq 0x5848
leaq -0x748(%rbp), %rdi
callq 0x5848
leaq -0x749(%rbp), %rdi
callq 0x5430
jmp 0x761d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x708(%rbp), %rdi
callq 0x88c0
jmp 0x8379
movl $0xf, %edi
callq 0x8920
movl %eax, -0xb74(%rbp)
jmp 0x7640
movl -0xb74(%rbp), %eax
movl %eax, -0x764(%rbp)
movl -0x764(%rbp), %esi
movq 0x9198f(%rip), %rdi     # 0x98fe8
callq 0x5640
movq %rax, -0xb80(%rbp)
jmp 0x7667
movq -0xb80(%rbp), %rdi
leaq 0x12cb(%rip), %rsi      # 0x8940
callq 0x5140
jmp 0x767c
movq 0x91965(%rip), %rdi     # 0x98fe8
leaq 0x62b82(%rip), %rsi     # 0x6a20c
callq 0x53d0
movq %rax, -0xb88(%rbp)
jmp 0x7698
movq -0xb88(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x5390
movq %rax, -0xb90(%rbp)
jmp 0x76b4
movq -0xb90(%rbp), %rdi
movq 0x918d6(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x76c9
movq 0x91918(%rip), %rdi     # 0x98fe8
leaq 0x62b4c(%rip), %rsi     # 0x6a223
callq 0x53d0
movq %rax, -0xb98(%rbp)
jmp 0x76e5
movq -0xb98(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x5390
movq %rax, -0xba0(%rbp)
jmp 0x7701
movq -0xba0(%rbp), %rdi
movq 0x91889(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7716
movq 0x918cb(%rip), %rdi     # 0x98fe8
leaq 0x62b20(%rip), %rsi     # 0x6a244
callq 0x53d0
movq %rax, -0xba8(%rbp)
jmp 0x7732
movq -0xba8(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x5390
movq %rax, -0xbb0(%rbp)
jmp 0x774e
movq -0xbb0(%rbp), %rdi
movq 0x9183c(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7763
movq 0x9187e(%rip), %rdi     # 0x98fe8
leaq 0x62af2(%rip), %rsi     # 0x6a263
callq 0x53d0
movq %rax, -0xbb8(%rbp)
jmp 0x777f
movq -0xbb8(%rbp), %rdi
movss -0x5cc(%rbp), %xmm0
callq 0x5310
movq %rax, -0xbc0(%rbp)
jmp 0x779c
movq -0xbc0(%rbp), %rdi
movq 0x917ee(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x77b1
movq 0x91830(%rip), %rdi     # 0x98fe8
leaq 0x62ac6(%rip), %rsi     # 0x6a285
callq 0x53d0
movq %rax, -0xbc8(%rbp)
jmp 0x77cd
movq -0xbc8(%rbp), %rdi
movl -0x5f8(%rbp), %esi
callq 0x5550
movq %rax, -0xbd0(%rbp)
jmp 0x77e8
movq -0xbd0(%rbp), %rdi
movq 0x917a2(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x77fd
leaq -0x6c8(%rbp), %rdi
callq 0x8970
cmpq $0x0, %rax
jbe 0x789d
movq 0x917ce(%rip), %rdi     # 0x98fe8
leaq 0x62a98(%rip), %rsi     # 0x6a2b9
callq 0x53d0
movq %rax, -0xbd8(%rbp)
jmp 0x782f
leaq -0x6c8(%rbp), %rdi
callq 0x8970
movq -0xbd8(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xbe0(%rbp)
jmp 0x7853
movq -0xbe0(%rbp), %rdi
leaq 0x62a73(%rip), %rsi     # 0x6a2d4
callq 0x53d0
movq %rax, -0xbe8(%rbp)
jmp 0x786f
movq -0xbe8(%rbp), %rdi
movq 0x9171b(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7884
jmp 0x789d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8379
movq 0x91744(%rip), %rdi     # 0x98fe8
leaq 0x62a33(%rip), %rsi     # 0x6a2de
callq 0x53d0
movq %rax, -0xbf0(%rbp)
jmp 0x78b9
movq -0xbf0(%rbp), %rdi
movl -0x620(%rbp), %esi
callq 0x5550
movq %rax, -0xbf8(%rbp)
jmp 0x78d4
movq -0xbf8(%rbp), %rdi
movq 0x916b6(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x78e9
movq 0x916f8(%rip), %rdi     # 0x98fe8
leaq 0x62a07(%rip), %rsi     # 0x6a2fe
callq 0x53d0
movq %rax, -0xc00(%rbp)
jmp 0x7905
movq -0xc00(%rbp), %rdi
movzbl -0x642(%rbp), %esi
andl $0x1, %esi
callq 0x5720
movq %rax, -0xc08(%rbp)
jmp 0x7924
movq -0xc08(%rbp), %rdi
movq 0x91666(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7939
movq 0x916a8(%rip), %rdi     # 0x98fe8
leaq 0x629da(%rip), %rsi     # 0x6a321
callq 0x53d0
movq %rax, -0xc10(%rbp)
jmp 0x7955
movq -0xc10(%rbp), %rdi
movzbl -0x66a(%rbp), %esi
andl $0x1, %esi
callq 0x5720
movq %rax, -0xc18(%rbp)
jmp 0x7974
movq -0xc18(%rbp), %rdi
movq 0x91616(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7989
leaq -0x7a0(%rbp), %rdi
callq 0x87e0
leaq -0x7d0(%rbp), %rdi
callq 0x8990
leaq -0x800(%rbp), %rdi
callq 0x8990
leaq -0x830(%rbp), %rdi
callq 0x8990
movq 0x91628(%rip), %rdi     # 0x98fe8
leaq 0x62977(%rip), %rsi     # 0x6a33e
callq 0x53d0
movq %rax, -0xc20(%rbp)
jmp 0x79d5
movq -0xc20(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x5390
movq %rax, -0xc28(%rbp)
jmp 0x79f1
movq -0xc28(%rbp), %rdi
movq 0x91599(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7a06
leaq -0x858(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x51b0
jmp 0x7a1b
movzbl -0x66a(%rbp), %ecx
andl $0x1, %ecx
leaq -0x858(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
leaq -0x768(%rbp), %rdx
callq 0x59290
movl %eax, -0xc2c(%rbp)
jmp 0x7a47
leaq -0x858(%rbp), %rdi
callq 0x5848
movl -0xc2c(%rbp), %eax
movl %eax, -0x834(%rbp)
cmpl $0x0, -0x834(%rbp)
jge 0x7add
movq 0x91579(%rip), %rdi     # 0x98fe8
leaq 0x628dc(%rip), %rsi     # 0x6a352
callq 0x53d0
movq %rax, -0xc38(%rbp)
jmp 0x7a84
movq -0xc38(%rbp), %rdi
movq 0x91506(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7a99
movl $0x1, %edi
callq 0x5480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8349
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x858(%rbp), %rdi
callq 0x5848
jmp 0x8349
movq 0x91504(%rip), %rdi     # 0x98fe8
leaq 0x62c53(%rip), %rsi     # 0x6a73e
callq 0x53d0
movq %rax, -0xc40(%rbp)
jmp 0x7af9
movq -0xc40(%rbp), %rdi
leaq 0x627f0(%rip), %rsi     # 0x6a2f7
callq 0x53d0
movq %rax, -0xc48(%rbp)
jmp 0x7b15
leaq -0x7d0(%rbp), %rdi
callq 0x89b0
movq -0xc48(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xc50(%rbp)
jmp 0x7b39
movq -0xc50(%rbp), %rdi
movq 0x91451(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7b4e
movq 0x91493(%rip), %rdi     # 0x98fe8
leaq 0x62be2(%rip), %rsi     # 0x6a73e
callq 0x53d0
movq %rax, -0xc58(%rbp)
jmp 0x7b6a
movq -0xc58(%rbp), %rdi
leaq 0x62802(%rip), %rsi     # 0x6a37a
callq 0x53d0
movq %rax, -0xc60(%rbp)
jmp 0x7b86
movq -0xc60(%rbp), %rdi
movl -0x768(%rbp), %esi
callq 0x56f0
movq %rax, -0xc68(%rbp)
jmp 0x7ba1
movq -0xc68(%rbp), %rdi
movq 0x913e9(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7bb6
movl -0x5f8(%rbp), %edx
movzbl -0x66a(%rbp), %ecx
andl $0x1, %ecx
leaq -0x7d0(%rbp), %rdi
leaq -0x7a0(%rbp), %rsi
callq 0x83d0
jmp 0x7bdb
leaq -0x888(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x87e0
leaq -0x6c8(%rbp), %rdi
movq %rdi, -0xc90(%rbp)
callq 0x8a60
movq -0xc90(%rbp), %rdi
movq %rax, -0x890(%rbp)
callq 0x8a90
movq %rax, -0x898(%rbp)
leaq -0x7a0(%rbp), %rdi
movq %rdi, -0xc88(%rbp)
callq 0x8a60
movq -0xc88(%rbp), %rdi
movq %rax, -0x8a0(%rbp)
callq 0x8a90
movq -0xc80(%rbp), %rdi
movq %rax, -0x8a8(%rbp)
callq 0x8a60
movq -0xc80(%rbp), %rdi
movq %rax, -0x8c0(%rbp)
movq -0x8c0(%rbp), %rsi
callq 0x8ac0
movq %rdx, -0xc78(%rbp)
movq %rax, -0xc70(%rbp)
jmp 0x7c7e
movq -0xc78(%rbp), %rax
movq -0xc70(%rbp), %rcx
movq %rcx, -0x8b8(%rbp)
movq %rax, -0x8b0(%rbp)
movq -0x890(%rbp), %rdi
movq -0x898(%rbp), %rsi
movq -0x8a0(%rbp), %rdx
movq -0x8a8(%rbp), %rcx
movq -0x8b8(%rbp), %r8
movq -0x8b0(%rbp), %r9
callq 0x89d0
movq %rdx, -0xca0(%rbp)
movq %rax, -0xc98(%rbp)
jmp 0x7cd9
movq -0xca0(%rbp), %rax
movq -0xc98(%rbp), %rcx
movq %rcx, -0x8d0(%rbp)
movq %rax, -0x8c8(%rbp)
leaq -0x6c8(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0x8b00
jmp 0x7d0a
movq 0x912d7(%rip), %rdi     # 0x98fe8
leaq 0x6267a(%rip), %rsi     # 0x6a392
callq 0x53d0
movq %rax, -0xca8(%rbp)
jmp 0x7d26
movq -0xca8(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x5390
movq %rax, -0xcb0(%rbp)
jmp 0x7d42
movq -0xcb0(%rbp), %rdi
movq 0x91248(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7d57
leaq -0x8f0(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x51b0
jmp 0x7d6c
movzbl -0x66a(%rbp), %ecx
andl $0x1, %ecx
leaq -0x8f0(%rbp), %rdi
leaq -0x830(%rbp), %rsi
leaq -0x76c(%rbp), %rdx
callq 0x59290
movl %eax, -0xcb4(%rbp)
jmp 0x7d98
movl -0xcb4(%rbp), %eax
movl %eax, -0x834(%rbp)
leaq -0x8f0(%rbp), %rdi
callq 0x5848
cmpl $0x0, -0x834(%rbp)
jge 0x7e2e
movq 0x91228(%rip), %rdi     # 0x98fe8
leaq 0x625de(%rip), %rsi     # 0x6a3a5
callq 0x53d0
movq %rax, -0xcc0(%rbp)
jmp 0x7dd5
movq -0xcc0(%rbp), %rdi
movq 0x911b5(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7dea
movl $0x1, %edi
callq 0x5480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x833d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x8f0(%rbp), %rdi
callq 0x5848
jmp 0x833d
movq 0x911b3(%rip), %rdi     # 0x98fe8
leaq 0x62902(%rip), %rsi     # 0x6a73e
callq 0x53d0
movq %rax, -0xcc8(%rbp)
jmp 0x7e4a
movq -0xcc8(%rbp), %rdi
leaq 0x62574(%rip), %rsi     # 0x6a3cc
callq 0x53d0
movq %rax, -0xcd0(%rbp)
jmp 0x7e66
leaq -0x830(%rbp), %rdi
callq 0x89b0
movq -0xcd0(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xcd8(%rbp)
jmp 0x7e8a
movq -0xcd8(%rbp), %rdi
movq 0x91100(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7e9f
movq 0x91142(%rip), %rdi     # 0x98fe8
leaq 0x62891(%rip), %rsi     # 0x6a73e
callq 0x53d0
movq %rax, -0xce0(%rbp)
jmp 0x7ebb
movq -0xce0(%rbp), %rdi
leaq 0x62513(%rip), %rsi     # 0x6a3dc
callq 0x53d0
movq %rax, -0xce8(%rbp)
jmp 0x7ed7
movq -0xce8(%rbp), %rdi
movl -0x76c(%rbp), %esi
callq 0x56f0
movq %rax, -0xcf0(%rbp)
jmp 0x7ef2
movq -0xcf0(%rbp), %rdi
movq 0x91098(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x7f07
leaq -0x900(%rbp), %rdi
callq 0x8b30
jmp 0x7f15
testb $0x1, -0x642(%rbp)
je 0x7f35
leaq 0x3ee0b(%rip), %rsi     # 0x46d30
leaq -0x900(%rbp), %rdi
callq 0x8b50
jmp 0x7f33
jmp 0x7f4c
leaq 0x3e454(%rip), %rsi     # 0x46390
leaq -0x900(%rbp), %rdi
callq 0x8b50
jmp 0x7f4a
jmp 0x7f4c
movzbl -0x66a(%rbp), %esi
andl $0x1, %esi
leaq -0x900(%rbp), %rdi
callq 0x8b70
jmp 0x7f64
xorps %xmm0, %xmm0
movaps %xmm0, -0x920(%rbp)
movaps %xmm0, -0x930(%rbp)
movaps %xmm0, -0x940(%rbp)
leaq -0x940(%rbp), %rdi
movq %rdi, -0xd00(%rbp)
callq 0x87e0
movq -0xd00(%rbp), %r8
leaq -0x900(%rbp), %rdi
leaq -0x830(%rbp), %rsi
leaq -0x7d0(%rbp), %rdx
leaq -0x800(%rbp), %rcx
callq 0x5a150
movsd %xmm0, -0xcf8(%rbp)
jmp 0x7fc1
leaq -0x940(%rbp), %rdi
callq 0x8b90
movsd -0xcf8(%rbp), %xmm0
movsd %xmm0, -0x908(%rbp)
movq 0x91004(%rip), %rdi     # 0x98fe8
movq 0x90fad(%rip), %rsi     # 0x98f98
callq 0x5410
movq %rax, -0xd08(%rbp)
jmp 0x7ff9
movq -0xd08(%rbp), %rdi
leaq 0x623eb(%rip), %rsi     # 0x6a3f2
callq 0x53d0
movq %rax, -0xd10(%rbp)
jmp 0x8015
movq -0xd10(%rbp), %rdi
movsd -0x908(%rbp), %xmm0
callq 0x57a0
movq %rax, -0xd18(%rbp)
jmp 0x8032
movq -0xd18(%rbp), %rdi
movq 0x90f58(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x8047
xorps %xmm0, %xmm0
movsd %xmm0, -0x948(%rbp)
xorl %eax, %eax
cmpl $0x0, -0x620(%rbp)
movb %al, -0xd19(%rbp)
jbe 0x8081
leaq -0x7d0(%rbp), %rdi
callq 0x89b0
movl -0x620(%rbp), %ecx
cmpq %rcx, %rax
seta %al
movb %al, -0xd19(%rbp)
movb -0xd19(%rbp), %al
testb $0x1, %al
jne 0x8090
jmp 0x82db
movss -0x5cc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd -0x948(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x948(%rbp)
movsd -0x948(%rbp), %xmm0
movl -0x5f8(%rbp), %ecx
leaq -0x900(%rbp), %rdi
leaq -0x800(%rbp), %rsi
leaq -0x6c8(%rbp), %rdx
callq 0x5acb0
jmp 0x80da
movq 0x90f07(%rip), %rdi     # 0x98fe8
leaq 0x6231f(%rip), %rsi     # 0x6a407
callq 0x53d0
movq %rax, -0xd28(%rbp)
jmp 0x80f6
movq -0xd28(%rbp), %rdi
movsd -0x948(%rbp), %xmm0
callq 0x57a0
movq %rax, -0xd30(%rbp)
jmp 0x8113
movq -0xd30(%rbp), %rdi
leaq 0x6261d(%rip), %rsi     # 0x6a73e
callq 0x53d0
movq %rax, -0xd38(%rbp)
jmp 0x812f
movq -0xd38(%rbp), %rdi
leaq 0x622d7(%rip), %rsi     # 0x6a414
callq 0x53d0
movq %rax, -0xd40(%rbp)
jmp 0x814b
leaq -0x800(%rbp), %rdi
callq 0x89b0
movq -0xd40(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xd48(%rbp)
jmp 0x816f
movq -0xd48(%rbp), %rdi
movq 0x90e1b(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x8184
leaq -0x7d0(%rbp), %rdi
leaq -0x800(%rbp), %rsi
callq 0x8bb0
jmp 0x8199
leaq -0x7d0(%rbp), %rdi
movsd 0x61e60(%rip), %xmm0    # 0x6a008
callq 0x5a270
jmp 0x81af
movsd -0x568(%rbp), %xmm0
leaq -0x7d0(%rbp), %rdi
leaq -0x6c8(%rbp), %rsi
callq 0x84e0
jmp 0x81cc
xorps %xmm0, %xmm0
movaps %xmm0, -0x960(%rbp)
movaps %xmm0, -0x970(%rbp)
movaps %xmm0, -0x980(%rbp)
leaq -0x980(%rbp), %rdi
movq %rdi, -0xd58(%rbp)
callq 0x87e0
movq -0xd58(%rbp), %r8
leaq -0x900(%rbp), %rdi
leaq -0x830(%rbp), %rsi
leaq -0x7d0(%rbp), %rdx
leaq -0x800(%rbp), %rcx
callq 0x5a150
movsd %xmm0, -0xd50(%rbp)
jmp 0x8229
movsd -0xd50(%rbp), %xmm0
movsd %xmm0, -0x908(%rbp)
leaq -0x980(%rbp), %rdi
callq 0x8b90
movq 0x90d9c(%rip), %rdi     # 0x98fe8
leaq 0x621a7(%rip), %rsi     # 0x6a3fa
callq 0x53d0
movq %rax, -0xd60(%rbp)
jmp 0x8261
movq -0xd60(%rbp), %rdi
movsd -0x908(%rbp), %xmm0
callq 0x57a0
movq %rax, -0xd68(%rbp)
jmp 0x827e
movq -0xd68(%rbp), %rdi
movq 0x90d0c(%rip), %rsi     # 0x98f98
callq 0x5410
jmp 0x8293
jmp 0x8052
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x940(%rbp), %rdi
callq 0x8b90
jmp 0x833d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x980(%rbp), %rdi
callq 0x8b90
jmp 0x833d
leaq -0x9a0(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x51b0
jmp 0x82f0
leaq -0x9a0(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x59870
jmp 0x830c
leaq -0x9a0(%rbp), %rdi
callq 0x5848
xorl %edi, %edi
callq 0x5480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x9a0(%rbp), %rdi
callq 0x5848
leaq -0x888(%rbp), %rdi
callq 0x8b90
leaq -0x830(%rbp), %rdi
callq 0x8be0
leaq -0x800(%rbp), %rdi
callq 0x8be0
leaq -0x7d0(%rbp), %rdi
callq 0x8be0
leaq -0x7a0(%rbp), %rdi
callq 0x8b90
leaq -0x6c8(%rbp), %rdi
callq 0x8b90
leaq -0x5c8(%rbp), %rdi
callq 0x5848
leaq -0x5a8(%rbp), %rdi
callq 0x5848
leaq -0x588(%rbp), %rdi
callq 0x5848
leaq -0xc8(%rbp), %rdi
callq 0x8c00
movq -0xf8(%rbp), %rdi
callq 0x5700
nopw %cs:(%rax,%rax)