// File: JameyWoo[P]re2graph/algorithms.cpp
// Function: dfa2min(DFA)
DFA dfa2min(DFA dfa) {
    // 先分出 终止状态集 和 非终止状态集. 并添加到state2set中
    set<int> no_end, end;
    for (auto s : dfa.states) {
        if (count(dfa.end_states.begin(), dfa.end_states.end(), s)) {
            end.insert(s);
        } else {
            no_end.insert(s);
        }
    }
    vector<set<int>> state2set(dfa.state_cnt);  // 每个状态对应的集合
    for (auto s : no_end) {
        state2set[s] = no_end;
    }
    for (auto s : end) {
        state2set[s] = end;
    }

    // 集合的记录, 以set<int>为key, 方便查找
    map<set<int>, int> set_cnt;
    for (auto s : state2set) {  // 各个集合
        set_cnt[s] = 1;
    }
    int last = set_cnt.size();  // 初始时集合的数量

    while (true) {
        // ! 开始拆分集合
        bool flag = false;  //  标记是否可以划分集合, 如果可以, 则处理完当前划分后马上退出.
        for (auto one : set_cnt) {
            set<int> the_set = one.first;               // 当前准备拆分的集合
            for (auto c : dfa.chars) {                  // 遍历每个字符, 查找可以拆分的情况
                map<set<int>, vector<int>> next2state;  // 下一状态所属集合对当前状态的映射, 可根据这个映射划分集合
                set<int> empty_states;
                bool empty = false;
                for (auto state : the_set) {
                    if (dfa.jump_map[state].count(c) == 0) {
                        // ! 解决当一个状态输入c无法跳转的情况
                        empty = true;
                        empty_states.insert(state);
                    } else {
                        int next = dfa.jump_map[state][c];
                        next2state[state2set[next]].push_back(state);
                    }
                }
                if (next2state.size() > 1 || (empty && next2state.size() == 1)) {  // 考虑某条件下无法扩展的状态
                    for (auto next_states : next2state) {
                        set<int> new_set;  // 新集合
                        for (auto new_set_state : next_states.second) {
                            new_set.insert(new_set_state);
                        }
                        for (auto new_set_state : next_states.second) {
                            state2set[new_set_state] = new_set;
                        }
                    }
                    if (empty) {
                        for (auto s : empty_states) {
                            state2set[s] = empty_states;
                        }
                    }
                    flag = true;
                    break;
                }
                if (flag) break;
            }
            if (flag) break;
        }

        // ! 统计集合的数量, 和上一次进行比较
        set_cnt.clear();            // 清空, 重新统计.
        for (auto s : state2set) {  // 统计split之后集合个数
            set_cnt[s] = 1;
        }
        if (last == set_cnt.size()) break;  // 集合没有变化了, 说明不可再划分
        last = set_cnt.size();
    }

    // ! 合并旧状态为新状态
    DFA min_dfa;
    int new_state_id = 0;
    map<set<int>, int> set2id;
    for (auto one_set : set_cnt) {
        set2id[one_set.first] = new_state_id++;
    }
    vector<map<char, int>> new_jump(new_state_id);
    for (int from = 0; from < dfa.state_cnt; ++from) {
        for (auto m : dfa.jump_map[from]) {
            new_jump[set2id[state2set[from]]][m.first] = set2id[state2set[m.second]];
        }
    }
    min_dfa.jump_map = new_jump;

    min_dfa.char_cnt    = dfa.char_cnt;
    min_dfa.state_cnt   = new_state_id;
    min_dfa.start_state = 0;
    // 添加终止状态
    set<int> end_states_set;
    for (auto one_end_state : dfa.end_states) {
        end_states_set.insert(set2id[state2set[one_end_state]]);
    }
    for (auto s : end_states_set) {
        min_dfa.end_states.push_back(s);
    }
    min_dfa.end_state_cnt = min_dfa.end_states.size();
    min_dfa.chars         = dfa.chars;
    for (int i = 0; i < new_state_id; ++i) {
        min_dfa.states.push_back(i);
    }

    // 成功最小化, 查看各个状态所属的集合
    // for (int i = 0; i < dfa.state_cnt; ++i) {
    //     cout << i << ": ";
    //     for (auto s : state2set[i]) {
    //         cout << s << ' ';
    //     }
    //     cout << endl;
    // }
    return min_dfa;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x680, %rsp            # imm = 0x680
movq %rsi, -0x588(%rbp)
movq %rdi, -0x598(%rbp)
movq %rdi, %rax
movq %rax, -0x590(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x125a0
leaq -0x70(%rbp), %rdi
callq 0x125a0
movq -0x588(%rbp), %rsi
addq $0x28, %rsi
movq %rsi, -0x78(%rbp)
movq -0x78(%rbp), %rdi
callq 0x12900
movq %rax, -0x80(%rbp)
movq -0x78(%rbp), %rdi
callq 0x12930
movq %rax, -0x88(%rbp)
leaq -0x80(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x12960
testb $0x1, %al
jne 0xc542
jmp 0xc64f
leaq -0x80(%rbp), %rdi
callq 0x129a0
movq -0x588(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x8c(%rbp)
addq $0x40, %rdi
movq %rdi, -0x5a8(%rbp)
callq 0x12900
movq -0x5a8(%rbp), %rdi
movq %rax, -0x98(%rbp)
callq 0x12930
movq %rax, -0xa0(%rbp)
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rsi
leaq -0x8c(%rbp), %rdx
callq 0x13980
movq %rax, -0x5a0(%rbp)
jmp 0xc5a7
movq -0x5a0(%rbp), %rax
cmpq $0x0, %rax
je 0xc606
leaq -0x70(%rbp), %rdi
leaq -0x8c(%rbp), %rsi
callq 0x12d00
movb %dl, -0x5b1(%rbp)
movq %rax, -0x5b0(%rbp)
jmp 0xc5d3
movb -0x5b1(%rbp), %al
movq -0x5b0(%rbp), %rcx
movq %rcx, -0xc0(%rbp)
movb %al, -0xb8(%rbp)
jmp 0xc63f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xd6f7
leaq -0x40(%rbp), %rdi
leaq -0x8c(%rbp), %rsi
callq 0x12d00
movb %dl, -0x5c1(%rbp)
movq %rax, -0x5c0(%rbp)
jmp 0xc625
movb -0x5c1(%rbp), %al
movq -0x5c0(%rbp), %rcx
movq %rcx, -0xd0(%rbp)
movb %al, -0xc8(%rbp)
jmp 0xc641
leaq -0x80(%rbp), %rdi
callq 0x12aa0
jmp 0xc529
movq -0x588(%rbp), %rax
movslq 0x4(%rax), %rax
movq %rax, -0x5d8(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x5d0(%rbp)
callq 0x125c0
movq -0x5d8(%rbp), %rsi
movq -0x5d0(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
callq 0x139d0
jmp 0xc690
leaq -0xe9(%rbp), %rdi
callq 0x12660
leaq -0x40(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x12c80
movq %rax, -0x100(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x12cb0
movq %rax, -0x108(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x12e40
testb $0x1, %al
jne 0xc6e6
jmp 0xc765
leaq -0x100(%rbp), %rdi
callq 0x12e70
movl (%rax), %eax
movl %eax, -0x10c(%rbp)
movslq -0x10c(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rdi
leaq -0x40(%rbp), %rsi
callq 0x13a40
jmp 0xc71b
jmp 0xc71d
leaq -0x100(%rbp), %rdi
callq 0x12f40
jmp 0xc6cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0xe9(%rbp), %rdi
callq 0x12660
jmp 0xd6f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xd6eb
leaq -0x70(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rdi
callq 0x12c80
movq %rax, -0x120(%rbp)
movq -0x118(%rbp), %rdi
callq 0x12cb0
movq %rax, -0x128(%rbp)
leaq -0x120(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x12e40
testb $0x1, %al
jne 0xc7af
jmp 0xc7f4
leaq -0x120(%rbp), %rdi
callq 0x12e70
movl (%rax), %eax
movl %eax, -0x12c(%rbp)
movslq -0x12c(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rdi
leaq -0x70(%rbp), %rsi
callq 0x13a40
jmp 0xc7e4
jmp 0xc7e6
leaq -0x120(%rbp), %rdi
callq 0x12f40
jmp 0xc796
leaq -0x160(%rbp), %rdi
callq 0x12f90
leaq -0xe8(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rdi
callq 0x12d50
movq %rax, -0x170(%rbp)
movq -0x168(%rbp), %rdi
callq 0x12d80
movq %rax, -0x178(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x12db0
testb $0x1, %al
jne 0xc850
jmp 0xc8ea
leaq -0x170(%rbp), %rdi
callq 0x12df0
movq %rax, %rsi
leaq -0x1a8(%rbp), %rdi
callq 0x12e10
jmp 0xc86d
leaq -0x160(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x12fb0
movq %rax, -0x5e0(%rbp)
jmp 0xc889
movq -0x5e0(%rbp), %rax
movl $0x1, (%rax)
leaq -0x1a8(%rbp), %rdi
callq 0x12680
leaq -0x170(%rbp), %rdi
callq 0x12f70
jmp 0xc834
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xd6df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x12680
jmp 0xd6df
leaq -0x160(%rbp), %rdi
callq 0x13a70
movl %eax, -0x1ac(%rbp)
jmp 0xc8fe
movb $0x0, -0x1ad(%rbp)
leaq -0x160(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rdi
callq 0x13a90
movq %rax, -0x1c0(%rbp)
movq -0x1b8(%rbp), %rdi
callq 0x13ac0
movq %rax, -0x1c8(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x13af0
testb $0x1, %al
jne 0xc955
jmp 0xcfbc
leaq -0x1c0(%rbp), %rdi
callq 0x13b20
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
callq 0x13b40
jmp 0xc972
leaq -0x230(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x12e10
jmp 0xc987
movq -0x588(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x238(%rbp)
movq -0x238(%rbp), %rdi
callq 0x131a0
movq %rax, -0x240(%rbp)
movq -0x238(%rbp), %rdi
callq 0x131d0
movq %rax, -0x248(%rbp)
leaq -0x240(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x13200
testb $0x1, %al
jne 0xc9db
jmp 0xcf3d
leaq -0x240(%rbp), %rdi
callq 0x13240
movb (%rax), %al
movb %al, -0x249(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x13b80
leaq -0x2b0(%rbp), %rdi
callq 0x125a0
movb $0x0, -0x2b1(%rbp)
leaq -0x230(%rbp), %rax
movq %rax, -0x2c0(%rbp)
movq -0x2c0(%rbp), %rdi
callq 0x12c80
movq %rax, -0x2c8(%rbp)
movq -0x2c0(%rbp), %rdi
callq 0x12cb0
movq %rax, -0x2d0(%rbp)
leaq -0x2c8(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x12e40
testb $0x1, %al
jne 0xca5e
jmp 0xcbb7
leaq -0x2c8(%rbp), %rdi
callq 0x12e70
movq -0x588(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x2d4(%rbp)
addq $0x58, %rdi
movslq -0x2d4(%rbp), %rsi
callq 0x13320
movq %rax, %rdi
leaq -0x249(%rbp), %rsi
callq 0x13ba0
movq %rax, -0x5e8(%rbp)
jmp 0xcaa1
movq -0x5e8(%rbp), %rax
cmpq $0x0, %rax
jne 0xcb24
movb $0x1, -0x2b1(%rbp)
leaq -0x2b0(%rbp), %rdi
leaq -0x2d4(%rbp), %rsi
callq 0x12d00
movb %dl, -0x5f1(%rbp)
movq %rax, -0x5f0(%rbp)
jmp 0xcad7
movb -0x5f1(%rbp), %al
movq -0x5f0(%rbp), %rcx
movq %rcx, -0x2e8(%rbp)
movb %al, -0x2e0(%rbp)
jmp 0xcba4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xcfab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xcf17
movq -0x588(%rbp), %rdi
addq $0x58, %rdi
movslq -0x2d4(%rbp), %rsi
callq 0x13320
movq %rax, %rdi
leaq -0x249(%rbp), %rsi
callq 0x13340
movq %rax, -0x600(%rbp)
jmp 0xcb53
movq -0x600(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x2ec(%rbp)
movslq -0x2ec(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rsi
leaq -0x280(%rbp), %rdi
callq 0x13c00
movq %rax, -0x608(%rbp)
jmp 0xcb8d
movq -0x608(%rbp), %rdi
leaq -0x2d4(%rbp), %rsi
callq 0x12030
jmp 0xcba2
jmp 0xcba4
jmp 0xcba6
leaq -0x2c8(%rbp), %rdi
callq 0x12f40
jmp 0xca42
leaq -0x280(%rbp), %rdi
callq 0x13ce0
cmpq $0x1, %rax
ja 0xcbec
testb $0x1, -0x2b1(%rbp)
je 0xcebf
leaq -0x280(%rbp), %rdi
callq 0x13ce0
cmpq $0x1, %rax
jne 0xcebf
leaq -0x280(%rbp), %rax
movq %rax, -0x2f8(%rbp)
movq -0x2f8(%rbp), %rdi
callq 0x13d00
movq %rax, -0x300(%rbp)
movq -0x2f8(%rbp), %rdi
callq 0x13d30
movq %rax, -0x308(%rbp)
leaq -0x300(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x13d60
testb $0x1, %al
jne 0xcc3c
jmp 0xce08
leaq -0x300(%rbp), %rdi
callq 0x13d90
movq %rax, %rsi
leaq -0x350(%rbp), %rdi
callq 0x13db0
jmp 0xcc59
leaq -0x380(%rbp), %rdi
callq 0x125a0
leaq -0x350(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x388(%rbp)
movq -0x388(%rbp), %rdi
callq 0x12900
movq %rax, -0x390(%rbp)
movq -0x388(%rbp), %rdi
callq 0x12930
movq %rax, -0x398(%rbp)
leaq -0x390(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x12960
testb $0x1, %al
jne 0xccb9
jmp 0xcd46
leaq -0x390(%rbp), %rdi
callq 0x129a0
movl (%rax), %eax
movl %eax, -0x39c(%rbp)
leaq -0x380(%rbp), %rdi
leaq -0x39c(%rbp), %rsi
callq 0x12d00
movb %dl, -0x611(%rbp)
movq %rax, -0x610(%rbp)
jmp 0xccef
movb -0x611(%rbp), %al
movq -0x610(%rbp), %rcx
movq %rcx, -0x3b0(%rbp)
movb %al, -0x3a8(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x12aa0
jmp 0xcc9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x12680
leaq -0x350(%rbp), %rdi
callq 0x13e10
jmp 0xcf17
leaq -0x350(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x3b8(%rbp)
movq -0x3b8(%rbp), %rdi
callq 0x12900
movq %rax, -0x3c0(%rbp)
movq -0x3b8(%rbp), %rdi
callq 0x12930
movq %rax, -0x3c8(%rbp)
leaq -0x3c0(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0x12960
testb $0x1, %al
jne 0xcd97
jmp 0xcddf
leaq -0x3c0(%rbp), %rdi
callq 0x129a0
movl (%rax), %eax
movl %eax, -0x3cc(%rbp)
movslq -0x3cc(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rdi
leaq -0x380(%rbp), %rsi
callq 0x13a40
jmp 0xcdcf
jmp 0xcdd1
leaq -0x3c0(%rbp), %rdi
callq 0x12aa0
jmp 0xcd7e
leaq -0x380(%rbp), %rdi
callq 0x12680
leaq -0x350(%rbp), %rdi
callq 0x13e10
leaq -0x300(%rbp), %rdi
callq 0x13e40
jmp 0xcc20
testb $0x1, -0x2b1(%rbp)
je 0xceac
leaq -0x2b0(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movq -0x3d8(%rbp), %rdi
callq 0x12c80
movq %rax, -0x3e0(%rbp)
movq -0x3d8(%rbp), %rdi
callq 0x12cb0
movq %rax, -0x3e8(%rbp)
leaq -0x3e0(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x12e40
testb $0x1, %al
jne 0xce62
jmp 0xceaa
leaq -0x3e0(%rbp), %rdi
callq 0x12e70
movl (%rax), %eax
movl %eax, -0x3ec(%rbp)
movslq -0x3ec(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x13a40
jmp 0xce9a
jmp 0xce9c
leaq -0x3e0(%rbp), %rdi
callq 0x12f40
jmp 0xce49
jmp 0xceac
movb $0x1, -0x1ad(%rbp)
movl $0xe, -0x3f0(%rbp)
jmp 0xcede
testb $0x1, -0x1ad(%rbp)
je 0xced4
movl $0xe, -0x3f0(%rbp)
jmp 0xcede
movl $0x0, -0x3f0(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x12680
leaq -0x280(%rbp), %rdi
callq 0x13e70
movl -0x3f0(%rbp), %eax
testl %eax, %eax
je 0xcf04
jmp 0xcf02
jmp 0xcf3d
jmp 0xcf06
leaq -0x240(%rbp), %rdi
callq 0x13420
jmp 0xc9bf
leaq -0x2b0(%rbp), %rdi
callq 0x12680
leaq -0x280(%rbp), %rdi
callq 0x13e70
leaq -0x230(%rbp), %rdi
callq 0x12680
jmp 0xcfab
testb $0x1, -0x1ad(%rbp)
je 0xcf52
movl $0xc, -0x3f0(%rbp)
jmp 0xcf5c
movl $0x0, -0x3f0(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x12680
movl -0x3f0(%rbp), %eax
testl %eax, %eax
jne 0xcf7e
jmp 0xcf74
movl $0x0, -0x3f0(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x13e90
movl -0x3f0(%rbp), %eax
testl %eax, %eax
je 0xcf98
jmp 0xcf96
jmp 0xcfbc
jmp 0xcf9a
leaq -0x1c0(%rbp), %rdi
callq 0x13eb0
jmp 0xc939
leaq -0x200(%rbp), %rdi
callq 0x13e90
jmp 0xd6df
leaq -0x160(%rbp), %rdi
callq 0x13ee0
leaq -0xe8(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movq -0x3f8(%rbp), %rdi
callq 0x12d50
movq %rax, -0x400(%rbp)
movq -0x3f8(%rbp), %rdi
callq 0x12d80
movq %rax, -0x408(%rbp)
leaq -0x400(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x12db0
testb $0x1, %al
jne 0xd018
jmp 0xd09b
leaq -0x400(%rbp), %rdi
callq 0x12df0
movq %rax, %rsi
leaq -0x438(%rbp), %rdi
callq 0x12e10
jmp 0xd035
leaq -0x160(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x12fb0
movq %rax, -0x620(%rbp)
jmp 0xd051
movq -0x620(%rbp), %rax
movl $0x1, (%rax)
leaq -0x438(%rbp), %rdi
callq 0x12680
leaq -0x400(%rbp), %rdi
callq 0x12f70
jmp 0xcffc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x12680
jmp 0xd6df
movslq -0x1ac(%rbp), %rax
movq %rax, -0x628(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x13a70
movq %rax, %rcx
movq -0x628(%rbp), %rax
cmpq %rcx, %rax
jne 0xd0c6
jmp 0xd0dd
leaq -0x160(%rbp), %rdi
callq 0x13a70
movl %eax, -0x1ac(%rbp)
jmp 0xc8fc
movq -0x598(%rbp), %rdi
movb $0x0, -0x439(%rbp)
callq 0x48d0
movl $0x0, -0x440(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x12f90
leaq -0x160(%rbp), %rax
movq %rax, -0x478(%rbp)
movq -0x478(%rbp), %rdi
callq 0x13a90
movq %rax, -0x480(%rbp)
movq -0x478(%rbp), %rdi
callq 0x13ac0
movq %rax, -0x488(%rbp)
leaq -0x480(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x13af0
testb $0x1, %al
jne 0xd156
jmp 0xd209
leaq -0x480(%rbp), %rdi
callq 0x13b20
movq %rax, %rsi
leaq -0x4c0(%rbp), %rdi
callq 0x13b40
jmp 0xd173
movl -0x440(%rbp), %eax
movl %eax, -0x634(%rbp)
incl %eax
movl %eax, -0x440(%rbp)
leaq -0x470(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x12fb0
movq %rax, -0x630(%rbp)
jmp 0xd1a3
movq -0x630(%rbp), %rax
movl -0x634(%rbp), %ecx
movl %ecx, (%rax)
leaq -0x4c0(%rbp), %rdi
callq 0x13e90
leaq -0x480(%rbp), %rdi
callq 0x13eb0
jmp 0xd13a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xd67f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0x13e90
jmp 0xd67f
movslq -0x440(%rbp), %rax
movq %rax, -0x648(%rbp)
leaq -0x4d9(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0x7390
movq -0x648(%rbp), %rsi
movq -0x640(%rbp), %rdx
leaq -0x4d8(%rbp), %rdi
callq 0x13f00
jmp 0xd246
leaq -0x4d9(%rbp), %rdi
callq 0x75b0
movl $0x0, -0x4e0(%rbp)
movq -0x588(%rbp), %rcx
movl -0x4e0(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0xd3eb
movq -0x588(%rbp), %rdi
addq $0x58, %rdi
movslq -0x4e0(%rbp), %rsi
callq 0x13320
movq %rax, -0x4e8(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0x13f70
movq %rax, -0x4f0(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0x13fa0
movq %rax, -0x4f8(%rbp)
leaq -0x4f0(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x13fd0
testb $0x1, %al
jne 0xd2d2
jmp 0xd3d5
leaq -0x4f0(%rbp), %rdi
callq 0x14000
movq (%rax), %rax
movq %rax, -0x500(%rbp)
movslq -0x4fc(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rsi
leaq -0x470(%rbp), %rdi
callq 0x12fb0
movq %rax, -0x650(%rbp)
jmp 0xd313
movq -0x650(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x65c(%rbp)
movslq -0x4e0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rsi
leaq -0x470(%rbp), %rdi
callq 0x12fb0
movq %rax, -0x658(%rbp)
jmp 0xd34d
movq -0x658(%rbp), %rax
movslq (%rax), %rsi
leaq -0x4d8(%rbp), %rdi
callq 0x13320
movq %rax, %rdi
leaq -0x500(%rbp), %rsi
callq 0x13340
movq %rax, -0x668(%rbp)
jmp 0xd37b
movq -0x668(%rbp), %rax
movl -0x65c(%rbp), %ecx
movl %ecx, (%rax)
leaq -0x4f0(%rbp), %rdi
callq 0x14020
jmp 0xd2b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x4d9(%rbp), %rdi
callq 0x75b0
jmp 0xd67f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0xd673
jmp 0xd3d7
movl -0x4e0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4e0(%rbp)
jmp 0xd25c
movq -0x598(%rbp), %rdi
addq $0x58, %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x13670
jmp 0xd404
movq -0x588(%rbp), %rcx
movq -0x598(%rbp), %rax
movl (%rcx), %ecx
movl %ecx, (%rax)
movl -0x440(%rbp), %ecx
movl %ecx, 0x4(%rax)
movl $0x0, 0x8(%rax)
leaq -0x530(%rbp), %rdi
callq 0x125a0
movq -0x588(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x538(%rbp)
movq -0x538(%rbp), %rdi
callq 0x12900
movq %rax, -0x540(%rbp)
movq -0x538(%rbp), %rdi
callq 0x12930
movq %rax, -0x548(%rbp)
leaq -0x540(%rbp), %rdi
leaq -0x548(%rbp), %rsi
callq 0x12960
testb $0x1, %al
jne 0xd486
jmp 0xd535
leaq -0x540(%rbp), %rdi
callq 0x129a0
movl (%rax), %eax
movl %eax, -0x54c(%rbp)
movslq -0x54c(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x12720
movq %rax, %rsi
leaq -0x470(%rbp), %rdi
callq 0x12fb0
movq %rax, -0x670(%rbp)
jmp 0xd4c5
movq -0x670(%rbp), %rsi
leaq -0x530(%rbp), %rdi
callq 0x12d00
movb %dl, -0x679(%rbp)
movq %rax, -0x678(%rbp)
jmp 0xd4e7
movb -0x679(%rbp), %al
movq -0x678(%rbp), %rcx
movq %rcx, -0x560(%rbp)
movb %al, -0x558(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x12aa0
jmp 0xd46a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x12680
jmp 0xd673
leaq -0x530(%rbp), %rax
movq %rax, -0x568(%rbp)
movq -0x568(%rbp), %rdi
callq 0x12c80
movq %rax, -0x570(%rbp)
movq -0x568(%rbp), %rdi
callq 0x12cb0
movq %rax, -0x578(%rbp)
leaq -0x570(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x12e40
testb $0x1, %al
jne 0xd582
jmp 0xd5bf
leaq -0x570(%rbp), %rdi
callq 0x12e70
movq -0x598(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x57c(%rbp)
addq $0x40, %rdi
leaq -0x57c(%rbp), %rsi
callq 0x12030
jmp 0xd5af
jmp 0xd5b1
leaq -0x570(%rbp), %rdi
callq 0x12f40
jmp 0xd569
movq -0x598(%rbp), %rdi
addq $0x40, %rdi
callq 0x5530
movq -0x588(%rbp), %rsi
movq -0x598(%rbp), %rdi
movl %eax, 0xc(%rdi)
addq $0x10, %rsi
addq $0x10, %rdi
callq 0x13440
jmp 0xd5ef
movl $0x0, -0x580(%rbp)
movl -0x580(%rbp), %eax
cmpl -0x440(%rbp), %eax
jge 0xd633
movq -0x598(%rbp), %rdi
addq $0x28, %rdi
leaq -0x580(%rbp), %rsi
callq 0x12030
jmp 0xd620
jmp 0xd622
movl -0x580(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x580(%rbp)
jmp 0xd5f9
movb $0x1, -0x439(%rbp)
movl $0x1, -0x3f0(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x12680
leaq -0x4d8(%rbp), %rdi
callq 0x8740
leaq -0x470(%rbp), %rdi
callq 0x138e0
testb $0x1, -0x439(%rbp)
jne 0xd6a5
jmp 0xd699
leaq -0x4d8(%rbp), %rdi
callq 0x8740
leaq -0x470(%rbp), %rdi
callq 0x138e0
movq -0x598(%rbp), %rdi
callq 0x4a00
jmp 0xd6df
movq -0x598(%rbp), %rdi
callq 0x4a00
leaq -0x160(%rbp), %rdi
callq 0x138e0
leaq -0xe8(%rbp), %rdi
callq 0x13920
leaq -0x70(%rbp), %rdi
callq 0x12680
leaq -0x40(%rbp), %rdi
callq 0x12680
movq -0x590(%rbp), %rax
addq $0x680, %rsp            # imm = 0x680
popq %rbp
retq
leaq -0x160(%rbp), %rdi
callq 0x138e0
leaq -0xe8(%rbp), %rdi
callq 0x13920
leaq -0x70(%rbp), %rdi
callq 0x12680
leaq -0x40(%rbp), %rdi
callq 0x12680
movq -0xa8(%rbp), %rdi
callq 0x34e0
nopw %cs:(%rax,%rax)