// File: zimpha[P]MiniSQL/interpreter.cc
// Function: Interpreter::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
bool Interpreter::parse(std::string input) {
    if (input == "quit") {
        api.bm.BufferManagerFlush();
        printf("Flush finished\n");
        return true;
    }

    if (input == "flush") {
        api.bm.BufferManagerFlush();
        printf("Flush finished\n");
        return false;
    }

    if (input == "") return false;
    
    for (size_t i = 0; i < input.length(); ++ i) {
        if (input[i] == '(' || input[i] == ')' || input[i] == ',') {
            input.insert(i, " ");
            input.insert(i + 2, " ");
            i += 2;
        }
    }
    std::strstream sin;
    sin << input;

    std::string oper, null;
    sin >> oper;

    if (oper == "execfile") {
        std::string filename;
        sin >> filename;
        return execfile(filename);
    }
    else if (oper == "create") {
        std::string type;
        sin >> type;

        if (type == "table") {
            std::string tableName;
            sin >> tableName >> null;
            // null == "("

            std::vector<AttrType> data;
            int pk = 0x3f3f3f3f;

            while (1) {
                std::string attrName;
                sin >> attrName;

                if (attrName == "primary") {
                    sin >> null; // null == "key"
                    sin >> null; // null == "("
                    std::string pkName;
                    sin >> pkName;

                    for (size_t i = 0; i < data.size(); ++ i) {
                        if (data[i].name == pkName) {
                            pk = i;
                            break;
                        }
                    }
                    break;
                }

                std::string dataType;
                int length = 0;
                sin >> dataType;

                if (dataType == "char") { // get char length
                    sin >> null; // null == "("
                    sin >> length;
                    sin >> null; // null == ")"
                }
                std::string unique;
                sin >> unique;

                AttrType newAttr;
                if (unique == "unique") {
                    newAttr.unique = true;
                    sin >> null; // null: ","
                }
                else {
                    // unique == ","
                    newAttr.unique = false;
                }
                newAttr.name = attrName;
                if (dataType == "char") {
                    newAttr.type = 2;
                    newAttr.length = length + 1;
                }
                else if (dataType == "int") {
                    newAttr.type = 0;
                    newAttr.length = 0;
                }
                else if (dataType == "float") {
                    newAttr.type = 1;
                    newAttr.length = 0;
                }
                else {
                    std::cout << "unrecognized data type: " << dataType << std::endl;
                    return false;
                }
                data.push_back(newAttr);
            }
            if (pk == 0x3f3f3f3f) {
                std::cout << "don't set primary key or no such attribute" << std::endl;
                return false;
            }
            else {
                Response res = api.createTable(tableName, data, pk);
                if (!res.succeed) {
                    std::cout << res.info << std::endl;
                    return false;
                }
                else {
                    std::cout << "OK" << std::endl;
                    return false;
                }
            }
        }
        else if (type == "index") {
            std::string indexName, tableName, attrName;
            sin >> indexName >> null >> tableName >> null >> attrName;
            // first null == "on"
            // second null == "("
            Response res = api.createIndex(indexName, tableName, attrName);
            if (!res.succeed) {
                std::cout << res.info << std::endl;
                return false;
            }
            else {
                std::cout << "OK" << std::endl;
                return false;
            }
        }
        else {
            std::cout << "syntax error" << std::endl;
            return false;
        }
    }
    else if (oper == "drop") {
        std::string type;
        sin >> type;
        if (type == "table") {
            std::string tableName;
            sin >> tableName;
            Response res = api.dropTable(tableName);
            if (!res.succeed) {
                std::cout << res.info << std::endl;
                return false;
            }
            else {
                std::cout << "OK" << std::endl;
                return false;
            }
        }
        else if (type == "index") {
            std::string indexName;
            sin >> indexName;
            Response res = api.dropIndex(indexName);
            if (!res.succeed) {
                std::cout << res.info << std::endl;
                return false;
            }
            else {
                std::cout << "OK" << std::endl;
                return false;
            }
        }
        else {
            std::cout << "syntax error" << std::endl;
            return false;
        }
    }
    else if (oper == "insert") {
        std::string tableName;
        sin >> null >> tableName >> null >> null;
        // first null == "into"
        // second null == "values"
        // third null == "("
        std::vector<element> entry;
        while (1) {
            std::string data;
            sin >> data;
            entry.push_back(parseElement(data));
            sin >> null; // null == ","
            if (null == ")") {
                break;
            }
        }
        Response res = api.Insert(tableName, entry);
        if (!res.succeed) {
            std::cout << res.info << std::endl;
            return false;
        }
        else {
            std::cout << "OK" << std::endl;
            return false;
        }
    }
    else if (oper == "select") {
        std::string tableName;
        sin >> null >> null >> tableName;
        // first null == "*"
        // second null == "from"
        Filter filter;
        if (!api.cm.hasTable(tableName + ".table")) {
            std::cout << "table does not exist" << std::endl;
            return false;
        }
        Table nt = api.cm.loadTable(tableName + ".table");
        while (sin >> null) { // null == "where", null == "and"
            std::string attrName, ope, data;
            sin >> attrName >> ope >> data;
            int index = -1, op;
            for (size_t i = 0; i < nt.attributes.size(); ++ i) {
                if (nt.attributes[i].name == attrName) {
                    index = i;
                    break;
                }
            }
            if (index == -1) {
                std::cout << "attribute does not exist" << std::endl;
                return false;
            }
            if (ope == "<") op = 0;
            else if (ope == "<=") op = 1;
            else if (ope == "=") op = 2;
            else if (ope == ">=") op = 3;
            else if (ope == ">") op = 4;
            else if (ope == "<>") op = 5;
            else {
                std::cout << "syntax error" << std::endl;
                return false;
            }
            filter.addRule(Rule(index, op, parseElement(data)));
        }
        Response res = api.Select(tableName, filter);
        if (!res.succeed) {
            std::cout << res.info << std::endl;
            return false;
        }
        else {
            printSelectResult(nt, res);
            return false;
        }
    }
    else if (oper == "delete") {
        std::string tableName;
        sin >> null >> tableName;// null == from;
        Filter filter;
        if (!api.cm.hasTable(tableName + ".table")) {
            std::cout << "table does not exist" << std::endl;
            return false;
        }
        Table nt = api.cm.loadTable(tableName + ".table");
        while (sin >> null) { // null == "where", null == "and"
            std::string attrName, ope, data;
            sin >> attrName >> ope >> data;
            int index = -1, op;
            for (size_t i = 0; i < nt.attributes.size(); ++ i) {
                if (nt.attributes[i].name == attrName) {
                    index = i;
                    break;
                }
            }
            if (index == -1) {
                std::cout << "attribute does not exist" << std::endl;
                return false;
            }
            if (ope == "<") op = 0;
            else if (ope == "<=") op = 1;
            else if (ope == "=") op = 2;
            else if (ope == ">=") op = 3;
            else if (ope == ">") op = 4;
            else if (ope == "<>") op = 5;
            else {
                std::cout << "syntax error" << std::endl;
                return false;
            }
            filter.addRule(Rule(index, op, parseElement(data)));
        }
        Response res = api.Delete(tableName, filter);
        if (!res.succeed) {
            std::cout << res.info << std::endl;
        }
        else {
            std::cout << "delete OK" << std::endl;
        }
    }
    else {
        std::cout << "syntax error" << std::endl;
        return false;
    }
    return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd10, %rsp            # imm = 0xD10
movq %rsi, -0xa48(%rbp)
movq %rdi, %rax
movq -0xa48(%rbp), %rdi
movq %rdi, -0xa40(%rbp)
movq %rax, -0x10(%rbp)
movq %rdi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa38(%rbp)
leaq 0x8e6f(%rip), %rsi      # 0x2758c
callq 0x219c0
testb $0x1, %al
jne 0x1e728
jmp 0x1e752
movq -0xa38(%rbp), %rdi
addq $0x98, %rdi
callq 0xf6b0
leaq 0x8e4f(%rip), %rdi      # 0x27591
movb $0x0, %al
callq 0x3060
movb $0x1, -0x1(%rbp)
jmp 0x20b5a
movq -0xa40(%rbp), %rdi
leaq 0x8e41(%rip), %rsi      # 0x275a1
callq 0x219c0
testb $0x1, %al
jne 0x1e76b
jmp 0x1e795
movq -0xa38(%rbp), %rdi
addq $0x98, %rdi
callq 0xf6b0
leaq 0x8e0c(%rip), %rdi      # 0x27591
movb $0x0, %al
callq 0x3060
movb $0x0, -0x1(%rbp)
jmp 0x20b5a
movq -0xa40(%rbp), %rdi
leaq 0x8acc(%rip), %rsi      # 0x2726f
callq 0x219c0
testb $0x1, %al
jne 0x1e7ae
jmp 0x1e7b7
movb $0x0, -0x1(%rbp)
jmp 0x20b5a
movq $0x0, -0x20(%rbp)
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0xa50(%rbp)
callq 0x3460
movq %rax, %rcx
movq -0xa50(%rbp), %rax
cmpq %rcx, %rax
jae 0x1e882
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x35a0
movsbl (%rax), %eax
cmpl $0x28, %eax
je 0x1e831
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x35a0
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0x1e831
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x35a0
movsbl (%rax), %eax
cmpl $0x2c, %eax
jne 0x1e86f
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq 0x8da2(%rip), %rdx      # 0x275e5
callq 0x30c0
movq -0xa40(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x2, %rsi
leaq 0x8d87(%rip), %rdx      # 0x275e5
callq 0x30c0
movq -0x20(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x20(%rbp)
jmp 0x1e871
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1e7bf
leaq -0x198(%rbp), %rdi
callq 0x33f0
movq -0xa40(%rbp), %rsi
leaq -0x188(%rbp), %rdi
callq 0x3280
jmp 0x1e8a3
leaq -0x1c8(%rbp), %rdi
movq %rdi, -0xa58(%rbp)
callq 0x3410
leaq -0x1e8(%rbp), %rdi
callq 0x3410
movq -0xa58(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1e8d7
leaq 0x8cc9(%rip), %rsi      # 0x275a7
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xa59(%rbp)
jmp 0x1e8f2
movb -0xa59(%rbp), %al
testb $0x1, %al
jne 0x1e901
jmp 0x1e9fc
leaq -0x208(%rbp), %rdi
movq %rdi, -0xa68(%rbp)
callq 0x3410
movq -0xa68(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1e929
leaq -0x228(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x3130
jmp 0x1e93e
movq -0xa38(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x20b80
movb %al, -0xa69(%rbp)
jmp 0x1e959
movb -0xa69(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x35b8
movl $0x1, -0x22c(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x35b8
jmp 0x20b0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20b4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20b34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1e9eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x35b8
leaq -0x208(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
leaq 0x8bad(%rip), %rsi      # 0x275b0
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xa6a(%rbp)
jmp 0x1ea17
movb -0xa6a(%rbp), %al
testb $0x1, %al
jne 0x1ea26
jmp 0x1f3c5
leaq -0x250(%rbp), %rdi
movq %rdi, -0xa78(%rbp)
callq 0x3410
movq -0xa78(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1ea4e
leaq 0x85e1(%rip), %rsi      # 0x27036
leaq -0x250(%rbp), %rdi
callq 0x219c0
movb %al, -0xa79(%rbp)
jmp 0x1ea69
movb -0xa79(%rbp), %al
testb $0x1, %al
jne 0x1ea78
jmp 0x1f148
leaq -0x270(%rbp), %rdi
movq %rdi, -0xa90(%rbp)
callq 0x3410
movq -0xa90(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
movq %rax, -0xa88(%rbp)
jmp 0x1eaa7
movq -0xa88(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1eabc
leaq -0x288(%rbp), %rdi
callq 0x219f0
movl $0x3f3f3f3f, -0x28c(%rbp) # imm = 0x3F3F3F3F
jmp 0x1ead4
leaq -0x2b0(%rbp), %rdi
movq %rdi, -0xa98(%rbp)
callq 0x3410
movq -0xa98(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1eafc
leaq 0x8ab4(%rip), %rsi      # 0x275b7
leaq -0x2b0(%rbp), %rdi
callq 0x219c0
movb %al, -0xa99(%rbp)
jmp 0x1eb17
movb -0xa99(%rbp), %al
testb $0x1, %al
jne 0x1eb26
jmp 0x1ec86
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1eb3b
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1eb50
leaq -0x2d0(%rbp), %rdi
movq %rdi, -0xaa8(%rbp)
callq 0x3410
movq -0xaa8(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1eb78
movq $0x0, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rax
movq %rax, -0xab0(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x7750
movq %rax, %rcx
movq -0xab0(%rbp), %rax
cmpq %rcx, %rax
jae 0x1ec6b
movq -0x2d8(%rbp), %rsi
leaq -0x288(%rbp), %rdi
callq 0x7810
movq %rax, %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x7780
testb $0x1, %al
jne 0x1ebd8
jmp 0x1ec52
movq -0x2d8(%rbp), %rax
movl %eax, -0x28c(%rbp)
jmp 0x1ec6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f3b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f137
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1efb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x35b8
jmp 0x1efb7
jmp 0x1ec54
movq -0x2d8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2d8(%rbp)
jmp 0x1eb83
movl $0x6, -0x22c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x35b8
jmp 0x1ef6c
leaq -0x2f8(%rbp), %rdi
movq %rdi, -0xab8(%rbp)
callq 0x3410
movq -0xab8(%rbp), %rsi
movl $0x0, -0x2fc(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1ecb8
leaq 0x8900(%rip), %rsi      # 0x275bf
leaq -0x2f8(%rbp), %rdi
callq 0x219c0
movb %al, -0xab9(%rbp)
jmp 0x1ecd3
movb -0xab9(%rbp), %al
testb $0x1, %al
jne 0x1ecdf
jmp 0x1ed37
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1ecf4
leaq -0x198(%rbp), %rdi
leaq -0x2fc(%rbp), %rsi
callq 0x31c0
jmp 0x1ed09
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1ed1e
jmp 0x1ed37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1efab
leaq -0x320(%rbp), %rdi
movq %rdi, -0xac8(%rbp)
callq 0x3410
movq -0xac8(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1ed5f
leaq -0x380(%rbp), %rdi
callq 0x1bfc0
leaq 0x830f(%rip), %rsi      # 0x27081
leaq -0x320(%rbp), %rdi
callq 0x219c0
movb %al, -0xac9(%rbp)
jmp 0x1ed86
movb -0xac9(%rbp), %al
testb $0x1, %al
jne 0x1ed92
jmp 0x1edea
movb $0x1, -0x358(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1edae
jmp 0x1edf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1ef9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x9fd0
jmp 0x1ef9f
movb $0x0, -0x358(%rbp)
leaq -0x380(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x3050
jmp 0x1ee06
leaq 0x87b2(%rip), %rsi      # 0x275bf
leaq -0x2f8(%rbp), %rdi
callq 0x219c0
movb %al, -0xaca(%rbp)
jmp 0x1ee21
movb -0xaca(%rbp), %al
testb $0x1, %al
jne 0x1ee2d
jmp 0x1ee4b
movl $0x2, -0x360(%rbp)
movl -0x2fc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x35c(%rbp)
jmp 0x1ef29
leaq 0x8772(%rip), %rsi      # 0x275c4
leaq -0x2f8(%rbp), %rdi
callq 0x219c0
movb %al, -0xacb(%rbp)
jmp 0x1ee66
movb -0xacb(%rbp), %al
testb $0x1, %al
jne 0x1ee72
jmp 0x1ee8b
movl $0x0, -0x360(%rbp)
movl $0x0, -0x35c(%rbp)
jmp 0x1ef27
leaq 0x8736(%rip), %rsi      # 0x275c8
leaq -0x2f8(%rbp), %rdi
callq 0x219c0
movb %al, -0xacc(%rbp)
jmp 0x1eea6
movb -0xacc(%rbp), %al
testb $0x1, %al
jne 0x1eeb2
jmp 0x1eec8
movl $0x1, -0x360(%rbp)
movl $0x0, -0x35c(%rbp)
jmp 0x1ef25
movq 0x1a0f9(%rip), %rdi     # 0x38fc8
leaq 0x86f8(%rip), %rsi      # 0x275ce
callq 0x32c0
movq %rax, -0xad8(%rbp)
jmp 0x1eee4
movq -0xad8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x3280
movq %rax, -0xae0(%rbp)
jmp 0x1ef00
movq -0xae0(%rbp), %rdi
movq 0x1a09a(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1ef15
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1ef48
jmp 0x1ef27
jmp 0x1ef29
leaq -0x288(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x1bff0
jmp 0x1ef3e
movl $0x0, -0x22c(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x9fd0
leaq -0x320(%rbp), %rdi
callq 0x35b8
leaq -0x2f8(%rbp), %rdi
callq 0x35b8
leaq -0x2b0(%rbp), %rdi
callq 0x35b8
movl -0x22c(%rbp), %eax
movl %eax, -0xae4(%rbp)
testl %eax, %eax
je 0x1ef9a
jmp 0x1ef8a
movl -0xae4(%rbp), %eax
subl $0x6, %eax
je 0x1efc8
jmp 0x1f10e
jmp 0x1ead2
leaq -0x320(%rbp), %rdi
callq 0x35b8
leaq -0x2f8(%rbp), %rdi
callq 0x35b8
leaq -0x2b0(%rbp), %rdi
callq 0x35b8
jmp 0x1f12b
cmpl $0x3f3f3f3f, -0x28c(%rbp) # imm = 0x3F3F3F3F
jne 0x1f02f
movq 0x19fed(%rip), %rdi     # 0x38fc8
leaq 0x8605(%rip), %rsi      # 0x275e7
callq 0x32c0
movq %rax, -0xaf0(%rbp)
jmp 0x1eff0
movq -0xaf0(%rbp), %rdi
movq 0x19faa(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f005
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1f10e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f12b
movq -0xa38(%rbp), %rsi
movl -0x28c(%rbp), %r8d
leaq -0x3c0(%rbp), %rdi
leaq -0x270(%rbp), %rdx
leaq -0x288(%rbp), %rcx
callq 0x45e0
jmp 0x1f059
testb $0x1, -0x3c0(%rbp)
jne 0x1f0c3
leaq -0x3b8(%rbp), %rsi
movq 0x19f58(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xaf8(%rbp)
jmp 0x1f07e
movq -0xaf8(%rbp), %rdi
movq 0x19f1c(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f093
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1f102
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x78f0
jmp 0x1f12b
movq 0x19efe(%rip), %rdi     # 0x38fc8
leaq 0x859c(%rip), %rsi      # 0x2766d
callq 0x32c0
movq %rax, -0xb00(%rbp)
jmp 0x1f0df
movq -0xb00(%rbp), %rdi
movq 0x19ebb(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f0f4
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x78f0
leaq -0x288(%rbp), %rdi
callq 0x9e50
leaq -0x270(%rbp), %rdi
callq 0x35b8
jmp 0x1f3a3
leaq -0x288(%rbp), %rdi
callq 0x9e50
leaq -0x270(%rbp), %rdi
callq 0x35b8
jmp 0x1f3b4
leaq 0x7fd3(%rip), %rsi      # 0x27122
leaq -0x250(%rbp), %rdi
callq 0x219c0
movb %al, -0xb01(%rbp)
jmp 0x1f163
movb -0xb01(%rbp), %al
testb $0x1, %al
jne 0x1f172
jmp 0x1f364
leaq -0x3e0(%rbp), %rdi
movq %rdi, -0xb18(%rbp)
callq 0x3410
leaq -0x400(%rbp), %rdi
callq 0x3410
leaq -0x420(%rbp), %rdi
callq 0x3410
movq -0xb18(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
movq %rax, -0xb10(%rbp)
jmp 0x1f1b9
movq -0xb10(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xb20(%rbp)
jmp 0x1f1d5
movq -0xb20(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x33a0
movq %rax, -0xb28(%rbp)
jmp 0x1f1f1
movq -0xb28(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xb30(%rbp)
jmp 0x1f20d
movq -0xb30(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x33a0
jmp 0x1f222
movq -0xa38(%rbp), %rsi
leaq -0x460(%rbp), %rdi
leaq -0x3e0(%rbp), %rdx
leaq -0x400(%rbp), %rcx
leaq -0x420(%rbp), %r8
callq 0x3b70
jmp 0x1f24c
testb $0x1, -0x460(%rbp)
jne 0x1f2cd
leaq -0x458(%rbp), %rsi
movq 0x19d65(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xb38(%rbp)
jmp 0x1f271
movq -0xb38(%rbp), %rdi
movq 0x19d29(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f286
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1f30c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f33e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x78f0
jmp 0x1f33e
movq 0x19cf4(%rip), %rdi     # 0x38fc8
leaq 0x8392(%rip), %rsi      # 0x2766d
callq 0x32c0
movq %rax, -0xb40(%rbp)
jmp 0x1f2e9
movq -0xb40(%rbp), %rdi
movq 0x19cb1(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f2fe
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x78f0
leaq -0x420(%rbp), %rdi
callq 0x35b8
leaq -0x400(%rbp), %rdi
callq 0x35b8
leaq -0x3e0(%rbp), %rdi
callq 0x35b8
jmp 0x1f3a3
leaq -0x420(%rbp), %rdi
callq 0x35b8
leaq -0x400(%rbp), %rdi
callq 0x35b8
leaq -0x3e0(%rbp), %rdi
callq 0x35b8
jmp 0x1f3b4
movq 0x19c5d(%rip), %rdi     # 0x38fc8
leaq 0x82a0(%rip), %rsi      # 0x27612
callq 0x32c0
movq %rax, -0xb48(%rbp)
jmp 0x1f380
movq -0xb48(%rbp), %rdi
movq 0x19c1a(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f395
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x35b8
jmp 0x20b0e
leaq -0x250(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
leaq 0x7f3c(%rip), %rsi      # 0x27308
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xb49(%rbp)
jmp 0x1f3e0
movb -0xb49(%rbp), %al
testb $0x1, %al
jne 0x1f3ef
jmp 0x1f742
leaq -0x480(%rbp), %rdi
movq %rdi, -0xb58(%rbp)
callq 0x3410
movq -0xb58(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1f417
leaq 0x7c18(%rip), %rsi      # 0x27036
leaq -0x480(%rbp), %rdi
callq 0x219c0
movb %al, -0xb59(%rbp)
jmp 0x1f432
movb -0xb59(%rbp), %al
testb $0x1, %al
jne 0x1f441
jmp 0x1f58e
leaq -0x4a0(%rbp), %rdi
movq %rdi, -0xb68(%rbp)
callq 0x3410
movq -0xb68(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1f469
movq -0xa38(%rbp), %rsi
leaq -0x4e0(%rbp), %rdi
leaq -0x4a0(%rbp), %rdx
callq 0x4900
jmp 0x1f485
testb $0x1, -0x4e0(%rbp)
jne 0x1f521
leaq -0x4d8(%rbp), %rsi
movq 0x19b28(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xb70(%rbp)
jmp 0x1f4ae
movq -0xb70(%rbp), %rdi
movq 0x19aec(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f4c3
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1f560
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f731
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f57d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x78f0
jmp 0x1f57d
movq 0x19aa0(%rip), %rdi     # 0x38fc8
leaq 0x813e(%rip), %rsi      # 0x2766d
callq 0x32c0
movq %rax, -0xb78(%rbp)
jmp 0x1f53d
movq -0xb78(%rbp), %rdi
movq 0x19a5d(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f552
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x78f0
leaq -0x4a0(%rbp), %rdi
callq 0x35b8
jmp 0x1f720
leaq -0x4a0(%rbp), %rdi
callq 0x35b8
jmp 0x1f731
leaq 0x7b8d(%rip), %rsi      # 0x27122
leaq -0x480(%rbp), %rdi
callq 0x219c0
movb %al, -0xb79(%rbp)
jmp 0x1f5a9
movb -0xb79(%rbp), %al
testb $0x1, %al
jne 0x1f5b8
jmp 0x1f6e1
leaq -0x500(%rbp), %rdi
movq %rdi, -0xb88(%rbp)
callq 0x3410
movq -0xb88(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1f5e0
movq -0xa38(%rbp), %rsi
leaq -0x540(%rbp), %rdi
leaq -0x500(%rbp), %rdx
callq 0x4200
jmp 0x1f5fc
testb $0x1, -0x540(%rbp)
jne 0x1f67a
leaq -0x538(%rbp), %rsi
movq 0x199b5(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xb90(%rbp)
jmp 0x1f621
movq -0xb90(%rbp), %rdi
movq 0x19979(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f636
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1f6b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f6d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x78f0
jmp 0x1f6d3
movq 0x19947(%rip), %rdi     # 0x38fc8
leaq 0x7fe5(%rip), %rsi      # 0x2766d
callq 0x32c0
movq %rax, -0xb98(%rbp)
jmp 0x1f696
movq -0xb98(%rbp), %rdi
movq 0x19904(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f6ab
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x78f0
leaq -0x500(%rbp), %rdi
callq 0x35b8
jmp 0x1f720
leaq -0x500(%rbp), %rdi
callq 0x35b8
jmp 0x1f731
movq 0x198e0(%rip), %rdi     # 0x38fc8
leaq 0x7f23(%rip), %rsi      # 0x27612
callq 0x32c0
movq %rax, -0xba0(%rbp)
jmp 0x1f6fd
movq -0xba0(%rbp), %rdi
movq 0x1989d(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f712
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x35b8
jmp 0x20b0e
leaq -0x480(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
leaq 0x7c0b(%rip), %rsi      # 0x27354
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xba1(%rbp)
jmp 0x1f75d
movb -0xba1(%rbp), %al
testb $0x1, %al
jne 0x1f76c
jmp 0x1fae4
leaq -0x560(%rbp), %rdi
callq 0x3410
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xbb0(%rbp)
jmp 0x1f794
movq -0xbb0(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x33a0
movq %rax, -0xbb8(%rbp)
jmp 0x1f7b0
movq -0xbb8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xbc0(%rbp)
jmp 0x1f7cc
movq -0xbc0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1f7e1
leaq -0x578(%rbp), %rdi
callq 0x21a10
jmp 0x1f7ef
leaq -0x598(%rbp), %rdi
movq %rdi, -0xbc8(%rbp)
callq 0x3410
movq -0xbc8(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
jmp 0x1f817
leaq -0x5e8(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x3130
jmp 0x1f82c
movq -0xa38(%rbp), %rsi
leaq -0x5c8(%rbp), %rdi
leaq -0x5e8(%rbp), %rdx
callq 0x20e70
jmp 0x1f848
leaq -0x578(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x21a30
jmp 0x1f85d
leaq -0x5c8(%rbp), %rdi
callq 0x7af0
leaq -0x5e8(%rbp), %rdi
callq 0x35b8
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
jmp 0x1f88a
leaq 0x7f28(%rip), %rsi      # 0x277b9
leaq -0x1e8(%rbp), %rdi
callq 0x219c0
movb %al, -0xbc9(%rbp)
jmp 0x1f8a5
movb -0xbc9(%rbp), %al
testb $0x1, %al
jne 0x1f8b1
jmp 0x1f928
movl $0xb, -0x22c(%rbp)
jmp 0x1f932
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1fad3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f951
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1f91a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0x7af0
leaq -0x5e8(%rbp), %rdi
callq 0x35b8
jmp 0x1f951
movl $0x0, -0x22c(%rbp)
leaq -0x598(%rbp), %rdi
callq 0x35b8
movl -0x22c(%rbp), %eax
testl %eax, %eax
je 0x1f94c
jmp 0x1f94a
jmp 0x1f962
jmp 0x1f7ed
leaq -0x598(%rbp), %rdi
callq 0x35b8
jmp 0x1fac7
movq -0xa38(%rbp), %rax
movq %rax, -0xbd8(%rbp)
leaq -0x640(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0xdec0
jmp 0x1f985
movq -0xbd8(%rbp), %rsi
leaq -0x628(%rbp), %rdi
leaq -0x560(%rbp), %rdx
leaq -0x640(%rbp), %rcx
callq 0x70a0
jmp 0x1f9a8
leaq -0x640(%rbp), %rdi
callq 0xb6d0
testb $0x1, -0x628(%rbp)
jne 0x1fa5f
leaq -0x620(%rbp), %rsi
movq 0x195f9(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xbe0(%rbp)
jmp 0x1f9dd
movq -0xbe0(%rbp), %rdi
movq 0x195bd(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1f9f2
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x1fa9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x1fac7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x640(%rbp), %rdi
callq 0xb6d0
jmp 0x1fac7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x628(%rbp), %rdi
callq 0x78f0
jmp 0x1fac7
movq 0x19562(%rip), %rdi     # 0x38fc8
leaq 0x7c00(%rip), %rsi      # 0x2766d
callq 0x32c0
movq %rax, -0xbe8(%rbp)
jmp 0x1fa7b
movq -0xbe8(%rbp), %rdi
movq 0x1951f(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1fa90
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x628(%rbp), %rdi
callq 0x78f0
leaq -0x578(%rbp), %rdi
callq 0xb6d0
leaq -0x560(%rbp), %rdi
callq 0x35b8
jmp 0x20b0e
leaq -0x578(%rbp), %rdi
callq 0xb6d0
leaq -0x560(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
leaq 0x7b34(%rip), %rsi      # 0x2761f
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xbe9(%rbp)
jmp 0x1faff
movb -0xbe9(%rbp), %al
testb $0x1, %al
jne 0x1fb0e
jmp 0x202d5
leaq -0x660(%rbp), %rdi
callq 0x3410
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xbf8(%rbp)
jmp 0x1fb36
movq -0xbf8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xc00(%rbp)
jmp 0x1fb52
movq -0xc00(%rbp), %rdi
leaq -0x660(%rbp), %rsi
callq 0x33a0
jmp 0x1fb67
leaq -0x678(%rbp), %rdi
callq 0x1d8a0
jmp 0x1fb75
movq -0xa38(%rbp), %rax
movq %rax, -0xc08(%rbp)
leaq 0x74ab(%rip), %rdx      # 0x27035
leaq -0x698(%rbp), %rdi
leaq -0x660(%rbp), %rsi
callq 0x76d0
jmp 0x1fb9f
movq -0xc08(%rbp), %rdi
leaq -0x698(%rbp), %rsi
callq 0x1b550
movb %al, -0xc09(%rbp)
jmp 0x1fbba
movb -0xc09(%rbp), %al
xorb $-0x1, %al
movb %al, -0xc0a(%rbp)
leaq -0x698(%rbp), %rdi
callq 0x35b8
movb -0xc0a(%rbp), %al
testb $0x1, %al
jne 0x1fbe3
jmp 0x1fc78
movq 0x193de(%rip), %rdi     # 0x38fc8
leaq 0x7a35(%rip), %rsi      # 0x27626
callq 0x32c0
movq %rax, -0xc18(%rbp)
jmp 0x1fbff
movq -0xc18(%rbp), %rdi
movq 0x1939b(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1fc14
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x2029b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x202c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x202b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x698(%rbp), %rdi
callq 0x35b8
jmp 0x202b8
movq -0xa38(%rbp), %rax
movq %rax, -0xc20(%rbp)
leaq 0x73a8(%rip), %rdx      # 0x27035
leaq -0x700(%rbp), %rdi
leaq -0x660(%rbp), %rsi
callq 0x76d0
jmp 0x1fca2
movq -0xc20(%rbp), %rsi
leaq -0x6e0(%rbp), %rdi
leaq -0x700(%rbp), %rdx
callq 0x1b750
jmp 0x1fcbe
leaq -0x700(%rbp), %rdi
callq 0x35b8
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xc28(%rbp)
jmp 0x1fce6
movq -0xc28(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x3390
movb %al, -0xc29(%rbp)
jmp 0x1fd04
movb -0xc29(%rbp), %al
testb $0x1, %al
jne 0x1fd13
jmp 0x201bc
leaq -0x720(%rbp), %rdi
movq %rdi, -0xc40(%rbp)
callq 0x3410
leaq -0x740(%rbp), %rdi
callq 0x3410
leaq -0x760(%rbp), %rdi
callq 0x3410
movq -0xc40(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
movq %rax, -0xc38(%rbp)
jmp 0x1fd5a
movq -0xc38(%rbp), %rdi
leaq -0x740(%rbp), %rsi
callq 0x33a0
movq %rax, -0xc48(%rbp)
jmp 0x1fd76
movq -0xc48(%rbp), %rdi
leaq -0x760(%rbp), %rsi
callq 0x33a0
jmp 0x1fd8b
movl $0xffffffff, -0x764(%rbp) # imm = 0xFFFFFFFF
movq $0x0, -0x770(%rbp)
movq -0x770(%rbp), %rax
movq %rax, -0xc50(%rbp)
leaq -0x6e0(%rbp), %rdi
addq $0x28, %rdi
callq 0x7750
movq %rax, %rcx
movq -0xc50(%rbp), %rax
cmpq %rcx, %rax
jae 0x1fe76
leaq -0x6e0(%rbp), %rdi
addq $0x28, %rdi
movq -0x770(%rbp), %rsi
callq 0x7810
movq %rax, %rdi
leaq -0x720(%rbp), %rsi
callq 0x7780
testb $0x1, %al
jne 0x1fdfd
jmp 0x1fe5d
movq -0x770(%rbp), %rax
movl %eax, -0x764(%rbp)
jmp 0x1fe76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x700(%rbp), %rdi
callq 0x35b8
jmp 0x202b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x2028d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20193
jmp 0x1fe5f
movq -0x770(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x770(%rbp)
jmp 0x1fda0
cmpl $-0x1, -0x764(%rbp)
jne 0x1fec3
movq 0x19142(%rip), %rdi     # 0x38fc8
leaq 0x77ae(%rip), %rsi      # 0x2763b
callq 0x32c0
movq %rax, -0xc58(%rbp)
jmp 0x1fe9b
movq -0xc58(%rbp), %rdi
movq 0x190ff(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x1feb0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x200fc
leaq 0x778a(%rip), %rsi      # 0x27654
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc59(%rbp)
jmp 0x1fede
movb -0xc59(%rbp), %al
testb $0x1, %al
jne 0x1feea
jmp 0x1fef9
movl $0x0, -0x768(%rbp)
jmp 0x2004f
leaq 0x7756(%rip), %rsi      # 0x27656
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc5a(%rbp)
jmp 0x1ff14
movb -0xc5a(%rbp), %al
testb $0x1, %al
jne 0x1ff20
jmp 0x1ff2f
movl $0x1, -0x768(%rbp)
jmp 0x2004d
leaq 0x7721(%rip), %rsi      # 0x27657
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc5b(%rbp)
jmp 0x1ff4a
movb -0xc5b(%rbp), %al
testb $0x1, %al
jne 0x1ff56
jmp 0x1ff65
movl $0x2, -0x768(%rbp)
jmp 0x2004b
leaq 0x76ed(%rip), %rsi      # 0x27659
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc5c(%rbp)
jmp 0x1ff80
movb -0xc5c(%rbp), %al
testb $0x1, %al
jne 0x1ff8c
jmp 0x1ff9b
movl $0x3, -0x768(%rbp)
jmp 0x20049
leaq 0x76bb(%rip), %rsi      # 0x2765d
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc5d(%rbp)
jmp 0x1ffb6
movb -0xc5d(%rbp), %al
testb $0x1, %al
jne 0x1ffc2
jmp 0x1ffce
movl $0x4, -0x768(%rbp)
jmp 0x20047
leaq 0x7687(%rip), %rsi      # 0x2765c
leaq -0x740(%rbp), %rdi
callq 0x219c0
movb %al, -0xc5e(%rbp)
jmp 0x1ffe9
movb -0xc5e(%rbp), %al
testb $0x1, %al
jne 0x1fff5
jmp 0x20001
movl $0x5, -0x768(%rbp)
jmp 0x20045
movq 0x18fc0(%rip), %rdi     # 0x38fc8
leaq 0x7603(%rip), %rsi      # 0x27612
callq 0x32c0
movq %rax, -0xc68(%rbp)
jmp 0x2001d
movq -0xc68(%rbp), %rdi
movq 0x18f7d(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20032
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x200fc
jmp 0x20047
jmp 0x20049
jmp 0x2004b
jmp 0x2004d
jmp 0x2004f
movl -0x764(%rbp), %eax
movl %eax, -0xc70(%rbp)
movl -0x768(%rbp), %eax
movl %eax, -0xc6c(%rbp)
leaq -0x7f8(%rbp), %rdi
leaq -0x760(%rbp), %rsi
callq 0x3130
jmp 0x2007c
movq -0xa38(%rbp), %rsi
leaq -0x7d8(%rbp), %rdi
leaq -0x7f8(%rbp), %rdx
callq 0x20e70
jmp 0x20098
movl -0xc6c(%rbp), %edx
movl -0xc70(%rbp), %esi
leaq -0x7a8(%rbp), %rdi
leaq -0x7d8(%rbp), %rcx
callq 0x1d860
jmp 0x200b9
leaq -0x678(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x1d8c0
jmp 0x200ce
leaq -0x7a8(%rbp), %rdi
callq 0x7f90
leaq -0x7d8(%rbp), %rdi
callq 0x7af0
leaq -0x7f8(%rbp), %rdi
callq 0x35b8
movl $0x0, -0x22c(%rbp)
leaq -0x760(%rbp), %rdi
callq 0x35b8
leaq -0x740(%rbp), %rdi
callq 0x35b8
leaq -0x720(%rbp), %rdi
callq 0x35b8
movl -0x22c(%rbp), %eax
testl %eax, %eax
jne 0x2027f
jmp 0x20130
jmp 0x1fcca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20187
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x2017b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x7a8(%rbp), %rdi
callq 0x7f90
leaq -0x7d8(%rbp), %rdi
callq 0x7af0
leaq -0x7f8(%rbp), %rdi
callq 0x35b8
leaq -0x760(%rbp), %rdi
callq 0x35b8
leaq -0x740(%rbp), %rdi
callq 0x35b8
leaq -0x720(%rbp), %rdi
callq 0x35b8
jmp 0x2028d
movq -0xa38(%rbp), %rsi
leaq -0x838(%rbp), %rdi
leaq -0x660(%rbp), %rdx
leaq -0x678(%rbp), %rcx
callq 0x4b60
jmp 0x201df
testb $0x1, -0x838(%rbp)
jne 0x20249
leaq -0x830(%rbp), %rsi
movq 0x18dd2(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xc78(%rbp)
jmp 0x20204
movq -0xc78(%rbp), %rdi
movq 0x18d96(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20219
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x20273
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x838(%rbp), %rdi
callq 0x78f0
jmp 0x2028d
movq -0xa38(%rbp), %rdi
leaq -0x6e0(%rbp), %rsi
leaq -0x838(%rbp), %rdx
callq 0x21030
jmp 0x20265
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x838(%rbp), %rdi
callq 0x78f0
leaq -0x6e0(%rbp), %rdi
callq 0x7920
jmp 0x2029b
leaq -0x6e0(%rbp), %rdi
callq 0x7920
jmp 0x202b8
leaq -0x678(%rbp), %rdi
callq 0x82c0
leaq -0x660(%rbp), %rdi
callq 0x35b8
jmp 0x20b0e
leaq -0x678(%rbp), %rdi
callq 0x82c0
leaq -0x660(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
leaq 0x7383(%rip), %rsi      # 0x2765f
leaq -0x1c8(%rbp), %rdi
callq 0x219c0
movb %al, -0xc79(%rbp)
jmp 0x202f0
movb -0xc79(%rbp), %al
testb $0x1, %al
jne 0x202ff
jmp 0x20ab5
leaq -0x858(%rbp), %rdi
callq 0x3410
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xc88(%rbp)
jmp 0x20327
movq -0xc88(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x33a0
jmp 0x2033c
leaq -0x870(%rbp), %rdi
callq 0x1d8a0
jmp 0x2034a
movq -0xa38(%rbp), %rax
movq %rax, -0xc90(%rbp)
leaq 0x6cd6(%rip), %rdx      # 0x27035
leaq -0x890(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x76d0
jmp 0x20374
movq -0xc90(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x1b550
movb %al, -0xc91(%rbp)
jmp 0x2038f
movb -0xc91(%rbp), %al
xorb $-0x1, %al
movb %al, -0xc92(%rbp)
leaq -0x890(%rbp), %rdi
callq 0x35b8
movb -0xc92(%rbp), %al
testb $0x1, %al
jne 0x203b8
jmp 0x2044d
movq 0x18c09(%rip), %rdi     # 0x38fc8
leaq 0x7260(%rip), %rsi      # 0x27626
callq 0x32c0
movq %rax, -0xca0(%rbp)
jmp 0x203d4
movq -0xca0(%rbp), %rdi
movq 0x18bc6(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x203e9
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x20a65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20aa7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20a9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x890(%rbp), %rdi
callq 0x35b8
jmp 0x20a9b
movq -0xa38(%rbp), %rax
movq %rax, -0xca8(%rbp)
leaq 0x6bd3(%rip), %rdx      # 0x27035
leaq -0x8f8(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x76d0
jmp 0x20477
movq -0xca8(%rbp), %rsi
leaq -0x8d8(%rbp), %rdi
leaq -0x8f8(%rbp), %rdx
callq 0x1b750
jmp 0x20493
leaq -0x8f8(%rbp), %rdi
callq 0x35b8
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x33a0
movq %rax, -0xcb0(%rbp)
jmp 0x204bb
movq -0xcb0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x3390
movb %al, -0xcb1(%rbp)
jmp 0x204d9
movb -0xcb1(%rbp), %al
testb $0x1, %al
jne 0x204e8
jmp 0x20991
leaq -0x918(%rbp), %rdi
movq %rdi, -0xcc8(%rbp)
callq 0x3410
leaq -0x938(%rbp), %rdi
callq 0x3410
leaq -0x958(%rbp), %rdi
callq 0x3410
movq -0xcc8(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x33a0
movq %rax, -0xcc0(%rbp)
jmp 0x2052f
movq -0xcc0(%rbp), %rdi
leaq -0x938(%rbp), %rsi
callq 0x33a0
movq %rax, -0xcd0(%rbp)
jmp 0x2054b
movq -0xcd0(%rbp), %rdi
leaq -0x958(%rbp), %rsi
callq 0x33a0
jmp 0x20560
movl $0xffffffff, -0x95c(%rbp) # imm = 0xFFFFFFFF
movq $0x0, -0x968(%rbp)
movq -0x968(%rbp), %rax
movq %rax, -0xcd8(%rbp)
leaq -0x8d8(%rbp), %rdi
addq $0x28, %rdi
callq 0x7750
movq %rax, %rcx
movq -0xcd8(%rbp), %rax
cmpq %rcx, %rax
jae 0x2064b
leaq -0x8d8(%rbp), %rdi
addq $0x28, %rdi
movq -0x968(%rbp), %rsi
callq 0x7810
movq %rax, %rdi
leaq -0x918(%rbp), %rsi
callq 0x7780
testb $0x1, %al
jne 0x205d2
jmp 0x20632
movq -0x968(%rbp), %rax
movl %eax, -0x95c(%rbp)
jmp 0x2064b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x8f8(%rbp), %rdi
callq 0x35b8
jmp 0x20a9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20a8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20968
jmp 0x20634
movq -0x968(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x968(%rbp)
jmp 0x20575
cmpl $-0x1, -0x95c(%rbp)
jne 0x20698
movq 0x1896d(%rip), %rdi     # 0x38fc8
leaq 0x6fd9(%rip), %rsi      # 0x2763b
callq 0x32c0
movq %rax, -0xce0(%rbp)
jmp 0x20670
movq -0xce0(%rbp), %rdi
movq 0x1892a(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20685
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x208d1
leaq 0x6fb5(%rip), %rsi      # 0x27654
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce1(%rbp)
jmp 0x206b3
movb -0xce1(%rbp), %al
testb $0x1, %al
jne 0x206bf
jmp 0x206ce
movl $0x0, -0x960(%rbp)
jmp 0x20824
leaq 0x6f81(%rip), %rsi      # 0x27656
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce2(%rbp)
jmp 0x206e9
movb -0xce2(%rbp), %al
testb $0x1, %al
jne 0x206f5
jmp 0x20704
movl $0x1, -0x960(%rbp)
jmp 0x20822
leaq 0x6f4c(%rip), %rsi      # 0x27657
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce3(%rbp)
jmp 0x2071f
movb -0xce3(%rbp), %al
testb $0x1, %al
jne 0x2072b
jmp 0x2073a
movl $0x2, -0x960(%rbp)
jmp 0x20820
leaq 0x6f18(%rip), %rsi      # 0x27659
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce4(%rbp)
jmp 0x20755
movb -0xce4(%rbp), %al
testb $0x1, %al
jne 0x20761
jmp 0x20770
movl $0x3, -0x960(%rbp)
jmp 0x2081e
leaq 0x6ee6(%rip), %rsi      # 0x2765d
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce5(%rbp)
jmp 0x2078b
movb -0xce5(%rbp), %al
testb $0x1, %al
jne 0x20797
jmp 0x207a3
movl $0x4, -0x960(%rbp)
jmp 0x2081c
leaq 0x6eb2(%rip), %rsi      # 0x2765c
leaq -0x938(%rbp), %rdi
callq 0x219c0
movb %al, -0xce6(%rbp)
jmp 0x207be
movb -0xce6(%rbp), %al
testb $0x1, %al
jne 0x207ca
jmp 0x207d6
movl $0x5, -0x960(%rbp)
jmp 0x2081a
movq 0x187eb(%rip), %rdi     # 0x38fc8
leaq 0x6e2e(%rip), %rsi      # 0x27612
callq 0x32c0
movq %rax, -0xcf0(%rbp)
jmp 0x207f2
movq -0xcf0(%rbp), %rdi
movq 0x187a8(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20807
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x208d1
jmp 0x2081c
jmp 0x2081e
jmp 0x20820
jmp 0x20822
jmp 0x20824
movl -0x95c(%rbp), %eax
movl %eax, -0xcf8(%rbp)
movl -0x960(%rbp), %eax
movl %eax, -0xcf4(%rbp)
leaq -0x9f0(%rbp), %rdi
leaq -0x958(%rbp), %rsi
callq 0x3130
jmp 0x20851
movq -0xa38(%rbp), %rsi
leaq -0x9d0(%rbp), %rdi
leaq -0x9f0(%rbp), %rdx
callq 0x20e70
jmp 0x2086d
movl -0xcf4(%rbp), %edx
movl -0xcf8(%rbp), %esi
leaq -0x9a0(%rbp), %rdi
leaq -0x9d0(%rbp), %rcx
callq 0x1d860
jmp 0x2088e
leaq -0x870(%rbp), %rdi
leaq -0x9a0(%rbp), %rsi
callq 0x1d8c0
jmp 0x208a3
leaq -0x9a0(%rbp), %rdi
callq 0x7f90
leaq -0x9d0(%rbp), %rdi
callq 0x7af0
leaq -0x9f0(%rbp), %rdi
callq 0x35b8
movl $0x0, -0x22c(%rbp)
leaq -0x958(%rbp), %rdi
callq 0x35b8
leaq -0x938(%rbp), %rdi
callq 0x35b8
leaq -0x918(%rbp), %rdi
callq 0x35b8
movl -0x22c(%rbp), %eax
testl %eax, %eax
jne 0x20a59
jmp 0x20905
jmp 0x2049f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x2095c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
jmp 0x20950
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0x9a0(%rbp), %rdi
callq 0x7f90
leaq -0x9d0(%rbp), %rdi
callq 0x7af0
leaq -0x9f0(%rbp), %rdi
callq 0x35b8
leaq -0x958(%rbp), %rdi
callq 0x35b8
leaq -0x938(%rbp), %rdi
callq 0x35b8
leaq -0x918(%rbp), %rdi
callq 0x35b8
jmp 0x20a8f
movq -0xa38(%rbp), %rsi
leaq -0xa30(%rbp), %rdi
leaq -0x858(%rbp), %rdx
leaq -0x870(%rbp), %rcx
callq 0x5f10
jmp 0x209b4
testb $0x1, -0xa30(%rbp)
jne 0x20a10
leaq -0xa28(%rbp), %rsi
movq 0x185fd(%rip), %rdi     # 0x38fc8
callq 0x3280
movq %rax, -0xd00(%rbp)
jmp 0x209d9
movq -0xd00(%rbp), %rdi
movq 0x185c1(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x209ee
jmp 0x20a43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1a0(%rbp)
movl %eax, -0x1a4(%rbp)
leaq -0xa30(%rbp), %rdi
callq 0x78f0
jmp 0x20a8f
movq 0x185b1(%rip), %rdi     # 0x38fc8
leaq 0x6c48(%rip), %rsi      # 0x27666
callq 0x32c0
movq %rax, -0xd08(%rbp)
jmp 0x20a2c
movq -0xd08(%rbp), %rdi
movq 0x1856e(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20a41
jmp 0x20a43
leaq -0xa30(%rbp), %rdi
callq 0x78f0
movl $0x0, -0x22c(%rbp)
leaq -0x8d8(%rbp), %rdi
callq 0x7920
leaq -0x870(%rbp), %rdi
callq 0x82c0
leaq -0x858(%rbp), %rdi
callq 0x35b8
movl -0x22c(%rbp), %eax
testl %eax, %eax
jne 0x20b0e
jmp 0x20a8d
jmp 0x20af6
leaq -0x8d8(%rbp), %rdi
callq 0x7920
leaq -0x870(%rbp), %rdi
callq 0x82c0
leaq -0x858(%rbp), %rdi
callq 0x35b8
jmp 0x20b34
movq 0x1850c(%rip), %rdi     # 0x38fc8
leaq 0x6b4f(%rip), %rsi      # 0x27612
callq 0x32c0
movq %rax, -0xd10(%rbp)
jmp 0x20ad1
movq -0xd10(%rbp), %rdi
movq 0x184c9(%rip), %rsi     # 0x38fa8
callq 0x3310
jmp 0x20ae6
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
jmp 0x20b0e
jmp 0x20af8
jmp 0x20afa
jmp 0x20afc
jmp 0x20afe
jmp 0x20b00
movb $0x0, -0x1(%rbp)
movl $0x1, -0x22c(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x35b8
leaq -0x1c8(%rbp), %rdi
callq 0x35b8
leaq -0x198(%rbp), %rdi
callq 0x3550
jmp 0x20b5a
leaq -0x1e8(%rbp), %rdi
callq 0x35b8
leaq -0x1c8(%rbp), %rdi
callq 0x35b8
leaq -0x198(%rbp), %rdi
callq 0x3550
jmp 0x20b68
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xd10, %rsp            # imm = 0xD10
popq %rbp
retq
movq -0x1a0(%rbp), %rdi
callq 0x34f0
nopw %cs:(%rax,%rax)