// File: /workspace/github_c_makefile_star2_O2/System-Glitch[P]ESGILinter-C/src/parsing_expressions.c
// Function: parse_expression
type_t parse_expression(char *line, int line_index, scope_t *scope, messages_t *messages) {
	type_t type;
	type_t return_type;
	function_t *function     = NULL;
	char       *expr         = NULL;
	char       *following    = NULL; //Used in parse_control "case"
	char       *tmp          = NULL;
	unsigned int start_index = 0;
	unsigned int end_index   = 0;
	unsigned int close_index = 0;
	int last_index           = -1; //Last index or quote for char and string literal
	unsigned char is_return  = 0;
	unsigned char is_for     = 0;
	int index                = 0;
	unsigned int sub_index   = 0;
	int length               = 0;
	int type_length;
	char c;

	type.name = strduplicate("NULL");
	type.is_pointer = 0;
	type.is_literal = 0;

	line   = str_remove_comments(line);
	length = strlen(line);
	tmp    = remove_parenthesis(line, length);
	if(tmp != NULL) {
		free(line);
		line   = tmp;
		length = strlen(tmp);
	}


	SKIP_WHITESPACES

	if(c == '(') {
		//Parenthesis -> cast

		index++;

		SKIP_WHITESPACES

		start_index = index;

		while((c = line[index]) != ')' && index < length) index++;

		if(c != ')') { //No closing parenthesis, syntax error
			if(tmp != NULL) free(tmp);
			else free(line);
			return type;
		}

		close_index = index;

		index++;

		//Check if something follows
		SKIP_WHITESPACES
		
		if(index >= length || is_whitespace(c) || c == ')') {
			if(tmp != NULL) free(tmp);
			else free(line);
			return type;
		}

		index = close_index;

		//Skip whitespaces backwards to find end of type
		while(is_whitespace(c = line[index]) && index > 0) { index--; }

		end_index = index;

		free(type.name);
		type_length     = end_index - start_index;
		type.name       = strsubstr(line, start_index, type_length);
		type.is_pointer = strcount(type.name, '*');
		sub_index       = strcountuntil(type.name, '*', 1, 1);

		//Remove stars
		type.name[type_length - sub_index] = '\0';

		//Check expression without cast
		expr = strsubstr(line, close_index + 1, length - close_index);
		parse_expression(expr, line_index, scope, messages);
		free(expr);


	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rcx, %r12
movq %rdx, 0x50(%rsp)
movl %esi, 0x24(%rsp)
movq %rdi, %rbx
leaq 0x396d(%rip), %rdi      # 0xe8b0
callq 0x794d
movq %rax, %r15
movq %rbx, %rdi
callq 0x77dc
movq %rax, %rbx
movq %rax, %rdi
callq 0x20b0
movq %rax, %r13
movq %rbx, %rdi
movl %r13d, %esi
callq 0x7f1f
testq %rax, %rax
movq %rax, 0x28(%rsp)
movq %r15, 0x10(%rsp)
movq %r12, 0x40(%rsp)
je 0xaf98
movq %rax, %r14
movq %rbx, %rdi
callq 0x2030
movq %r14, %rdi
callq 0x20b0
movq %r14, %rbx
jmp 0xaf9b
movq %r13, %rax
movq %rax, 0x38(%rsp)
cltq
movq %rax, 0x18(%rsp)
leaq 0x1(%rbx), %rax
leaq -0x1(%rbx), %rcx
movq %rcx, 0x70(%rsp)
pushq $0x1
popq %rcx
pushq $-0x1
popq %r14
pushq $-0x2
popq %r12
xorl %ebp, %ebp
movq %rbx, 0x8(%rsp)
movq %rbx, 0x30(%rsp)
movq %rbp, %rbx
movq %rcx, %r15
movq %rax, %rbp
movq 0x8(%rsp), %rax
movsbl (%rax,%rbx), %r13d
movl %r13d, %edi
callq 0x7ace
movq %rbp, %rdx
leaq 0x1(%rbx), %rbp
movq %r14, 0x58(%rsp)
incq %r14
incq 0x30(%rsp)
incq 0x70(%rsp)
incl %r12d
testb %al, %al
je 0xb015
leaq 0x1(%r15), %rcx
leaq 0x1(%rdx), %rax
cmpq 0x18(%rsp), %rbx
jl 0xafcb
movzbl %r13b, %eax
cmpl $0x22, %eax
movq %rdx, 0x88(%rsp)
movl %eax, 0x7c(%rsp)
je 0xb12f
cmpl $0x27, %eax
movq 0x18(%rsp), %r13
je 0xb0c9
cmpl $0x28, %eax
jne 0xb149
movslq %r15d, %rax
movq %rax, %r13
movq 0x8(%rsp), %rax
movsbl (%rax,%r15), %edi
callq 0x7ace
leaq 0x1(%r15), %rcx
testb %al, %al
je 0xb070
leaq 0x1(%r13), %rax
cmpl %r15d, 0x38(%rsp)
movq %rcx, %r15
jg 0xb048
leaq -0x1(%rcx), %r12
xorl %r14d, %r14d
movq 0x8(%rsp), %rdi
movq 0x38(%rsp), %rdx
movq %r13, %rbp
movb -0x1(%rdi,%rcx), %al
incl %r14d
leaq 0x1(%rcx), %rbx
cmpb $0x29, %al
je 0xb0a0
decl %ecx
leaq 0x1(%rbp), %r13
cmpl %ecx, %edx
movq %rbx, %rcx
jg 0xb081
cmpb $0x29, %al
je 0xb469
movq 0x28(%rsp), %rax
testq %rax, %rax
movq 0x10(%rsp), %r14
je 0xb0ba
movq %rax, %rdi
callq 0x2030
xorl %ebx, %ebx
xorl %r13d, %r13d
jmp 0xbea5
pushq $0x27
popq %rsi
movq 0x8(%rsp), %rdi
callq 0x7b78
cmpl %eax, %ebx
je 0xb149
cltq
incq %rax
movq 0x8(%rsp), %r15
movq %rax, %rbx
movb (%r15,%rax), %r14b
movsbl %r14b, %ebp
movl %ebp, %edi
callq 0x7ace
testb %al, %al
je 0xb103
leaq 0x1(%rbx), %rax
cmpq %r13, %rbx
jl 0xb0e4
cmpb $0x3b, %r14b
jne 0xb6ad
movq 0x10(%rsp), %rdi
callq 0x2030
leaq 0x37d8(%rip), %rdi      # 0xe8f6
callq 0x794d
movq %rax, 0x10(%rsp)
movb $0x1, %bl
jmp 0xbe86
pushq $0x22
popq %rsi
movq 0x8(%rsp), %rdi
callq 0x7b78
cmpl %eax, %ebx
movq 0x18(%rsp), %r13
jne 0xb411
movq 0x8(%rsp), %rax
leaq (%rax,%rbx), %rcx
movq %rcx, 0xa0(%rsp)
movl %ebx, %ecx
addq %rax, %rcx
movq %rcx, 0x68(%rsp)
xorl %r13d, %r13d
cmpq $0x18, %r13
je 0xb253
leaq 0x7c58(%rip), %rax      # 0x12dd0
movq (%r13,%rax), %r15
movq %r15, %rdi
callq 0x20b0
movq 0x68(%rsp), %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x2070
addq $0x8, %r13
testl %eax, %eax
jne 0xb167
movq %r15, %rdi
callq 0x20b0
movq %rax, 0x80(%rsp)
addl %r14d, %eax
movslq %eax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x48(%rsp)
addq %rcx, %rax
movq %rax, 0x60(%rsp)
xorl %r15d, %r15d
movq 0x48(%rsp), %rax
leaq (%rax,%r15), %r13
movq 0x60(%rsp), %rax
movb (%rax,%r15), %bl
movsbl %bl, %edi
callq 0x7ace
incq %r15
cmpq 0x18(%rsp), %r13
jge 0xb1f0
testb %al, %al
jne 0xb1c8
addl 0x80(%rsp), %r12d
addq %r15, %r12
cmpb $0x28, %bl
movq 0x18(%rsp), %r13
jne 0xb25a
pushq $0x29
popq %rsi
movq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x7b78
cmpl %r12d, %eax
jle 0xb25a
movq 0x80(%rsp), %rcx
addl %ecx, %r14d
addl %r15d, %r14d
addl %ecx, %ebp
subl %ebp, %eax
subl %r15d, %eax
incl %eax
movq %rbx, %rdi
movl %r14d, %esi
movl %eax, %edx
callq 0x79a6
movq %rax, %r12
movb $0x1, %bl
movq $0x0, 0x48(%rsp)
movb $0x1, %al
jmp 0xb5b0
movq 0x18(%rsp), %r13
jmp 0xb25d
movl %r12d, %ebx
movslq %ebx, %r14
movq 0x8(%rsp), %r15
addq %r15, %r14
leaq 0x355c(%rip), %rsi      # 0xe7cb
pushq $0x4
popq %rdx
movq %r14, %rdi
callq 0x2070
testl %eax, %eax
je 0xb36e
leaq 0x3574(%rip), %rsi      # 0xe7fd
pushq $0x6
popq %rdx
movq %r14, %rdi
callq 0x2070
testl %eax, %eax
je 0xb56c
leaq 0x3509(%rip), %rsi      # 0xe7ac
pushq $0x4
popq %rdx
movq %r14, %rdi
callq 0x2070
testl %eax, %eax
je 0xb629
leaq 0x3503(%rip), %rsi      # 0xe7c0
pushq $0x7
popq %rdx
movq %r14, %rdi
callq 0x2070
testl %eax, %eax
je 0xb9e6
cmpb $0x66, (%r14)
jne 0xba22
cmpb $0x6f, 0x1(%r14)
jne 0xba22
cmpb $0x72, 0x2(%r14)
jne 0xba22
addl $0x3, %ebx
movslq %ebx, %r14
movq %r14, %r15
movq 0x8(%rsp), %rax
movb (%rax,%r14), %bl
movsbl %bl, %edi
callq 0x7ace
incq %r14
cmpq %r13, %r15
jge 0xb316
testb %al, %al
jne 0xb2f6
cmpb $0x28, %bl
jne 0xba22
leal -0x1(%r14), %ebx
pushq $0x29
popq %rsi
movq 0x8(%rsp), %rdi
callq 0x7b78
cmpl %ebx, %eax
jle 0xba22
subl %r14d, %eax
movq 0x8(%rsp), %rdi
movl %r14d, %esi
movl %eax, %edx
callq 0x79a6
movq %rax, %r12
pushq $0x3b
popq %rsi
movq %rax, %rdi
callq 0x79fc
cmpl $0x1, %eax
ja 0xc241
movq %r12, %rdi
callq 0x2030
jmp 0xba22
leal 0x4(%rbx), %eax
movslq %eax, %rcx
xorl %ebp, %ebp
movq %rcx, %r14
movsbl (%r15,%rcx), %edi
callq 0x7ace
leaq 0x1(%r14), %rcx
decl %ebp
cmpq %r13, %r14
jge 0xb392
testb %al, %al
jne 0xb376
cmpl $-0x1, %ebp
je 0xba22
movq 0x8(%rsp), %rax
cmpb $0x69, -0x1(%rax,%rcx)
jne 0xba22
movq 0x8(%rsp), %rax
cmpb $0x66, (%rax,%rcx)
jne 0xba22
subl %ebp, %ebx
addl $0x5, %ebx
movslq %ebx, %r14
movq %r14, %r15
movq 0x8(%rsp), %rax
movb (%rax,%r14), %bl
movsbl %bl, %edi
callq 0x7ace
incq %r14
cmpq %r13, %r15
jge 0xb3e2
testb %al, %al
jne 0xb3c2
cmpb $0x28, %bl
jne 0xba22
leal -0x1(%r14), %ebx
pushq $0x29
popq %rsi
movq 0x8(%rsp), %rdi
callq 0x7b78
cmpl %ebx, %eax
jle 0xba22
subl %r14d, %eax
movq 0x8(%rsp), %rdi
jmp 0xb234
cltq
incq %rax
movq 0x8(%rsp), %r15
movq %rax, %rbx
movb (%r15,%rax), %r14b
movsbl %r14b, %ebp
movl %ebp, %edi
callq 0x7ace
testb %al, %al
je 0xb43a
leaq 0x1(%rbx), %rax
cmpq %r13, %rbx
jl 0xb41b
cmpb $0x3b, %r14b
jne 0xb6ca
movq 0x10(%rsp), %rdi
callq 0x2030
leaq 0x34a1(%rip), %rdi      # 0xe8f6
callq 0x794d
movq %rax, 0x10(%rsp)
movb $0x1, %bl
movb $0x1, %r13b
jmp 0xbe89
leaq -0x1(%rbx), %rax
movq %rax, 0x30(%rsp)
cltq
movq %rax, %r13
movq 0x8(%rsp), %rax
movb (%rax,%r13), %al
movsbl %al, %r15d
movl %r15d, %edi
callq 0x7ace
testb %al, %al
je 0xb49b
leaq 0x1(%r13), %rax
cmpq 0x18(%rsp), %r13
jl 0xb474
cmpq 0x18(%rsp), %r13
jge 0xb60b
movl %r15d, %edi
callq 0x7ace
cmpb $0x29, %r15b
je 0xb60b
testb %al, %al
jne 0xb60b
movq 0x8(%rsp), %r15
movsbl (%r15,%rbp), %edi
callq 0x7ace
decl %r14d
testq %rbp, %rbp
jle 0xb4de
decq %rbp
testb %al, %al
jne 0xb4c5
movq 0x10(%rsp), %rdi
callq 0x2030
movq %r15, %rdi
movl %r12d, %esi
movl %r14d, %edx
callq 0x79a6
movq %rax, %r12
pushq $0x2a
popq %r15
movq %rax, %rdi
movl %r15d, %esi
callq 0x79fc
movl %eax, %r13d
pushq $0x1
popq %rcx
movq %r12, %rdi
movl %r15d, %esi
movq 0x8(%rsp), %r15
movl %ecx, %edx
callq 0x7a2e
subl %eax, %r14d
movq %r12, 0x10(%rsp)
movb $0x0, (%r12,%r14)
movq 0x38(%rsp), %rdx
subl %ebx, %edx
addl $0x2, %edx
movq %r15, %rdi
movq 0x30(%rsp), %rsi
callq 0x79a6
movq %rax, %r14
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq 0x50(%rsp), %rdx
movq 0x40(%rsp), %rcx
callq 0xaf1c
movq %r14, %rdi
callq 0x2030
xorl %ebx, %ebx
jmp 0xbe89
leal 0x6(%rbx), %eax
movslq %eax, %r14
addl $0x5, %ebx
movsbl (%r15,%r14), %edi
callq 0x7ace
incl %ebx
cmpq %r13, %r14
jge 0xb58d
incq %r14
testb %al, %al
jne 0xb575
movq 0x38(%rsp), %rax
movl %eax, %edx
subl %ebx, %edx
movq %r15, %rdi
movl %ebx, %esi
callq 0x79a6
movq %rax, %r12
movb $0x1, %al
movq $0x0, 0x48(%rsp)
xorl %ebx, %ebx
testq %r12, %r12
je 0xba22
movq %rax, 0x30(%rsp)
movq %rbx, 0x18(%rsp)
movq %r12, %rdi
movl 0x24(%rsp), %ebx
movl %ebx, %esi
movq 0x50(%rsp), %r13
movq %r13, %rdx
movq 0x40(%rsp), %rbp
movq %rbp, %rcx
callq 0xaf1c
movq %rdx, %r15
leaq 0x32c5(%rip), %rsi      # 0xe8b0
movq %rax, %r14
movq %rax, %rdi
callq 0x2110
testl %eax, %eax
movq %r12, 0x60(%rsp)
je 0xb6e7
movq %r14, %rbx
jmp 0xb6fd
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
jne 0xb61a
movq 0x8(%rsp), %rdi
callq 0x2030
xorl %ebx, %ebx
xorl %r13d, %r13d
jmp 0xbea0
addl $0x4, %ebx
movslq %ebx, %rbx
movq %rbx, %r14
movsbl (%r15,%rbx), %edi
callq 0x7ace
incq %rbx
cmpq %r13, %r14
jge 0xb648
testb %al, %al
jne 0xb62f
leal -0x1(%rbx), %r12d
movl %r12d, %ebp
movq 0x38(%rsp), %rdx
movl %edx, %r14d
subl %ebp, %r14d
jle 0xba22
movslq %ebp, %rcx
movq 0x8(%rsp), %rax
addq %rcx, %rax
xorl %r15d, %r15d
leaq (%rcx,%r15), %rsi
movb (%rax,%r15), %dil
incq %r15
cmpq %r13, %rsi
jge 0xb684
cmpb $0x3a, %dil
jne 0xb66e
cmpb $0x3a, %dil
jne 0xb6a8
leaq (%r15,%rax), %rsi
decq %rsi
movq 0x8(%rsp), %rdi
callq 0x7e2e
movq 0x38(%rsp), %rdx
testb %al, %al
je 0xbdde
addl %r15d, %ebp
jmp 0xb654
movl %ebp, %edi
callq 0x7ace
testb %al, %al
jne 0xb10d
cmpq %r13, %rbx
jl 0xbe84
jmp 0xb10d
movl %ebp, %edi
callq 0x7ace
testb %al, %al
jne 0xb444
cmpq %r13, %rbx
jl 0xbe84
jmp 0xb444
movq %r12, %rdi
movl %ebx, %esi
movq %r13, %rdx
movq %rbp, %rcx
callq 0x6ce0
movq %rax, %rbx
movq %rdx, %r15
cmpb $0x0, 0x18(%rsp)
jne 0xb801
leaq 0x31a1(%rip), %rsi      # 0xe8b0
movq %rbx, %rdi
callq 0x2110
testl %eax, %eax
je 0xb801
movq %rbx, 0x18(%rsp)
movq %rbx, 0x90(%rsp)
movq %r15, 0x98(%rsp)
movq %r13, %rdi
callq 0x6689
movq (%rax), %rbx
testq %rbx, %rbx
movq 0x60(%rsp), %r12
je 0xb969
movq %rax, %rbp
xorl %r15d, %r15d
movq 0x10(%rbx), %rdi
cmpq 0x8(%rdi), %r15
jae 0xb969
movq %r15, %rsi
callq 0x6978
movq %rax, %r14
movl 0x28(%rax), %eax
incq %r15
cmpl 0x20(%rbp), %eax
jne 0xb753
leaq 0x8(%r14), %rdi
leaq 0x90(%rsp), %rsi
callq 0x652a
testb %al, %al
jne 0xb969
pushq $0x10
popq %rbx
movq %rbx, %rdi
callq 0x2130
movq %rax, %rbp
movq %rbx, %rdi
callq 0x2130
movq %rax, %r15
movq %rax, (%rbp)
movq 0x8(%r14), %rdi
callq 0x794d
movq %rax, (%r15)
movb 0x10(%r14), %al
movb %al, 0x8(%r15)
movq %rbx, %rdi
callq 0x2130
movq %rax, %r14
movq %rax, 0x8(%rbp)
movq 0x90(%rsp), %rdi
callq 0x794d
movq %rax, (%r14)
movb 0x98(%rsp), %al
movb %al, 0x8(%r14)
movq 0x40(%rsp), %rax
movq 0x28(%rax), %rdi
movq %rbp, %rsi
callq 0x68b5
jmp 0xb969
cmpb $0x0, 0x30(%rsp)
movq 0x60(%rsp), %r12
jne 0xb96e
movq %r12, %rdi
callq 0x20b0
movq %r12, %rdi
xorl %esi, %esi
movq %rax, 0x30(%rsp)
movl %eax, %edx
callq 0xc289
cmpl $-0x1, %eax
je 0xb96e
movl %eax, %ebp
movq %r12, %rdi
xorl %esi, %esi
movl %eax, %edx
callq 0x79a6
movq %rax, %r14
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq 0x40(%rsp), %rcx
callq 0xaf1c
movq %rax, %r15
leaq 0x304e(%rip), %rsi      # 0xe8b0
movq %rax, %rdi
callq 0x2110
testl %eax, %eax
jne 0xb885
movq %r14, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq 0x40(%rsp), %rcx
callq 0x6ce0
movq %rax, %r15
movq %r15, %rdi
callq 0x2030
incl %ebp
movq %r12, %rdi
movl %ebp, %esi
movq 0x30(%rsp), %rdx
callq 0xc289
cmpl $-0x1, %eax
je 0xb96e
movl %eax, %r14d
movq %rbx, 0x18(%rsp)
movl %eax, %edx
subl %ebp, %edx
movq %r12, %rdi
movl %ebp, %esi
callq 0x79a6
movq %rax, %r15
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq 0x40(%rsp), %rbx
movq %rbx, %rcx
callq 0xaf1c
movq %rax, %rbp
leaq 0x2fcf(%rip), %rsi      # 0xe8b0
movq %rax, %rdi
callq 0x2110
testl %eax, %eax
jne 0xb902
movq %r15, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x6ce0
movq %rax, %rbp
movq %rbp, %rdi
callq 0x2030
leal 0x1(%r14), %esi
notl %r14d
addl 0x30(%rsp), %r14d
movq %r12, %rdi
movl %r14d, %edx
callq 0x79a6
movq %rax, %r14
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq %rbx, %rcx
callq 0xaf1c
movq %rax, %r15
leaq 0x2f70(%rip), %rsi      # 0xe8b0
movq %rax, %rdi
callq 0x2110
testl %eax, %eax
jne 0xb961
movq %r14, %rdi
movl 0x24(%rsp), %esi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x6ce0
movq %rax, %r15
movq %r15, %rdi
callq 0x2030
movq 0x18(%rsp), %rbx
movq %rbx, %rdi
callq 0x2030
movq %r12, %rdi
callq 0x2030
movq 0x48(%rsp), %r12
testq %r12, %r12
je 0xbc80
movq %r12, %rdi
movl 0x24(%rsp), %ebp
movl %ebp, %esi
movq %r13, %rdx
movq 0x40(%rsp), %rbx
movq %rbx, %rcx
callq 0xaf1c
leaq 0x2f04(%rip), %rsi      # 0xe8b0
movq 0x10(%rsp), %rdi
callq 0x2110
testl %eax, %eax
movq 0x8(%rsp), %r15
movq 0x28(%rsp), %r14
jne 0xb9d4
movq %r12, %rdi
movl %ebp, %esi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x6ce0
movq %r12, %rdi
callq 0x2030
xorl %ebx, %ebx
xorl %r13d, %r13d
jmp 0xbe8e
addl $0x7, %ebx
movslq %ebx, %rsi
movq %rsi, %r14
movb (%r15,%rsi), %bl
movsbl %bl, %edi
callq 0x7ace
leaq 0x1(%r14), %rsi
cmpq %r13, %r14
jge 0xba08
testb %al, %al
jne 0xb9ec
cmpb $0x3a, %bl
movq 0x38(%rsp), %rax
jne 0xba22
movl %eax, %edx
subl %esi, %edx
jle 0xba22
movq 0x8(%rsp), %rdi
jmp 0xb239
movl 0x7c(%rsp), %ebx
movsbl %bl, %edi
callq 0x7e1a
cmpl $0x2e, %ebx
je 0xbaf6
testb %al, %al
jne 0xbaf6
movq 0x40(%rsp), %rbp
cmpq $0x0, (%rbp)
je 0xbc80
movl 0x24(%rsp), %r12d
movl %r12d, %edi
movq 0xa0(%rsp), %rsi
callq 0xaa3c
testq %rax, %rax
movq 0x8(%rsp), %r15
je 0xbc8f
movq %rax, %r14
movq 0x50(%rsp), %r13
testq %r13, %r13
je 0xbdcd
movq (%r14), %rsi
movq %r13, %rdi
xorl %edx, %edx
callq 0x66a0
testq %rax, %rax
je 0xbe2e
movq %rax, %rbx
movq %r13, %rdi
callq 0x667d
movq (%r14), %rsi
movq %rax, %rdi
callq 0x6754
cmpl %r12d, 0x28(%rbx)
jl 0xbac8
testq %rax, %rax
je 0xc0e3
cmpl %r12d, 0x28(%rax)
jge 0xc0e3
movq 0x10(%rsp), %rdi
callq 0x2030
cmpl $0x0, 0x2c(%r14)
jle 0xc10a
leaq 0x2e2f(%rip), %rdi      # 0xe913
callq 0x794d
movq %rax, 0x10(%rsp)
xorl %r13d, %r13d
jmp 0xc11c
movq 0x8(%rsp), %r15
movq 0x58(%rsp), %rbp
movsbl 0x1(%r15,%rbp), %r14d
incq %rbp
movl %r14d, %edi
callq 0x7e1a
cmpq %r13, %rbp
jge 0xbb1a
testb %al, %al
jne 0xbb00
movzbl %r14b, %eax
leal -0x44(%rax), %ecx
cmpl $0x31, %ecx
ja 0xbd3a
movabsq $0x2010500020105, %rbx  # imm = 0x2010500020105
btq %rcx, %rbx
jae 0xbd3a
xorl %r13d, %r13d
leaq 0x2d68(%rip), %r14      # 0xe8b0
leaq 0x3153(%rip), %r12      # 0xeca2
movq %rbp, %rax
movq %rax, %rbp
movzbl (%r15,%rax), %eax
leal -0x44(%rax), %ecx
cmpl $0x31, %ecx
ja 0xbe51
btq %rcx, %rbx
jae 0xbe51
cmpq 0x18(%rsp), %rbp
jge 0xbe6c
cmpl $0x44, %eax
movq 0x10(%rsp), %r15
je 0xbbc1
cmpl $0x46, %eax
je 0xbbde
cmpl $0x4c, %eax
je 0xbbfb
cmpl $0x75, %eax
je 0xbba8
cmpl $0x64, %eax
je 0xbbc1
cmpl $0x66, %eax
je 0xbbde
cmpl $0x6c, %eax
je 0xbbfb
cmpl $0x55, %eax
jne 0xbc1a
movq %r15, %rdi
movq %r14, %rsi
callq 0x2110
testl %eax, %eax
movq %r12, %r13
leaq 0x2bcd(%rip), %rax      # 0xe78c
jmp 0xbc16
movq %r15, %rdi
movq %r14, %rsi
callq 0x2110
testl %eax, %eax
leaq 0x2d7e(%rip), %r13      # 0xe953
leaq 0x2d78(%rip), %rax      # 0xe954
jmp 0xbc16
movq %r15, %rdi
movq %r14, %rsi
callq 0x2110
testl %eax, %eax
leaq 0x30ba(%rip), %r13      # 0xecac
leaq 0x30b4(%rip), %rax      # 0xecad
jmp 0xbc16
movq %r15, %rdi
movq %r14, %rsi
callq 0x2110
testl %eax, %eax
leaq 0x2d10(%rip), %r13      # 0xe91f
leaq 0x2d0a(%rip), %rax      # 0xe920
cmoveq %rax, %r13
movq %r15, %rdi
movq %r14, %rsi
callq 0x2110
testl %eax, %eax
je 0xbc40
movq %r13, %rdi
movq %r12, %rsi
callq 0x2110
testl %eax, %eax
je 0xbc55
movq %r15, %rdi
movq %r13, %rsi
jmp 0xbc5b
movq %r15, %rdi
callq 0x2030
movq %r13, %rdi
callq 0x794d
movq %rax, %r15
jmp 0xbc6b
movq %r13, %rdi
movq %r15, %rsi
callq 0x7bab
movq %r15, %rdi
movq %rax, %r15
callq 0x2030
movq %rbp, %rax
incq %rax
movq %r15, 0x10(%rsp)
movq 0x8(%rsp), %r15
jmp 0xbb52
xorl %ebx, %ebx
xorl %r13d, %r13d
movq 0x8(%rsp), %r15
jmp 0xbe89
movq 0x68(%rsp), %rdi
callq 0x20b0
movslq %eax, %r12
xorl %r14d, %r14d
movq 0x68(%rsp), %rax
movsbl (%rax,%r14), %edi
callq 0x7ace
leaq 0x1(%r14), %rbx
incq 0x88(%rsp)
testb %al, %al
je 0xbcc6
cmpq %r12, %r14
movq %rbx, %r14
jl 0xbc9f
pushq $0x2
popq %rsi
pushq $-0x1
popq %rax
movq 0x88(%rsp), %rdx
cmpb $0x21, -0x1(%rdx,%rax)
jne 0xbcec
leaq (%rbx,%rax), %rcx
cmpq %r12, %rcx
jge 0xbcec
decq %rsi
incq %rax
jmp 0xbcd4
subq %rsi, %rbx
movq %rsi, 0x38(%rsp)
subq %rsi, %rdx
incq %rbx
movsbl (%rdx), %edi
movq %rdx, %r14
callq 0x7ace
movq %r14, %rdx
incq %rdx
testb %al, %al
je 0xbd14
cmpq %r12, %rbx
jl 0xbcf7
movzbl -0x1(%rdx), %eax
cmpl $0x2d, %eax
je 0xbeed
cmpl $0x2b, %eax
jne 0xbef6
cmpb $0x2b, (%rdx)
jne 0xbef6
pushq $0x1
jmp 0xbef8
cmpl $0x2e, %eax
jne 0xbe22
movsbl 0x1(%r15,%rbp), %edi
callq 0x7e1a
testb %al, %al
movq 0x28(%rsp), %r14
je 0xb9dc
movq %r14, %r13
leaq 0x1(%rbp), %rbx
movsbl (%r15,%rbx), %r12d
movl %r12d, %edi
callq 0x7e1a
incl %ebp
cmpq 0x18(%rsp), %rbx
jge 0xbd7f
incq %rbx
testb %al, %al
jne 0xbd62
movzbl %r12b, %r15d
leaq 0x2bca(%rip), %r14      # 0xe954
cmpl $0x3b, %r15d
je 0xbda7
cmpl %ebp, 0x38(%rsp)
jle 0xbda7
movsbl %r12b, %edi
callq 0x7ace
testb %al, %al
je 0xc18d
movq 0x8(%rsp), %r15
movq 0x10(%rsp), %rdi
callq 0x2030
movq %r14, %rdi
callq 0x794d
movq %rax, 0x10(%rsp)
xorl %ebx, %ebx
movq %r13, %r14
jmp 0xb9de
movq 0x8(%rbp), %rdi
movq %r14, %rsi
callq 0x68b5
jmp 0xbe84
movl %ebp, %eax
subl %ebx, %eax
leal (%r15,%rax), %edx
movq 0x8(%rsp), %r13
movq %r13, %rdi
movl %r12d, %esi
callq 0x79a6
movq %rax, %r12
movl %ebp, %esi
addq %r15, %rsi
movb $0x1, %bl
cmpl 0x38(%rsp), %esi
jge 0xc0ce
subl %r15d, %r14d
movq %r13, %rdi
movl %r14d, %edx
callq 0x79a6
movq %rax, 0x48(%rsp)
jmp 0xc0d7
leaq 0x2aea(%rip), %rdi      # 0xe913
jmp 0xb11e
movq 0x8(%rbp), %rdi
movq %r14, %rsi
callq 0x68b5
xorl %ebx, %ebx
movq %r13, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %r12d, %ecx
movq %rbp, %r8
callq 0xad7d
jmp 0xbe86
cmpq 0x18(%rsp), %rbp
jge 0xbe6c
cmpb $0x3b, %al
je 0xbe6c
movsbl %al, %edi
callq 0x7ace
testb %al, %al
je 0xc16d
leaq 0x2919(%rip), %rsi      # 0xe78c
movq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x2110
testl %eax, %eax
je 0xbec7
xorl %ebx, %ebx
xorl %r13d, %r13d
movq 0x28(%rsp), %r14
testq %r14, %r14
je 0xbe98
movq %r14, %rdi
jmp 0xbe9b
movq %r15, %rdi
callq 0x2030
movq 0x10(%rsp), %r14
movzbl %bl, %eax
shll $0x8, %eax
movzbl %r13b, %edx
orq %rax, %rdx
movq %r14, %rax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2a44(%rip), %rsi      # 0xe912
movq %rbx, %rdi
callq 0x7bab
movq %rax, %r14
movq %rbx, %rdi
callq 0x2030
xorl %ebx, %ebx
xorl %r13d, %r13d
movq %r14, 0x10(%rsp)
jmp 0xbe89
cmpb $0x2d, (%rdx)
je 0xbd33
pushq $-0x1
popq %r15
addq %rbx, %r15
movq $0x0, 0x18(%rsp)
movq %r15, 0x58(%rsp)
movslq %r15d, %r15
movq 0x30(%rsp), %rax
leaq (%rax,%r15), %r13
xorl %ebp, %ebp
movsbl (%r13,%rbp), %r14d
movl %r14d, %edi
callq 0x7ace
leaq 0x1(%rbp), %rbx
testb %al, %al
je 0xbf3e
leaq (%r15,%rbp), %rax
incq %rax
movq %rbx, %rbp
cmpq %r12, %rax
jl 0xbf19
movzbl %r14b, %ecx
movb $0x1, %al
cmpl $0x26, %ecx
movq 0x18(%rsp), %rdx
je 0xbf55
cmpl $0x2a, %ecx
jne 0xbf61
movb $-0x1, %al
addq %rbx, %r15
addb %al, %dl
movq %rdx, 0x18(%rsp)
jmp 0xbf06
movq 0x58(%rsp), %r13
movslq %r13d, %r14
movq 0x70(%rsp), %r15
addq %r14, %r15
movsbl (%r15,%rbx), %edi
callq 0x7ace
leaq 0x1(%rbx), %rcx
testb %al, %al
je 0xbf8e
addq %r14, %rbx
cmpq %r12, %rbx
movq %rcx, %rbx
jl 0xbf71
movslq %r13d, %rax
leaq (%rax,%rcx), %r13
addq $-0x2, %r13
movq %rcx, 0x70(%rsp)
addq %rcx, %rax
movq 0x30(%rsp), %rcx
leaq (%rcx,%rax), %rbx
addq $-0x3, %rbx
leaq -0x2(%rcx,%rax), %r15
pushq $0x1
popq %r14
incq %r13
movsbl (%r15), %edi
callq 0x7dfb
incq %rbx
decq %r14
testb %al, %al
je 0xbfd5
incq %r15
cmpq %r12, %r13
jl 0xbfb7
movq %r14, 0x30(%rsp)
movq %r13, %r14
movb (%rbx), %bpl
movsbl %bpl, %r15d
movl %r15d, %edi
callq 0x7ace
testb %al, %al
je 0xbffc
leaq 0x1(%r14), %r13
incq %rbx
cmpq %r12, %r14
jl 0xbfda
cmpq %r12, %r14
jge 0xc037
cmpb $0x3b, %bpl
je 0xc037
movl %r15d, %edi
callq 0x7ace
xorl %ebx, %ebx
movq 0x30(%rsp), %rdx
testq %rdx, %rdx
movq 0x28(%rsp), %r14
movq 0x58(%rsp), %rsi
je 0xc160
testb %al, %al
movq 0x8(%rsp), %r15
jne 0xc054
jmp 0xb9de
movq 0x30(%rsp), %rdx
testq %rdx, %rdx
movq 0x8(%rsp), %r15
movq 0x28(%rsp), %r14
movq 0x58(%rsp), %rsi
je 0xb9dc
decl %esi
addq 0x70(%rsp), %rsi
negl %edx
movq 0x68(%rsp), %rdi
callq 0x79a6
testq %rax, %rax
je 0xb9dc
movq %rax, %r13
movq %rax, %rdi
callq 0x67a6
testb %al, %al
jne 0xb9dc
movq %r14, %r12
movq 0x50(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x66fd
testq %rbx, %rbx
je 0xc0b1
movq %rax, %r14
testq %rax, %rax
je 0xc0b1
movl 0x24(%rsp), %eax
cmpl %eax, 0x20(%r14)
jle 0xc1e5
movq 0x40(%rsp), %rax
movq (%rax), %rdi
movq %r13, %rsi
callq 0x68b5
xorl %ebx, %ebx
xorl %r13d, %r13d
movq %r12, %r14
jmp 0xbe8e
movq $0x0, 0x48(%rsp)
movb $0x1, %al
movq 0x18(%rsp), %r13
jmp 0xb5b0
movq 0x8(%rbp), %rdi
movq %r14, %rsi
callq 0x68b5
movq 0x50(%rsp), %rdi
movq %r14, %rsi
movq %rbx, %rdx
movl %r12d, %ecx
movq %rbp, %r8
callq 0xad7d
jmp 0xbe84
movq 0x8(%rbx), %rdi
callq 0x794d
movq %rax, 0x10(%rsp)
movb 0x10(%rbx), %r13b
movq 0x48(%rbp), %r15
testq %r15, %r15
je 0xc13b
movq %r15, %rdi
movq %rbx, %rsi
callq 0x69d4
movq %r15, %rdi
movq %rax, %rsi
callq 0x6989
movq 0x50(%rsp), %rdi
movq %r14, %rsi
movq %rbx, %rdx
movl %r12d, %ecx
movq %rbp, %r8
callq 0xad7d
movq %r14, %rdi
callq 0xaefe
xorl %ebx, %ebx
jmp 0xbc85
xorl %r13d, %r13d
movq 0x8(%rsp), %r15
jmp 0xbe8e
movq 0x10(%rsp), %rdi
callq 0x2030
leaq 0x2732(%rip), %rdi      # 0xe8b0
callq 0x794d
movq %rax, 0x10(%rsp)
jmp 0xbe84
xorl %ebx, %ebx
addl $-0x44, %r15d
cmpl $0x28, %r15d
ja 0xc27f
movabsq $0x100000001, %rax      # imm = 0x100000001
btq %r15, %rax
jb 0xbda7
movabsq $0x400000004, %rax      # imm = 0x400000004
btq %r15, %rax
jb 0xc273
movabsq $0x10000000100, %rax    # imm = 0x10000000100
btq %r15, %rax
jae 0xc27f
leaq 0x276f(%rip), %r14      # 0xe94f
jmp 0xbda7
movq 0x40(%rsp), %rbx
movq 0x40(%rbx), %rdi
testq %rdi, %rdi
je 0xc20c
movq %r14, %rsi
callq 0x69d4
cmpl $-0x1, %eax
je 0xc20c
movq 0x40(%rbx), %rdi
movslq %eax, %rsi
callq 0x6989
cmpl $0x2, 0x38(%rsp)
movq 0x18(%rsp), %r13
jne 0xc253
addb 0x18(%r14), %r13b
js 0xc0c1
movq 0x10(%rsp), %rdi
callq 0x2030
movq 0x10(%r14), %rdi
callq 0x794d
movq %rax, 0x10(%rsp)
xorl %ebx, %ebx
jmp 0xc0c6
movb $0x1, %bl
movq $0x0, 0x48(%rsp)
xorl %eax, %eax
jmp 0xb5b0
movq 0x10(%rsp), %rdi
callq 0x2030
leaq 0x26af(%rip), %rdi      # 0xe913
callq 0x794d
movq %rax, 0x10(%rsp)
jmp 0xc0c1
leaq 0x2a33(%rip), %r14      # 0xecad
jmp 0xbda7
movq 0x8(%rsp), %r15
jmp 0xbdc5