// File: Eronana[P]strawberry/src/lexer.cpp
// Function: Lexer::next()
Token Lexer::next()
{
    if (!fp) return createToken(TOKEN_ERROR, 0, "No source file.");
    Token comment_error, t;
    if (!skipComment(comment_error)) return comment_error;
    skipWhiteSpace();
    int c, i;
    if ((c = lookHead()) == CHAR_EOF) return createToken(TOKEN_EOF, 0);
    switch (c)
    {
    case '+':
        switch (lookHead(1))
        {
        case '+':
            return createToken(TOKEN_INCREMENT, 2);
        case '=':
            return createToken(TOKEN_ADD_ASSIGN, 2);
        default:
            return createToken(TOKEN_ADD);
        }
    case '-':
        switch (lookHead(1))
        {
        case '-':
            return createToken(TOKEN_DECREMENT, 2);
        case '=':
            return createToken(TOKEN_SUB_ASSIGN, 2);
        default:
            return createToken(TOKEN_SUB);
        }
    case '*':
        if (lookHead(1) == '=') return createToken(TOKEN_MUL_ASSIGN, 2);
        return createToken(TOKEN_MUL);
    case '/':
        if (lookHead(1) == '=') return createToken(TOKEN_DIV_ASSIGN, 2);
        return createToken(TOKEN_DIV);
    case '%':
        if (lookHead(1) == '=') return createToken(TOKEN_MOD_ASSIGN, 2);
        return createToken(TOKEN_MOD);
    case '(':
        return createToken(TOKEN_LEFT_PAREN);
    case ')':
        return createToken(TOKEN_RIGHT_PAREN);
    case '[':
        return createToken(TOKEN_LEFT_SQUARE_BARCKET);
    case ']':
        return createToken(TOKEN_RIGHT_SQUARE_BARCKET);
    case '{':
        return createToken(TOKEN_LEFT_BARCKET);
    case '}':
        return createToken(TOKEN_RIGHT_BARCKET);
    case '|':
        switch (lookHead(1))
        {
        case '|':
            return createToken(TOKEN_LOGIC_OR, 2);
        case '=':
            return createToken(TOKEN_BITWISE_OR_ASSIGN, 2);
        default:
            return createToken(TOKEN_BITWISE_OR);
        }
    case '&':
        switch (lookHead(1))
        {
        case '&':
            return createToken(TOKEN_LOGIC_AND, 2);
        case '=':
            return createToken(TOKEN_BITWISE_AND_ASSIGN, 2);
        default:
            return createToken(TOKEN_BITWISE_AND);
        }
    case '~':
        return createToken(TOKEN_BITWISE_NOT);
    case '^':
        if (lookHead(1) == '=') return createToken(TOKEN_BITWISE_XOR_ASSIGN, 2);
        return createToken(TOKEN_BITWISE_XOR);
    case '!':
        if (lookHead(1) == '=') return createToken(TOKEN_INEQUAL, 2);
        return createToken(TOKEN_NEGATION);
    case '=':
        if (lookHead(1) == '=') return createToken(TOKEN_EQUAL, 2);
        return createToken(TOKEN_ASSIGN);
    case '>':
        if (lookHead(1) == '>')
        {
            if (lookHead(2) == '=') return createToken(TOKEN_RIGHT_SHIFT_ASSIGN, 3);
            return createToken(TOKEN_RIGHT_SHIFT, 2);
        }
        else if (lookHead(1) == '=') return createToken(TOKEN_GREATER_EQUAL, 2);
        return createToken(TOKEN_GREATER);
    case '<':
        if (lookHead(1) == '<')
        {
            if (lookHead(2) == '=') return createToken(TOKEN_LEFT_SHIFT_ASSIGN, 3);
            return createToken(TOKEN_LEFT_SHIFT, 2);
        }
        else if (lookHead(1) == '=') return createToken(TOKEN_LESS_EQUAL, 2);
        return createToken(TOKEN_LESS);
    case ';':
        return createToken(TOKEN_SEMICOLON);
    case ',':
        return createToken(TOKEN_COMMA);
    case ':':
        return createToken(TOKEN_COLON);
    case '?':
        return createToken(TOKEN_QUESTIONMARK);
    case '\'':
    case '"':
        for (i = 1; (lookHead(i) != c || lookHead(i - 1) == '\\') && lookHead(i) != '\n' && lookHead(i) != CHAR_EOF; i++);
        if (lookHead(i) == '\n') return createToken(TOKEN_ERROR, i, "Unterminated string literal in new line");
        if (lookHead(i) == CHAR_EOF) return createToken(TOKEN_ERROR, i, "Unterminated string literal in EOF");
        return createToken(TOKEN_STRING_LITERAL, i + 1);
    default:
        if (isIdentifierHead(c))
        {
            for (i = 1; isIdentifier(lookHead(i)); i++);
            t = createToken(TOKEN_IDENTIFIER, i);
            if (t.raw == "true" || t.raw == "false") t.type = TOKEN_BOOL_LITERAL;
            if (t.raw == "null") t.type = TOKEN_NULL_LITERAL;
            return t;
        }
        if (c == '0')
            switch (lookHead(1))
            {
            case 'b':
            case 'B':
                for (i = 2; isBin(lookHead(i)); i++);
                return createToken(TOKEN_BIN_INTEGER_LITERAL, i);
            case 'x':
            case 'X':
                for (i = 2; isHex(lookHead(i)); i++);
                return createToken(TOKEN_HEX_INTEGER_LITERAL, i);
            case '.':
                break;
            default:
                for (i = 1; isOct(lookHead(i)); i++);
                return createToken(TOKEN_OCT_INTEGER_LITERAL, i);
            }
        if (c == '.')
        {
            if (isNumber(lookHead(1)))
            {
                for (i = 1; isNumber(lookHead(i)); i++);
                if (lookHead(i) == 'F' || lookHead(i) == 'f') return createToken(TOKEN_FLOAT_LITERAL, i + 1);
                return createToken(TOKEN_FLOAT_LITERAL, i);
            }
            else
                return createToken(TOKEN_DOT);
        }
        if (isNumber(c))
        {
            for (i = 1; isNumber(lookHead(i)); i++);
            if (lookHead(i) != '.')
            {
                if (lookHead(i) == 'F' || lookHead(i) == 'f') return createToken(TOKEN_FLOAT_LITERAL, i + 1);
                return createToken(TOKEN_DEC_INTEGER_LITERAL, i);
            }
            for (i++; isNumber(lookHead(i)); i++);
            if (lookHead(i) == 'F' || lookHead(i) == 'f') i++;
            return createToken(TOKEN_FLOAT_LITERAL, i);
        }
        return createToken(TOKEN_ERROR, 1, "Unexcepted symbol");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x280, %rsp            # imm = 0x280
movq %rdi, -0x1d8(%rbp)
movq %rdi, %rax
movq %rax, -0x1d0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1c8(%rbp)
cmpq $0x0, (%rax)
jne 0x4ed57
leaq -0x31(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x75f0
movq -0x1e0(%rbp), %rdx
leaq 0xa87a(%rip), %rsi      # 0x59561
leaq -0x30(%rbp), %rdi
callq 0xf990
jmp 0x4ecf2
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
xorl %ecx, %ecx
leaq -0x30(%rbp), %r8
movl %ecx, %edx
callq 0x4e720
jmp 0x4ed0f
leaq -0x30(%rbp), %rdi
callq 0x71d0
leaq -0x31(%rbp), %rdi
callq 0x7310
jmp 0x503c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x4ed49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x71d0
leaq -0x31(%rbp), %rdi
callq 0x7310
jmp 0x503d4
leaq -0x98(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x1c450
leaq -0xe8(%rbp), %rdi
callq 0x1c450
movq -0x1c8(%rbp), %rdi
movq -0x1f0(%rbp), %rsi
callq 0x4e830
movb %al, -0x1e1(%rbp)
jmp 0x4ed91
movb -0x1e1(%rbp), %al
testb $0x1, %al
jne 0x4edd0
jmp 0x4ed9d
movq -0x1d8(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x34dd0
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x503aa
movq -0x1c8(%rbp), %rdi
callq 0x4e7b0
jmp 0x4edde
movq -0x1c8(%rbp), %rdi
xorl %esi, %esi
callq 0x4e350
movb %al, -0x1f1(%rbp)
jmp 0x4edf4
movb -0x1f1(%rbp), %al
movsbl %al, %eax
movl %eax, -0xf0(%rbp)
cmpl $-0x1, %eax
jne 0x4ee33
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x4e600
jmp 0x4ee24
movl $0x1, -0xec(%rbp)
jmp 0x50390
movl -0xf0(%rbp), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x200(%rbp)
subl $0x5d, %eax
ja 0x4fbd7
movq -0x200(%rbp), %rax
leaq 0xa2f8(%rip), %rcx      # 0x59154
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x201(%rbp)
jmp 0x4ee7e
movb -0x201(%rbp), %al
movsbl %al, %eax
movl %eax, -0x208(%rbp)
subl $0x2b, %eax
je 0x4eea1
jmp 0x4ee94
movl -0x208(%rbp), %eax
subl $0x3d, %eax
je 0x4eecc
jmp 0x4eefa
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x2, %ecx
movl %ecx, %edx
callq 0x4e600
jmp 0x4eebd
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x3, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4eeeb
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x4, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4ef19
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x209(%rbp)
jmp 0x4ef41
movb -0x209(%rbp), %al
movsbl %al, %eax
movl %eax, -0x210(%rbp)
subl $0x2d, %eax
je 0x4ef64
jmp 0x4ef57
movl -0x210(%rbp), %eax
subl $0x3d, %eax
je 0x4ef92
jmp 0x4efc0
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x5, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4ef83
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x6, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4efb1
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x7, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4efdf
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x211(%rbp)
jmp 0x4f007
movb -0x211(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f043
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x8, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f034
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f062
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x212(%rbp)
jmp 0x4f08a
movb -0x212(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f0c6
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xa, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f0b7
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xb, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f0e5
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x213(%rbp)
jmp 0x4f10d
movb -0x213(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f149
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xc, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f13a
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xd, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f168
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xe, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f196
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0xf, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f1c4
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x10, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f1f2
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x11, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f220
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x12, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f24e
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x13, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f27c
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x214(%rbp)
jmp 0x4f2a4
movb -0x214(%rbp), %al
movsbl %al, %eax
movl %eax, -0x218(%rbp)
subl $0x3d, %eax
je 0x4f2f5
jmp 0x4f2ba
movl -0x218(%rbp), %eax
subl $0x7c, %eax
jne 0x4f323
jmp 0x4f2c7
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x14, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f2e6
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x15, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f314
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x16, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f342
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x219(%rbp)
jmp 0x4f36a
movb -0x219(%rbp), %al
movsbl %al, %eax
movl %eax, -0x220(%rbp)
subl $0x26, %eax
je 0x4f38d
jmp 0x4f380
movl -0x220(%rbp), %eax
subl $0x3d, %eax
je 0x4f3bb
jmp 0x4f3e9
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x17, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f3ac
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x18, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f3da
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x19, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f408
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1a, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f436
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x221(%rbp)
jmp 0x4f45e
movb -0x221(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f49a
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1b, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f48b
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1c, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f4b9
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x222(%rbp)
jmp 0x4f4e1
movb -0x222(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f51d
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1d, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f50e
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1e, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f53c
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x223(%rbp)
jmp 0x4f564
movb -0x223(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f5a0
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x1f, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f591
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x20, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f5bf
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x224(%rbp)
jmp 0x4f5e7
movb -0x224(%rbp), %al
movsbl %al, %eax
cmpl $0x3e, %eax
jne 0x4f67c
movq -0x1c8(%rbp), %rdi
movl $0x2, %esi
callq 0x4e350
movb %al, -0x225(%rbp)
jmp 0x4f612
movb -0x225(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f64e
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x21, %edx
movl $0x3, %ecx
callq 0x4e600
jmp 0x4f63f
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x22, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f66d
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x226(%rbp)
jmp 0x4f695
movb -0x226(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f6d1
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x24, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f6c2
movl $0x1, -0xec(%rbp)
jmp 0x50390
jmp 0x4f6d3
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x23, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f6f2
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x227(%rbp)
jmp 0x4f71a
movb -0x227(%rbp), %al
movsbl %al, %eax
cmpl $0x3c, %eax
jne 0x4f7af
movq -0x1c8(%rbp), %rdi
movl $0x2, %esi
callq 0x4e350
movb %al, -0x228(%rbp)
jmp 0x4f745
movb -0x228(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f781
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x25, %edx
movl $0x3, %ecx
callq 0x4e600
jmp 0x4f772
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x26, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f7a0
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x229(%rbp)
jmp 0x4f7c8
movb -0x229(%rbp), %al
movsbl %al, %eax
cmpl $0x3d, %eax
jne 0x4f804
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x28, %edx
movl $0x2, %ecx
callq 0x4e600
jmp 0x4f7f5
movl $0x1, -0xec(%rbp)
jmp 0x50390
jmp 0x4f806
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x27, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f825
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x29, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f853
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x2a, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f881
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x2c, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f8af
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x2d, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x4f8dd
movl $0x1, -0xec(%rbp)
jmp 0x50390
movl $0x1, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x22a(%rbp)
jmp 0x4f910
movb -0x22a(%rbp), %al
movsbl %al, %eax
cmpl -0xf0(%rbp), %eax
jne 0x4f953
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
decl %esi
callq 0x4e350
movb %al, -0x22b(%rbp)
jmp 0x4f93d
movb -0x22b(%rbp), %al
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x5c, %ecx
movb %al, -0x22c(%rbp)
jne 0x4f9b2
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x22d(%rbp)
jmp 0x4f96d
movb -0x22d(%rbp), %al
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0xa, %ecx
movb %al, -0x22c(%rbp)
je 0x4f9b2
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x22e(%rbp)
jmp 0x4f99d
movb -0x22e(%rbp), %al
movsbl %al, %eax
cmpl $-0x1, %eax
setne %al
movb %al, -0x22c(%rbp)
movb -0x22c(%rbp), %al
testb $0x1, %al
jne 0x4f9be
jmp 0x4f9d4
jmp 0x4f9c0
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4f8f6
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x22f(%rbp)
jmp 0x4f9ee
movb -0x22f(%rbp), %al
movsbl %al, %eax
cmpl $0xa, %eax
jne 0x4fabd
movl -0xf4(%rbp), %eax
movl %eax, -0x23c(%rbp)
leaq -0x119(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x75f0
movq -0x238(%rbp), %rdx
leaq 0x9b44(%rip), %rsi      # 0x59571
leaq -0x118(%rbp), %rdi
callq 0xf990
jmp 0x4fa3b
movl -0x23c(%rbp), %ecx
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
xorl %edx, %edx
leaq -0x118(%rbp), %r8
callq 0x4e720
jmp 0x4fa5f
leaq -0x118(%rbp), %rdi
callq 0x71d0
leaq -0x119(%rbp), %rdi
callq 0x7310
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x4faac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x71d0
leaq -0x119(%rbp), %rdi
callq 0x7310
jmp 0x503aa
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x23d(%rbp)
jmp 0x4fad7
movb -0x23d(%rbp), %al
movsbl %al, %eax
cmpl $-0x1, %eax
jne 0x4fba6
movl -0xf4(%rbp), %eax
movl %eax, -0x24c(%rbp)
leaq -0x141(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x75f0
movq -0x248(%rbp), %rdx
leaq 0x9a83(%rip), %rsi      # 0x59599
leaq -0x140(%rbp), %rdi
callq 0xf990
jmp 0x4fb24
movl -0x24c(%rbp), %ecx
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
xorl %edx, %edx
leaq -0x140(%rbp), %r8
callq 0x4e720
jmp 0x4fb48
leaq -0x140(%rbp), %rdi
callq 0x71d0
leaq -0x141(%rbp), %rdi
callq 0x7310
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x4fb95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x71d0
leaq -0x141(%rbp), %rdi
callq 0x7310
jmp 0x503aa
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
incl %ecx
movl $0x2f, %edx
callq 0x4e600
jmp 0x4fbc8
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl -0xf0(%rbp), %eax
movsbl %al, %esi
callq 0x4e500
testb $0x1, %al
jne 0x4fbf5
jmp 0x4fd38
movl $0x1, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x24d(%rbp)
jmp 0x4fc19
movb -0x24d(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e550
testb $0x1, %al
jne 0x4fc34
jmp 0x4fc47
jmp 0x4fc36
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4fbff
movq -0x1c8(%rbp), %rsi
movl -0xf4(%rbp), %ecx
leaq -0x198(%rbp), %rdi
movl $0x2e, %edx
callq 0x4e600
jmp 0x4fc67
leaq -0xe8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
movq %rsi, -0x258(%rbp)
callq 0x504f0
movq -0x258(%rbp), %rdi
callq 0x9600
leaq -0xd8(%rbp), %rdi
leaq 0x86c8(%rip), %rsi      # 0x58363
callq 0xfc30
movb %al, -0x24e(%rbp)
jmp 0x4fca8
movb -0x24e(%rbp), %al
testb $0x1, %al
jne 0x4fcdb
jmp 0x4fcb4
leaq -0xd8(%rbp), %rdi
leaq 0x86a6(%rip), %rsi      # 0x58368
callq 0xfc30
movb %al, -0x259(%rbp)
jmp 0x4fccf
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0x4fcdb
jmp 0x4fce5
movl $0x34, -0xe8(%rbp)
leaq -0xd8(%rbp), %rdi
leaq 0x86a9(%rip), %rsi      # 0x5839c
callq 0xfc30
movb %al, -0x25a(%rbp)
jmp 0x4fd00
movb -0x25a(%rbp), %al
testb $0x1, %al
jne 0x4fd0c
jmp 0x4fd16
movl $0x35, -0xe8(%rbp)
movq -0x1d8(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x34dd0
movl $0x1, -0xec(%rbp)
jmp 0x50390
cmpl $0x30, -0xf0(%rbp)
jne 0x4ff41
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x25b(%rbp)
jmp 0x4fd5e
movb -0x25b(%rbp), %al
movsbl %al, %eax
movl %eax, -0x260(%rbp)
subl $0x2e, %eax
je 0x4feb9
jmp 0x4fd78
movl -0x260(%rbp), %eax
subl $0x42, %eax
je 0x4fdb7
jmp 0x4fd85
movl -0x260(%rbp), %eax
subl $0x58, %eax
je 0x4fe38
jmp 0x4fd96
movl -0x260(%rbp), %eax
subl $0x62, %eax
je 0x4fdb7
jmp 0x4fda3
movl -0x260(%rbp), %eax
subl $0x78, %eax
je 0x4fe38
jmp 0x4febe
movl $0x2, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x261(%rbp)
jmp 0x4fddb
movb -0x261(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e4d0
testb $0x1, %al
jne 0x4fdf6
jmp 0x4fe09
jmp 0x4fdf8
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4fdc1
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x30, %edx
callq 0x4e600
jmp 0x4fe29
movl $0x1, -0xec(%rbp)
jmp 0x50390
movl $0x2, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x262(%rbp)
jmp 0x4fe5c
movb -0x262(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e430
testb $0x1, %al
jne 0x4fe77
jmp 0x4fe8a
jmp 0x4fe79
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4fe42
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x33, %edx
callq 0x4e600
jmp 0x4feaa
movl $0x1, -0xec(%rbp)
jmp 0x50390
jmp 0x4ff3f
movl $0x1, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x263(%rbp)
jmp 0x4fee2
movb -0x263(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e4a0
testb $0x1, %al
jne 0x4fefd
jmp 0x4ff10
jmp 0x4feff
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4fec8
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x31, %edx
callq 0x4e600
jmp 0x4ff30
movl $0x1, -0xec(%rbp)
jmp 0x50390
jmp 0x4ff41
cmpl $0x2e, -0xf0(%rbp)
jne 0x500b5
movq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x4e350
movb %al, -0x264(%rbp)
jmp 0x4ff67
movb -0x264(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e400
testb $0x1, %al
jne 0x4ff85
jmp 0x50087
movl $0x1, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x265(%rbp)
jmp 0x4ffa9
movb -0x265(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e400
testb $0x1, %al
jne 0x4ffc4
jmp 0x4ffd7
jmp 0x4ffc6
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x4ff8f
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x266(%rbp)
jmp 0x4fff1
movb -0x266(%rbp), %al
movsbl %al, %eax
cmpl $0x46, %eax
je 0x50027
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x267(%rbp)
jmp 0x50019
movb -0x267(%rbp), %al
movsbl %al, %eax
cmpl $0x66, %eax
jne 0x50058
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
incl %ecx
movl $0x36, %edx
callq 0x4e600
jmp 0x50049
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x36, %edx
callq 0x4e600
jmp 0x50078
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl $0x2b, %edx
movl $0x1, %ecx
callq 0x4e600
jmp 0x500a6
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rdi
movl -0xf0(%rbp), %eax
movsbl %al, %esi
callq 0x4e400
testb $0x1, %al
jne 0x500d3
jmp 0x502e6
movl $0x1, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x268(%rbp)
jmp 0x500f7
movb -0x268(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e400
testb $0x1, %al
jne 0x50112
jmp 0x50125
jmp 0x50114
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x500dd
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x269(%rbp)
jmp 0x5013f
movb -0x269(%rbp), %al
movsbl %al, %eax
cmpl $0x2e, %eax
je 0x50201
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x26a(%rbp)
jmp 0x5016b
movb -0x26a(%rbp), %al
movsbl %al, %eax
cmpl $0x46, %eax
je 0x501a1
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x26b(%rbp)
jmp 0x50193
movb -0x26b(%rbp), %al
movsbl %al, %eax
cmpl $0x66, %eax
jne 0x501d2
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
incl %ecx
movl $0x36, %edx
callq 0x4e600
jmp 0x501c3
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x32, %edx
callq 0x4e600
jmp 0x501f2
movl $0x1, -0xec(%rbp)
jmp 0x50390
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x26c(%rbp)
jmp 0x5022a
movb -0x26c(%rbp), %al
movq -0x1c8(%rbp), %rdi
movsbl %al, %esi
callq 0x4e400
testb $0x1, %al
jne 0x50245
jmp 0x50258
jmp 0x50247
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x50210
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x26d(%rbp)
jmp 0x50272
movb -0x26d(%rbp), %al
movsbl %al, %eax
cmpl $0x46, %eax
je 0x502a8
movq -0x1c8(%rbp), %rdi
movl -0xf4(%rbp), %esi
callq 0x4e350
movb %al, -0x26e(%rbp)
jmp 0x5029a
movb -0x26e(%rbp), %al
movsbl %al, %eax
cmpl $0x66, %eax
jne 0x502b7
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
movl -0xf4(%rbp), %ecx
movl $0x36, %edx
callq 0x4e600
jmp 0x502d7
movl $0x1, -0xec(%rbp)
jmp 0x50390
leaq -0x1b9(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x75f0
movq -0x278(%rbp), %rdx
leaq 0x92b5(%rip), %rsi      # 0x595bc
leaq -0x1b8(%rbp), %rdi
callq 0xf990
jmp 0x50315
movq -0x1c8(%rbp), %rsi
movq -0x1d8(%rbp), %rdi
xorl %edx, %edx
movl $0x1, %ecx
leaq -0x1b8(%rbp), %r8
callq 0x4e720
jmp 0x50338
leaq -0x1b8(%rbp), %rdi
callq 0x71d0
leaq -0x1b9(%rbp), %rdi
callq 0x7310
movl $0x1, -0xec(%rbp)
jmp 0x50390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x50382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x71d0
leaq -0x1b9(%rbp), %rdi
callq 0x7310
jmp 0x503aa
leaq -0xe8(%rbp), %rdi
callq 0x9600
leaq -0x98(%rbp), %rdi
callq 0x9600
jmp 0x503c4
leaq -0xe8(%rbp), %rdi
callq 0x9600
leaq -0x98(%rbp), %rdi
callq 0x9600
jmp 0x503d4
movq -0x1d0(%rbp), %rax
addq $0x280, %rsp            # imm = 0x280
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x75e0
nopl (%rax)