// File: /workspace/github_cpp_makefile_star2_O1/JameyWoo[P]re2graph/main.cpp
// Function: main
int main(int argc, char *argv[]) {
    string rexp, strm, pngfile;  // * regular expression, string_to_match
    string pattern;              // * 状态图的布局模式
    string graphes;              // * 要画的图形

    // * 参数的解析
    if (argc == 1) {
        help();
        return 0;
    }

    int o;
    string optstring = "hir:s:o:p:g:";  // 可以有的选项, : 代表后面需要跟参数
    while ((o = getopt(argc, argv, optstring.c_str())) != -1) {
        switch (o) {
            case 'h':
                help();
                return 0;
            case '?':
                cout << "error optopt: " << char(optopt) << endl;
                help();
                return 0;
            case 'i':
                cout << "please input the re_expression:\n->$ ";
                cin >> rexp;
                cout << "please input the string to match:\n->$ ";
                cin >> strm;
                break;
            // r 和 s|o配合使用
            case 'r':
                rexp = optarg;
                cout << "re_expresion: " << rexp << endl;
                break;
            case 's':
                strm = optarg;
                cout << "string_to_match: " << strm << endl;
                break;
            case 'o':
                pngfile = optarg;
                cout << "png file: " << pngfile << endl;
                break;
            // 有o才有p
            case 'p':
                pattern = optarg;
                cout << "pattern: " << pattern << endl;
                break;
            case 'g':
                graphes = optarg;
                cout << "graphes: " << graphes << endl;
                break;
        }
    }

    // * 实现步骤, 保存了中间的nfa, dfa, mindfa 等文件在tmp文件夹中, 作为临时文件
    NFA mynfa = re2nfa(rexp);
    writeNfaData(mynfa, "./tmp/tmp.nfa");
    DFA mydfa;
    nfa2dfa(mynfa, mydfa);
    writeDfaData(mydfa, "./tmp/tmp.dfa");
    DFA my_min_dfa = dfa2min(mydfa);
    writeDfaData(my_min_dfa, "./tmp/tmp.mindfa");

    // * 根据输入的信息来执行程序
    if (strm.size()) {
        bool match = dfaPattern(my_min_dfa, strm);
        if (match) {
            cout << "\n*\nmatch succeeded!\n*\n"
                 << endl;
        } else {
            cout << "\n*\nmatch failed!\n*\n"
                 << endl;
        }
    }
    // 根据 pngfile 和 graphes 的选项画图. 如果不指定 graphes, 默认都画出来
    if (pngfile.size()) {
        string raw = pngfile;
        if ((count(graphes.begin(), graphes.end(), 'n') != 0) || graphes.size() == 0) {
            nfa2png(mynfa, pngfile.replace(pngfile.find(".png"), 4, "_nfa.png"), pattern);
            pngfile = raw;
        }
        if ((count(graphes.begin(), graphes.end(), 'm') != 0) || graphes.size() == 0) {
            dfa2png(my_min_dfa, pngfile.replace(pngfile.find(".png"), 4, "_mindfa.png"), pattern);
            pngfile = raw;
        }
        if ((count(graphes.begin(), graphes.end(), 'd') != 0) || graphes.size() == 0) {
            dfa2png(mydfa, pngfile.replace(pngfile.find(".png"), 4, "_dfa.png"), pattern);
            pngfile = raw;
        }
    }

    cout << "program over ... \n";
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x788, %rsp            # imm = 0x788
leaq 0x98(%rsp), %r14
movq %r14, -0x10(%r14)
xorl %eax, %eax
movq %rax, -0x8(%r14)
movb %al, (%r14)
leaq 0x78(%rsp), %r15
movq %r15, -0x10(%r15)
movq %rax, -0x8(%r15)
movb %al, (%r15)
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
movq %rax, -0x8(%r12)
movb %al, (%r12)
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq %rax, -0x8(%r13)
movb %al, (%r13)
leaq 0x58(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
cmpl $0x1, %edi
jne 0x26b4
callq 0xccd8
jmp 0x2a63
movq %rsi, %rbx
movl %edi, %ebp
leaq 0xd8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x10984(%rip), %rsi     # 0x13050
leaq 0x10989(%rip), %rdx     # 0x1305c
leaq 0xc8(%rsp), %rdi
callq 0x4572
leaq 0x1091d(%rip), %r13     # 0x13004
movq 0x168e2(%rip), %r15     # 0x18fd0
movq 0xc8(%rsp), %rdx
movl %ebp, %edi
movq %rbx, %rsi
callq 0x2060
leal -0x67(%rax), %ecx
cmpl $0xc, %ecx
ja 0x29aa
movslq (%r13,%rcx,4), %rax
addq %r13, %rax
jmpq *%rax
movq 0x16893(%rip), %rax     # 0x18fb0
movq (%rax), %r14
movq 0x50(%rsp), %r12
movq %r14, %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x22e0
movl $0x9, %edx
movq %r15, %rdi
leaq 0x1099d(%rip), %rsi     # 0x130ee
callq 0x2240
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x2240
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
jmp 0x2992
movq 0x16825(%rip), %rax     # 0x18fb0
movq (%rax), %r14
movq 0x30(%rsp), %r12
movq %r14, %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x22e0
movl $0x9, %edx
movq %r15, %rdi
leaq 0x10925(%rip), %rsi     # 0x130e4
callq 0x2240
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq %r15, %rdi
callq 0x2240
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
jmp 0x2992
movl $0x24, %edx
movq %r15, %rdi
leaq 0x1086b(%rip), %rsi     # 0x1306c
callq 0x2240
movq 0x167d3(%rip), %rdi     # 0x18fe0
leaq 0x88(%rsp), %rsi
callq 0x22a0
movl $0x26, %edx
movq %r15, %rdi
leaq 0x10868(%rip), %rsi     # 0x13091
callq 0x2240
movq 0x167ab(%rip), %rdi     # 0x18fe0
leaq 0x68(%rsp), %rsi
callq 0x22a0
jmp 0x26ee
movq 0x16765(%rip), %rax     # 0x18fb0
movq (%rax), %r14
movq 0x70(%rsp), %r12
movq %r14, %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x22e0
movl $0x11, %edx
movq %r15, %rdi
leaq 0x10848(%rip), %rsi     # 0x130c7
callq 0x2240
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
movq %r15, %rdi
callq 0x2240
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
jmp 0x2992
movq 0x166f7(%rip), %rax     # 0x18fb0
movq (%rax), %r14
movq 0x10(%rsp), %r12
movq %r14, %rdi
callq 0x20d0
leaq 0x8(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x22e0
movl $0xa, %edx
movq %r15, %rdi
leaq 0x107ec(%rip), %rsi     # 0x130d9
callq 0x2240
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq %r15, %rdi
callq 0x2240
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
jmp 0x2992
movq 0x1668c(%rip), %rax     # 0x18fb0
movq (%rax), %r14
movq 0x90(%rsp), %r12
movq %r14, %rdi
callq 0x20d0
leaq 0x88(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x22e0
movl $0xe, %edx
movq %r15, %rdi
leaq 0x1075a(%rip), %rsi     # 0x130b8
callq 0x2240
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
movq %r15, %rdi
callq 0x2240
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2150
jmp 0x26ee
cmpl $-0x1, %eax
je 0x2af5
cmpl $0x3f, %eax
jne 0x26ee
movq 0x1660d(%rip), %rdi     # 0x18fd0
leaq 0x10693(%rip), %rsi     # 0x1305d
movl $0xe, %edx
callq 0x2240
movq 0x165ed(%rip), %rax     # 0x18fc8
movb (%rax), %al
leaq 0x2b8(%rsp), %rsi
movb %al, (%rsi)
movq 0x165e2(%rip), %rdi     # 0x18fd0
movl $0x1, %edx
callq 0x2240
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2150
callq 0xccd8
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x2a4c
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x98(%rsp), %r14
leaq 0x78(%rsp), %r15
leaq 0x18(%rsp), %r12
leaq 0x38(%rsp), %r13
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x2a7f
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x2a96
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x2aad
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x68(%rsp), %rdi
cmpq %r15, %rdi
je 0x2ac4
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x2ae1
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x2200
xorl %eax, %eax
addq $0x788, %rsp            # imm = 0x788
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x238(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
addq %rsi, %rdx
leaq 0x228(%rsp), %rdi
callq 0x44e2
leaq 0x2b8(%rsp), %rdi
leaq 0x228(%rsp), %rsi
callq 0x4604
movq 0x228(%rsp), %rdi
cmpq %r14, %rdi
je 0x2b53
movq 0x238(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x718(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0x3a32
leaq 0x218(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1057d(%rip), %rsi     # 0x130f8
leaq 0x10583(%rip), %rdx     # 0x13105
leaq 0x208(%rsp), %rdi
callq 0x4572
leaq 0x718(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0xb282
movq 0x208(%rsp), %rdi
cmpq %r14, %rdi
je 0x2bc1
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x770(%rsp), %rbx
movq %rbx, %rdi
callq 0x412e
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x2bea
movq 0x768(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x740(%rsp), %rdi
testq %rdi, %rdi
je 0x2c07
movq 0x750(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x728(%rsp), %rdi
testq %rdi, %rdi
je 0x2c24
movq 0x738(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
xorps %xmm0, %xmm0
movups %xmm0, 0x2a8(%rsp)
movups %xmm0, 0x298(%rsp)
movups %xmm0, 0x288(%rsp)
movups %xmm0, 0x278(%rsp)
movups %xmm0, 0x268(%rsp)
movups %xmm0, 0x258(%rsp)
leaq 0x6a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0x3a32
leaq 0x6a8(%rsp), %rdi
leaq 0x248(%rsp), %rsi
callq 0x61c7
leaq 0x700(%rsp), %rbx
movq %rbx, %rdi
callq 0x412e
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x2caa
movq 0x6f8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x6d0(%rsp), %rdi
testq %rdi, %rdi
je 0x2cc7
movq 0x6e0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x6b8(%rsp), %rdi
testq %rdi, %rdi
je 0x2ce4
movq 0x6c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x638(%rsp), %rdi
leaq 0x248(%rsp), %rsi
callq 0x3b36
leaq 0x1f8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x103fa(%rip), %rsi     # 0x13106
leaq 0x10400(%rip), %rdx     # 0x13113
leaq 0x1e8(%rsp), %rdi
callq 0x4572
leaq 0x638(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0xc2ac
movq 0x1e8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2d52
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x690(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x2d7b
movq 0x688(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x660(%rsp), %rdi
testq %rdi, %rdi
je 0x2d98
movq 0x670(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x648(%rsp), %rdi
testq %rdi, %rdi
je 0x2db5
movq 0x658(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x5c8(%rsp), %rdi
leaq 0x248(%rsp), %rsi
callq 0x3b36
leaq 0x328(%rsp), %rdi
leaq 0x5c8(%rsp), %rsi
callq 0x73f2
leaq 0x620(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x2e08
movq 0x618(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x5f0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e25
movq 0x600(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x5d8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e42
movq 0x5e8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x558(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0x3b36
leaq 0x1d8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x102aa(%rip), %rsi     # 0x13114
leaq 0x102b3(%rip), %rdx     # 0x13124
leaq 0x1c8(%rsp), %rdi
callq 0x4572
leaq 0x558(%rsp), %rdi
leaq 0x1c8(%rsp), %rsi
callq 0xc2ac
movq 0x1c8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2eb0
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x5b0(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x2ed9
movq 0x5a8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x580(%rsp), %rdi
testq %rdi, %rdi
je 0x2ef6
movq 0x590(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x568(%rsp), %rdi
testq %rdi, %rdi
je 0x2f13
movq 0x578(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
cmpq $0x0, 0x70(%rsp)
je 0x3047
leaq 0x4e8(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0x3b36
leaq 0x1b8(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1a8(%rsp), %rdi
callq 0x44e2
leaq 0x4e8(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x7ee8
movl %eax, %ebx
movq 0x1a8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2f8e
movq 0x1b8(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x540(%rsp), %r14
movq %r14, %rdi
callq 0x44a0
movq -0x18(%r14), %rdi
testq %rdi, %rdi
je 0x2fb7
movq 0x538(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x510(%rsp), %rdi
testq %rdi, %rdi
je 0x2fd4
movq 0x520(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x4f8(%rsp), %rdi
testq %rdi, %rdi
je 0x2ff1
movq 0x508(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x1012d(%rip), %rax     # 0x13125
leaq 0x1013d(%rip), %rsi     # 0x1313c
testb %bl, %bl
cmovneq %rax, %rsi
movzbl %bl, %eax
leaq 0x13(%rax,%rax,2), %rdx
movq 0x15fbc(%rip), %rbx     # 0x18fd0
movq %rbx, %rdi
callq 0x2240
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x15f96(%rip), %rdi     # 0x18fd0
callq 0x2030
movq %rax, %rdi
callq 0x2150
movq 0x10(%rsp), %rdx
testq %rdx, %rdx
je 0x3579
leaq 0xb8(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x8(%rsp), %rsi
addq %rsi, %rdx
leaq 0xa8(%rsp), %rdi
callq 0x44e2
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x30a6
movq 0x48(%rsp), %rcx
xorl %edx, %edx
xorl %esi, %esi
xorl %edi, %edi
cmpb $0x6e, (%rcx,%rdx)
sete %dil
addq %rdi, %rsi
incq %rdx
cmpq %rdx, %rax
jne 0x3089
testq %rsi, %rsi
setne %cl
jmp 0x30a8
xorl %ecx, %ecx
testq %rax, %rax
je 0x30b5
testb %cl, %cl
je 0x3218
leaq 0x478(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0x3a32
leaq 0x10098(%rip), %rsi     # 0x13169
leaq 0x8(%rsp), %rbx
movl $0x4, %ecx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2340
leaq 0x10064(%rip), %rcx     # 0x13150
movl $0x4, %edx
movl $0x8, %r8d
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2220
leaq 0x198(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x188(%rsp), %rdi
callq 0x44e2
leaq 0x178(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x168(%rsp), %rdi
callq 0x44e2
leaq 0x478(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0x168(%rsp), %rdx
callq 0x80b2
movq 0x168(%rsp), %rdi
cmpq %r12, %rdi
je 0x3186
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x188(%rsp), %rdi
cmpq %r15, %rdi
je 0x31a3
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x4d0(%rsp), %rbx
movq %rbx, %rdi
callq 0x412e
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x31cc
movq 0x4c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x4a0(%rsp), %rdi
testq %rdi, %rdi
je 0x31e9
movq 0x4b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x488(%rsp), %rdi
testq %rdi, %rdi
je 0x3206
movq 0x498(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2100
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x3248
movq 0x48(%rsp), %rcx
xorl %edx, %edx
xorl %esi, %esi
xorl %edi, %edi
cmpb $0x6d, (%rcx,%rdx)
sete %dil
addq %rdi, %rsi
incq %rdx
cmpq %rdx, %rax
jne 0x322b
testq %rsi, %rsi
setne %cl
jmp 0x324a
xorl %ecx, %ecx
testq %rax, %rax
je 0x3257
testb %cl, %cl
je 0x33ba
leaq 0x408(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0x3b36
leaq 0xfef6(%rip), %rsi      # 0x13169
leaq 0x8(%rsp), %rbx
movl $0x4, %ecx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2340
leaq 0xfecb(%rip), %rcx      # 0x13159
movl $0x4, %edx
movl $0xb, %r8d
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2220
leaq 0x158(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x148(%rsp), %rdi
callq 0x44e2
leaq 0x138(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x128(%rsp), %rdi
callq 0x44e2
leaq 0x408(%rsp), %rdi
leaq 0x148(%rsp), %rsi
leaq 0x128(%rsp), %rdx
callq 0x968a
movq 0x128(%rsp), %rdi
cmpq %r12, %rdi
je 0x3328
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x148(%rsp), %rdi
cmpq %r15, %rdi
je 0x3345
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x460(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x336e
movq 0x458(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x430(%rsp), %rdi
testq %rdi, %rdi
je 0x338b
movq 0x440(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x418(%rsp), %rdi
testq %rdi, %rdi
je 0x33a8
movq 0x428(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2100
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x33ea
movq 0x48(%rsp), %rcx
xorl %edx, %edx
xorl %esi, %esi
xorl %edi, %edi
cmpb $0x64, (%rcx,%rdx)
sete %dil
addq %rdi, %rsi
incq %rdx
cmpq %rdx, %rax
jne 0x33cd
testq %rsi, %rsi
setne %cl
jmp 0x33ec
xorl %ecx, %ecx
testq %rax, %rax
je 0x33f9
testb %cl, %cl
je 0x355c
leaq 0x398(%rsp), %rdi
leaq 0x248(%rsp), %rsi
callq 0x3b36
leaq 0xfd54(%rip), %rsi      # 0x13169
leaq 0x8(%rsp), %rbx
movl $0x4, %ecx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2340
leaq 0xfd35(%rip), %rcx      # 0x13165
movl $0x4, %edx
movl $0x8, %r8d
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2220
leaq 0x118(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x108(%rsp), %rdi
callq 0x44e2
leaq 0xf8(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0xe8(%rsp), %rdi
callq 0x44e2
leaq 0x398(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x968a
movq 0xe8(%rsp), %rdi
cmpq %r12, %rdi
je 0x34ca
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x108(%rsp), %rdi
cmpq %r15, %rdi
je 0x34e7
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x3f0(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x3510
movq 0x3e8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x3c0(%rsp), %rdi
testq %rdi, %rdi
je 0x352d
movq 0x3d0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x3a8(%rsp), %rdi
testq %rdi, %rdi
je 0x354a
movq 0x3b8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2100
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3579
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x15a50(%rip), %rdi     # 0x18fd0
leaq 0xfbe7(%rip), %rsi      # 0x1316e
movl $0x12, %edx
callq 0x2240
leaq 0x380(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x35ba
movq 0x378(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x350(%rsp), %rdi
testq %rdi, %rdi
je 0x35d7
movq 0x360(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x338(%rsp), %rdi
testq %rdi, %rdi
je 0x35f4
movq 0x348(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x2a0(%rsp), %rbx
movq %rbx, %rdi
callq 0x44a0
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x361d
movq 0x298(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x270(%rsp), %rdi
testq %rdi, %rdi
je 0x363a
movq 0x280(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x3657
movq 0x268(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
leaq 0x310(%rsp), %rbx
movq %rbx, %rdi
callq 0x412e
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x3680
movq 0x308(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x2e0(%rsp), %rdi
testq %rdi, %rdi
je 0x369d
movq 0x2f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
movq 0x2c8(%rsp), %rdi
testq %rdi, %rdi
je 0x2a27
movq 0x2d8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2200
jmp 0x2a27
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
cmpq %r12, %rdi
je 0x36e8
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x36e8
movq %rax, %rbx
movq 0x108(%rsp), %rdi
cmpq %r15, %rdi
je 0x3799
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3799
movq %rax, %rbx
movq 0x128(%rsp), %rdi
cmpq %r12, %rdi
je 0x3733
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3733
movq %rax, %rbx
movq 0x148(%rsp), %rdi
cmpq %r15, %rdi
je 0x37a6
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x37a6
movq %rax, %rbx
movq 0x168(%rsp), %rdi
cmpq %r12, %rdi
je 0x3777
movq 0x178(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3777
movq %rax, %rbx
movq 0x188(%rsp), %rdi
cmpq %r15, %rdi
je 0x37bb
movq 0x198(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x37bb
movq %rax, %rbx
leaq 0x398(%rsp), %rdi
jmp 0x37ae
movq %rax, %rbx
leaq 0x408(%rsp), %rdi
callq 0x3bea
jmp 0x38f8
movq %rax, %rbx
leaq 0x478(%rsp), %rdi
callq 0x3ae6
jmp 0x38f8
jmp 0x391e
movq %rax, %rbx
movq 0x1a8(%rsp), %rdi
cmpq %r14, %rdi
je 0x37f7
movq 0x1b8(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x37f7
movq %rax, %rbx
leaq 0x4e8(%rsp), %rdi
jmp 0x382e
movq %rax, %rbx
movq 0x1c8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3826
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3826
movq %rax, %rbx
leaq 0x558(%rsp), %rdi
callq 0x3bea
jmp 0x3921
movq %rax, %rbx
leaq 0x5c8(%rsp), %rdi
jmp 0x3929
jmp 0x3919
movq %rax, %rbx
movq 0x1e8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3872
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3872
movq %rax, %rbx
leaq 0x638(%rsp), %rdi
jmp 0x3929
movq %rax, %rbx
leaq 0x6a8(%rsp), %rdi
callq 0x3ae6
jmp 0x392e
movq %rax, %rbx
movq 0x208(%rsp), %rdi
cmpq %r14, %rdi
je 0x38b9
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x38b9
movq %rax, %rbx
leaq 0x718(%rsp), %rdi
callq 0x3ae6
jmp 0x393b
movq %rax, %rbx
jmp 0x393b
movq %rax, %rbx
movq 0x228(%rsp), %rdi
cmpq %r14, %rdi
je 0x3970
movq 0x238(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3970
jmp 0x396d
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3921
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x3921
jmp 0x391e
movq %rax, %rbx
jmp 0x392e
movq %rax, %rbx
leaq 0x328(%rsp), %rdi
callq 0x3bea
leaq 0x248(%rsp), %rdi
callq 0x3bea
leaq 0x2b8(%rsp), %rdi
callq 0x3ae6
jmp 0x3970
movq %rax, %rbx
leaq 0x98(%rsp), %r14
leaq 0x78(%rsp), %r15
leaq 0x18(%rsp), %r12
leaq 0x38(%rsp), %r13
jmp 0x39ac
movq %rax, %rbx
jmp 0x39ac
jmp 0x396d
movq %rax, %rbx
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
leaq 0x98(%rsp), %r14
leaq 0x78(%rsp), %r15
leaq 0x18(%rsp), %r12
leaq 0x38(%rsp), %r13
je 0x39ac
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x39c8
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x39df
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x39f6
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x68(%rsp), %rdi
cmpq %r15, %rdi
je 0x3a0d
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x88(%rsp), %rdi
cmpq %r14, %rdi
je 0x3a2a
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, %rdi
callq 0x2350