// File: pixlark[P]Badge/src/compiler.cc
// Function: Compiler::compile_expr(Expr*)
void compile_expr(Expr * expr)
	{
		switch (expr->kind) {
		case EXPR_NOTHING:
			push(BC::create(BC_LOAD_CONST,
							Value::nothing(),
							expr->assoc));
			break;
		case EXPR_UNARY:
			compile_expr(expr->unary.expr);
			compile_operator(expr->unary.op, expr->assoc);
			break;
		case EXPR_BINARY:
			compile_expr(expr->binary.left);
			compile_expr(expr->binary.right);
			compile_operator(expr->binary.op, expr->assoc);
			break;
		case EXPR_INTEGER:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->integer),
							expr->assoc));
			break;
		case EXPR_STRING:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->string),
							expr->assoc));
			push(BC::create(BC_SYMBOL_TO_STRING,
							expr->assoc));
			break;
		case EXPR_VARIABLE:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->variable),
							expr->assoc));
			push(BC::create(BC_RESOLVE_BINDING,
							expr->assoc));
			break;
		case EXPR_SCOPE: {
			auto body = expr->scope.body;
			auto terminator = expr->scope.terminator;
			push(BC::create(BC_ENTER_SCOPE, expr->assoc));
			for (int i = 0; i < body.size; i++) {
				compile_stmt(body[i]);
			}
			if (terminator) {
				compile_expr(terminator);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_EXIT_SCOPE, expr->assoc));
		} break;
		case EXPR_LAMBDA: {
			auto params = expr->lambda.parameters;
			for (int i = 0; i < params.size; i++) {
				push(BC::create(BC_LOAD_CONST,
								Value::raise(params[i]),
								expr->assoc));
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(params.size),
							expr->assoc));
			Compiler compiler;
			compiler.init(blocks);
			compiler.compile_expr(expr->lambda.body);
			compiler.finalize();
			compiler.destroy();
			
			push(BC::create(BC_CONSTRUCT_FUNCTION,
							compiler.block_reference,
							expr->assoc));
		} break;
		case EXPR_FUNCALL: {
			auto args = expr->funcall.args;
			// Args are pushed in reverse order
			for (int i = args.size - 1; i >= 0; i--) {
				compile_expr(args[i]);
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(args.size),
							expr->assoc));
			compile_expr(expr->funcall.func);
			push(BC::create(BC_POP_AND_CALL_FUNCTION,
							expr->assoc));
		} break;
		case EXPR_IF: {
			List<int> end_jumps;
			end_jumps.alloc();

			auto _if = expr->if_expr;
			assert(_if.conditions.size == _if.expressions.size);
			for (int i = 0; i < _if.conditions.size; i++) {
				compile_expr(_if.conditions[i]);
				push(BC::create(BC_NOT, _if.conditions[i]->assoc));
				push(BC::create(BC_POP_JUMP, _if.conditions[i]->assoc));
				int skip_pos = bytecode.size - 1;
				compile_expr(_if.expressions[i]);
				push(BC::create(BC_JUMP, _if.conditions[i]->assoc));
				end_jumps.push(bytecode.size - 1);
				bytecode[skip_pos].arg.integer = bytecode.size;
			}
			if (_if.else_expr) {
				compile_expr(_if.else_expr);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_NOP, expr->assoc));
			for (int i = 0; i < end_jumps.size; i++) {
				assert(bytecode[end_jumps[i]].kind == BC_JUMP);
				bytecode[end_jumps[i]].arg.integer = bytecode.size - 1;
			}
			
			end_jumps.dealloc();
		} break;
		case EXPR_DIRECTIVE: {
			auto name = expr->directive.name;
			auto args = expr->directive.arguments;
			if (name == Intern::intern("builtin")) {
				// @builtin directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@builtin directive expects one argument");
				}
				// TODO(pixlark): This is a little bit hacky because
				// it's not really a variable, it's meant to be a
				// compile-time symbol. They are technically the same
				// thing but still it feels like we're trying to build
				// a directive-based DSL here out of an AST that was
				// parsed for something else. Maybe there should be a
				// new subtree type for compile-time expressions.
				if (args[0]->kind != EXPR_VARIABLE) {
					fatal_assoc(args[0]->assoc, "@builtin directive expects constant symbol");
				}
				auto builtin_symbol = args[0]->variable;
				// Builtin binding
				auto builtin = Builtins::get_builtin(builtin_symbol);
				Value value = Value::create(TYPE_BUILTIN);
				value.builtin = builtin;
				push(BC::create(BC_LOAD_CONST, value, expr->assoc));
			} else if (name == Intern::intern("struct")) {
				// @struct directive
				auto args = expr->directive.arguments;
				for (int i = args.size - 1; i >= 0; i--) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@struct directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
				}
				push(BC::create(BC_LOAD_CONST, Value::raise(args.size), expr->assoc));
				push(BC::create(BC_CONSTRUCT_CONSTRUCTOR, expr->assoc));
			} else if (name == Intern::intern("import")) {
				// @import directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@import directive expects one argument");
				}
				const char * path;
				if (args[0]->kind == EXPR_STRING) {
					auto filename = args[0]->string;
					path = Files::path_for_file(filename);
				} else if (args[0]->kind == EXPR_VARIABLE) {
					auto filename = args[0]->variable;
					path = Files::stdlib_file(filename);
				} else {
					fatal_assoc(args[0]->assoc, "@import directive expects constant string or symbol");
				}
				defer { free((void*) path); };
				// Compile file into our global Blocks
				size_t block_reference = blocks->upcoming_block();
				auto source = load_and_compile_file(blocks, path);
				if (!source) {
					fatal_assoc(args[0]->assoc, "Source file '%s' does not exist", path);
				}
				// @Warning: Implicit cast from size_t->int
				push(BC::create(BC_LOAD_CONST, Value::raise(block_reference), expr->assoc));
				push(BC::create(BC_RUN_FILE_UNIT, expr->assoc));
			} else if (name == Intern::intern("export")) {
				for (int i = 0; i < args.size; i++) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@export directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
					push(BC::create(BC_EXPORT_SYMBOL, args[i]->assoc));
				}
			} else {
				// No such directive
				fatal_assoc(expr->assoc, "No such directive as '%s'", name);
			}
		} break;
		case EXPR_THIS: {
			push(BC::create(BC_THIS_FUNCTION, expr->assoc));
		} break;
		case EXPR_FIELD: {
			compile_expr(expr->field.left);
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->field.right), expr->assoc));
			push(BC::create(BC_RESOLVE_FIELD, expr->assoc));
		} break;
		case EXPR_LOOP: {
            int push_body_pos = bytecode.size;
            push(BC::create(BC_PUSH_BODY, expr->assoc));

			// Create a dummy value to be popped by first iteration
			push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));
            int beginning = bytecode.size;

			push(BC::create(BC_POP_AND_DISCARD, expr->assoc));
            compile_expr(expr->loop.body);

			push(BC::create(BC_DUPLICATE, expr->assoc));
            push(BC::create(BC_NOT, expr->assoc));
            push(BC::create(BC_POP_JUMP, beginning, expr->assoc));
            //push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));

            int exit_pos = bytecode.size;
            push(BC::create(BC_NOP, expr->assoc));
            bytecode[push_body_pos].arg.integer = exit_pos;
		} break;
		case EXPR_ON: {
			push(BC::create(BC_GET_CALL_FLAG, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_NOT, expr->assoc));
			
			int jump_pos = bytecode.size;
			push(BC::create(BC_POP_JUMP, expr->assoc));
			
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_CREATE_BINDING, expr->assoc));
			compile_expr(expr->on.body);
			
			int exit_pos = bytecode.size;
			push(BC::create(BC_NOP, expr->assoc));
			bytecode[jump_pos].arg.integer = exit_pos;
		} break;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x820, %rsp            # imm = 0x820
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x7c0(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x7b8(%rbp)
subq $0xe, %rax
ja 0xbf24
movq -0x7b8(%rbp), %rax
leaq 0x5d15(%rip), %rcx      # 0x103a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
callq 0x7820
movl %eax, -0x38(%rbp)
movq %rdx, -0x30(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x38(%rbp), %edx
movq -0x30(%rbp), %rcx
leaq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xa650
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x8(%rax), %esi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xbf90
jmp 0xbf24
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xa650
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xa650
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %esi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xbf90
jmp 0xbf24
movq -0x10(%rbp), %rax
movl 0x8(%rax), %edi
callq 0x77b0
movl %eax, -0x60(%rbp)
movq %rdx, -0x58(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x60(%rbp), %edx
movq -0x58(%rbp), %rcx
leaq -0x50(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x50(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0x88(%rbp)
movq %rdx, -0x80(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x88(%rbp), %edx
movq -0x80(%rbp), %rcx
leaq -0x78(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x78(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0xa0(%rbp), %rdi
movl $0x16, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0xc8(%rbp)
movq %rdx, -0xc0(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0xc8(%rbp), %edx
movq -0xc0(%rbp), %rcx
leaq -0xb8(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0xb8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0xe0(%rbp), %rdi
movl $0x6, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
leaq -0x108(%rbp), %rdi
movl $0x28, %edx
callq 0x10e0
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x110(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x128(%rbp), %rdi
movl $0x1c, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x128(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl $0x0, -0x12c(%rbp)
movslq -0x12c(%rbp), %rax
cmpq -0x100(%rbp), %rax
jae 0xa9e2
movslq -0x12c(%rbp), %rsi
leaq -0x108(%rbp), %rdi
callq 0x71e0
movq -0x7c0(%rbp), %rdi
movq (%rax), %rsi
callq 0x7b90
movl -0x12c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x12c(%rbp)
jmp 0xa99f
cmpq $0x0, -0x110(%rbp)
je 0xaa01
movq -0x7c0(%rbp), %rdi
movq -0x110(%rbp), %rsi
callq 0xa650
jmp 0xaa65
callq 0x7820
movl %eax, -0x158(%rbp)
movq %rdx, -0x150(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x158(%rbp), %edx
movq -0x150(%rbp), %rcx
leaq -0x148(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x148(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x170(%rbp), %rdi
movl $0x1d, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x170(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
leaq -0x198(%rbp), %rdi
movl $0x28, %edx
callq 0x10e0
movl $0x0, -0x19c(%rbp)
movslq -0x19c(%rbp), %rax
cmpq -0x190(%rbp), %rax
jae 0xab73
movslq -0x19c(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x6e80
movq (%rax), %rdi
callq 0xbf40
movl %eax, -0x1c8(%rbp)
movq %rdx, -0x1c0(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x1c8(%rbp), %edx
movq -0x1c0(%rbp), %rcx
leaq -0x1b8(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl -0x19c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x19c(%rbp)
jmp 0xaad1
movq -0x190(%rbp), %rax
movl %eax, %edi
callq 0x77b0
movl %eax, -0x1f0(%rbp)
movq %rdx, -0x1e8(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x1f0(%rbp), %edx
movq -0x1e8(%rbp), %rcx
leaq -0x1e0(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x28(%rax), %rsi
leaq -0x228(%rbp), %rdi
callq 0x7b20
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
leaq -0x228(%rbp), %rdi
callq 0xa650
leaq -0x228(%rbp), %rdi
callq 0x8010
leaq -0x228(%rbp), %rdi
callq 0x80b0
movq -0x1f8(%rbp), %rdx
movq -0x10(%rbp), %rax
movl 0x4(%rax), %ecx
leaq -0x240(%rbp), %rdi
movl $0x12, %esi
callq 0xc390
movq -0x7c0(%rbp), %rdi
leaq -0x240(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
addq $0x8, %rsi
leaq -0x268(%rbp), %rdi
movl $0x28, %edx
callq 0x10e0
movq -0x260(%rbp), %rax
subq $0x1, %rax
movl %eax, -0x26c(%rbp)
cmpl $0x0, -0x26c(%rbp)
jl 0xacdd
movslq -0x26c(%rbp), %rsi
leaq -0x268(%rbp), %rdi
callq 0x7280
movq -0x7c0(%rbp), %rdi
movq (%rax), %rsi
callq 0xa650
movl -0x26c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x26c(%rbp)
jmp 0xaca1
movq -0x260(%rbp), %rax
movl %eax, %edi
callq 0x77b0
movl %eax, -0x298(%rbp)
movq %rdx, -0x290(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x298(%rbp), %edx
movq -0x290(%rbp), %rcx
leaq -0x288(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x288(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xa650
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x2b0(%rbp), %rdi
movl $0x13, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x2b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq 0xc432(%rip), %rax      # 0x171e0
movq %rax, -0x2e8(%rbp)
movq 0xc42c(%rip), %rax      # 0x171e8
movq %rax, -0x2e0(%rbp)
movq -0x2e8(%rbp), %rsi
movq -0x2e0(%rbp), %rdx
leaq -0x2d8(%rbp), %rdi
callq 0xc3c0
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
leaq -0x340(%rbp), %rdi
movl $0x58, %edx
callq 0x10e0
movq -0x338(%rbp), %rax
cmpq -0x310(%rbp), %rax
jne 0xae08
jmp 0xae27
leaq 0x5e47(%rip), %rdi      # 0x10c56
leaq 0x5e6c(%rip), %rsi      # 0x10c82
movl $0xa4, %edx
leaq 0x5e70(%rip), %rcx      # 0x10c92
callq 0x10d0
movl $0x0, -0x344(%rbp)
movslq -0x344(%rbp), %rax
cmpq -0x338(%rbp), %rax
jae 0xaffb
leaq -0x340(%rbp), %rdi
movslq -0x344(%rbp), %rsi
callq 0x7280
movq -0x7c0(%rbp), %rdi
movq (%rax), %rsi
callq 0xa650
leaq -0x340(%rbp), %rdi
movslq -0x344(%rbp), %rsi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edx
leaq -0x360(%rbp), %rdi
movl $0x19, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x360(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
leaq -0x340(%rbp), %rdi
movslq -0x344(%rbp), %rsi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edx
leaq -0x378(%rbp), %rdi
movl $0x1b, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x378(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
subq $0x1, %rax
movl %eax, -0x37c(%rbp)
leaq -0x340(%rbp), %rdi
addq $0x28, %rdi
movslq -0x344(%rbp), %rsi
callq 0x7280
movq -0x7c0(%rbp), %rdi
movq (%rax), %rsi
callq 0xa650
leaq -0x340(%rbp), %rdi
movslq -0x344(%rbp), %rsi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edx
leaq -0x398(%rbp), %rdi
movl $0x1a, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x398(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
subq $0x1, %rax
movl %eax, %esi
leaq -0x2d8(%rbp), %rdi
callq 0xc420
movq -0x7c0(%rbp), %rdi
movq 0x8(%rdi), %rax
movl %eax, -0x7c4(%rbp)
movslq -0x37c(%rbp), %rsi
callq 0xc470
movl -0x7c4(%rbp), %ecx
movl %ecx, 0x8(%rax)
movl -0x344(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x344(%rbp)
jmp 0xae31
cmpq $0x0, -0x2f0(%rbp)
je 0xb01a
movq -0x7c0(%rbp), %rdi
movq -0x2f0(%rbp), %rsi
callq 0xa650
jmp 0xb07e
callq 0x7820
movl %eax, -0x3c0(%rbp)
movq %rdx, -0x3b8(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x3c0(%rbp), %edx
movq -0x3b8(%rbp), %rcx
leaq -0x3b0(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x3b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x3d8(%rbp), %rdi
xorl %esi, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x3d8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl $0x0, -0x3dc(%rbp)
movslq -0x3dc(%rbp), %rax
cmpq -0x2d0(%rbp), %rax
jae 0xb179
movslq -0x3dc(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xc4d0
movq -0x7c0(%rbp), %rdi
movslq (%rax), %rsi
callq 0xc470
cmpl $0x1a, (%rax)
jne 0xb106
jmp 0xb125
leaq 0x5ba9(%rip), %rdi      # 0x10cb6
leaq 0x5b6e(%rip), %rsi      # 0x10c82
movl $0xb8, %edx
leaq 0x5b72(%rip), %rcx      # 0x10c92
callq 0x10d0
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
subq $0x1, %rax
movl %eax, -0x7c8(%rbp)
movslq -0x3dc(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xc4d0
movq -0x7c0(%rbp), %rdi
movslq (%rax), %rsi
callq 0xc470
movl -0x7c8(%rbp), %ecx
movl %ecx, 0x8(%rax)
movl -0x3dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3dc(%rbp)
jmp 0xb0c9
leaq -0x2d8(%rbp), %rdi
callq 0xc530
jmp 0xbf24
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3e8(%rbp)
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
addq $0x8, %rsi
leaq -0x410(%rbp), %rdi
movl $0x28, %edx
callq 0x10e0
movq -0x3e8(%rbp), %rax
movq %rax, -0x7d0(%rbp)
leaq 0x5b12(%rip), %rdi      # 0x10cdd
callq 0x1740
movq %rax, %rcx
movq -0x7d0(%rbp), %rax
cmpq %rcx, %rax
jne 0xb307
cmpq $0x1, -0x408(%rbp)
je 0xb202
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x5aea(%rip), %rsi      # 0x10ce5
movb $0x0, %al
callq 0x1f40
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
cmpl $0x3, (%rax)
je 0xb23e
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edi
leaq 0x5ad6(%rip), %rsi      # 0x10d0d
movb $0x0, %al
callq 0x1f40
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x418(%rbp)
movq -0x418(%rbp), %rdi
callq 0x6130
movq %rax, -0x420(%rbp)
movl $0x3, %edi
callq 0xc570
movl %eax, -0x430(%rbp)
movq %rdx, -0x428(%rbp)
movq -0x420(%rbp), %rax
movq %rax, -0x428(%rbp)
movq -0x430(%rbp), %rax
movq %rax, -0x458(%rbp)
movq -0x428(%rbp), %rax
movq %rax, -0x450(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x458(%rbp), %edx
movq -0x450(%rbp), %rcx
leaq -0x448(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x448(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xb957
movq -0x3e8(%rbp), %rax
movq %rax, -0x7d8(%rbp)
leaq 0x5a1c(%rip), %rdi      # 0x10d38
callq 0x1740
movq %rax, %rcx
movq -0x7d8(%rbp), %rax
cmpq %rcx, %rax
jne 0xb50b
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
addq $0x8, %rsi
leaq -0x480(%rbp), %rdi
movl $0x28, %edx
callq 0x10e0
movq -0x478(%rbp), %rax
subq $0x1, %rax
movl %eax, -0x484(%rbp)
cmpl $0x0, -0x484(%rbp)
jl 0xb455
movslq -0x484(%rbp), %rsi
leaq -0x480(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
cmpl $0x3, (%rax)
je 0xb3b1
movslq -0x484(%rbp), %rsi
leaq -0x480(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edi
leaq 0x5995(%rip), %rsi      # 0x10d3f
movb $0x0, %al
callq 0x1f40
movslq -0x484(%rbp), %rsi
leaq -0x480(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0x4b0(%rbp)
movq %rdx, -0x4a8(%rbp)
movslq -0x484(%rbp), %rsi
leaq -0x480(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %r8d
movl -0x4b0(%rbp), %edx
movq -0x4a8(%rbp), %rcx
leaq -0x4a0(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x4a0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl -0x484(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x484(%rbp)
jmp 0xb362
movq -0x478(%rbp), %rax
movl %eax, %edi
callq 0x77b0
movl %eax, -0x4d8(%rbp)
movq %rdx, -0x4d0(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x4d8(%rbp), %edx
movq -0x4d0(%rbp), %rcx
leaq -0x4c8(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x4c8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x4f0(%rbp), %rdi
movl $0x1e, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x4f0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xb955
movq -0x3e8(%rbp), %rax
movq %rax, -0x7e0(%rbp)
leaq 0x584a(%rip), %rdi      # 0x10d6a
callq 0x1740
movq %rax, %rcx
movq -0x7e0(%rbp), %rax
cmpq %rcx, %rax
jne 0xb7ac
cmpq $0x1, -0x408(%rbp)
je 0xb557
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x5821(%rip), %rsi      # 0x10d71
movb $0x0, %al
callq 0x1f40
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
cmpl $0x2, (%rax)
jne 0xb5a2
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x500(%rbp)
movq -0x500(%rbp), %rdi
callq 0x2370
movq %rax, -0x4f8(%rbp)
jmp 0xb613
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
cmpl $0x3, (%rax)
jne 0xb5ed
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x508(%rbp)
movq -0x508(%rbp), %rdi
callq 0x22e0
movq %rax, -0x4f8(%rbp)
jmp 0xb611
leaq -0x410(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edi
leaq 0x578e(%rip), %rsi      # 0x10d98
movb $0x0, %al
callq 0x1f40
jmp 0xb613
leaq -0x4f8(%rbp), %rax
movq %rax, -0x520(%rbp)
leaq -0x510(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0xc590
movq -0x7c0(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0xc5d0
movq %rax, -0x7e8(%rbp)
jmp 0xb64d
movq -0x7c0(%rbp), %rax
movq -0x7e8(%rbp), %rcx
movq %rcx, -0x528(%rbp)
movq 0x28(%rax), %rdi
movq -0x4f8(%rbp), %rsi
callq 0x61f0
movq %rax, -0x7f0(%rbp)
jmp 0xb67b
movq -0x7f0(%rbp), %rax
movq %rax, -0x540(%rbp)
cmpq $0x0, -0x540(%rbp)
jne 0xb6f5
xorl %eax, %eax
movl %eax, %esi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq %rax, -0x7f8(%rbp)
jmp 0xb6ac
movq -0x7f8(%rbp), %rax
movq (%rax), %rax
movl 0x4(%rax), %edi
movq -0x4f8(%rbp), %rdx
leaq 0x5705(%rip), %rsi      # 0x10dcc
xorl %eax, %eax
callq 0x1f40
jmp 0xb6d0
jmp 0xb6f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x530(%rbp)
movl %eax, -0x534(%rbp)
leaq -0x510(%rbp), %rdi
callq 0xc5f0
jmp 0xbf2d
movl -0x528(%rbp), %edi
callq 0x77b0
movl %eax, -0x568(%rbp)
movq %rdx, -0x560(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x568(%rbp), %edx
movq -0x560(%rbp), %rcx
leaq -0x558(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
jmp 0xb735
movq -0x7c0(%rbp), %rdi
movq -0x548(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movups -0x558(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x7f70
jmp 0xb75b
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x580(%rbp), %rdi
movl $0x23, %esi
callq 0xbf70
jmp 0xb775
movq -0x7c0(%rbp), %rdi
movq -0x570(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movups -0x580(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x7f70
jmp 0xb79b
leaq -0x510(%rbp), %rdi
callq 0xc5f0
jmp 0xb953
movq -0x3e8(%rbp), %rax
movq %rax, -0x800(%rbp)
leaq 0x562b(%rip), %rdi      # 0x10dec
callq 0x1740
movq %rax, %rcx
movq -0x800(%rbp), %rax
cmpq %rcx, %rax
jne 0xb935
movl $0x0, -0x584(%rbp)
movslq -0x584(%rbp), %rax
cmpq -0x408(%rbp), %rax
jae 0xb933
movslq -0x584(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
cmpl $0x3, (%rax)
je 0xb839
movslq -0x584(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edi
leaq 0x55c1(%rip), %rsi      # 0x10df3
movb $0x0, %al
callq 0x1f40
movslq -0x584(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0x5b0(%rbp)
movq %rdx, -0x5a8(%rbp)
movslq -0x584(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %r8d
movl -0x5b0(%rbp), %edx
movq -0x5a8(%rbp), %rcx
leaq -0x5a0(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x5a0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movslq -0x584(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0x7280
movq (%rax), %rax
movl 0x4(%rax), %edx
leaq -0x5c8(%rbp), %rdi
movl $0x24, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl -0x584(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x584(%rbp)
jmp 0xb7e3
jmp 0xb951
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edi
movq -0x3e8(%rbp), %rdx
leaq 0x54d4(%rip), %rsi      # 0x10e1e
movb $0x0, %al
callq 0x1f40
jmp 0xb953
jmp 0xb955
jmp 0xb957
jmp 0xbf24
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x5e0(%rbp), %rdi
movl $0x15, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x5e0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xa650
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0xbf40
movl %eax, -0x608(%rbp)
movq %rdx, -0x600(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x608(%rbp), %edx
movq -0x600(%rbp), %rcx
leaq -0x5f8(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x5f8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x620(%rbp), %rdi
movl $0x1f, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x620(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
jmp 0xbf24
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, -0x624(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x640(%rbp), %rdi
movl $0x21, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x640(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
callq 0x7820
movl %eax, -0x668(%rbp)
movq %rdx, -0x660(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x668(%rbp), %edx
movq -0x660(%rbp), %rcx
leaq -0x658(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x658(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, -0x66c(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x688(%rbp), %rdi
movl $0x1, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x688(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xa650
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x6a0(%rbp), %rdi
movl $0x3, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x6a0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x6b8(%rbp), %rdi
movl $0x19, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x6b8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movl -0x66c(%rbp), %edx
movq -0x10(%rbp), %rax
movl 0x4(%rax), %ecx
leaq -0x6d0(%rbp), %rdi
movl $0x1b, %esi
callq 0xc620
movq -0x7c0(%rbp), %rdi
leaq -0x6d0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, -0x6d4(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x6f0(%rbp), %rdi
xorl %esi, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x6f0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rdi
movl -0x6d4(%rbp), %eax
movl %eax, -0x804(%rbp)
movslq -0x624(%rbp), %rsi
callq 0xc470
movl -0x804(%rbp), %ecx
movl %ecx, 0x8(%rax)
jmp 0xbf24
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0x718(%rbp)
movq %rdx, -0x710(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x718(%rbp), %edx
movq -0x710(%rbp), %rcx
leaq -0x708(%rbp), %rdi
movl $0x25, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x708(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x730(%rbp), %rdi
movl $0x19, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x730(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, -0x734(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x750(%rbp), %rdi
movl $0x1b, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x750(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xbf40
movl %eax, -0x778(%rbp)
movq %rdx, -0x770(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r8d
movl -0x778(%rbp), %edx
movq -0x770(%rbp), %rcx
leaq -0x768(%rbp), %rdi
movl $0x2, %esi
callq 0x7fd0
movq -0x7c0(%rbp), %rdi
leaq -0x768(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x790(%rbp), %rdi
movl $0x4, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x790(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xa650
movq -0x7c0(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, -0x794(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq -0x7b0(%rbp), %rdi
xorl %esi, %esi
callq 0xbf70
movq -0x7c0(%rbp), %rdi
leaq -0x7b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x7f70
movq -0x7c0(%rbp), %rdi
movl -0x794(%rbp), %eax
movl %eax, -0x808(%rbp)
movslq -0x734(%rbp), %rsi
callq 0xc470
movl -0x808(%rbp), %ecx
movl %ecx, 0x8(%rax)
addq $0x820, %rsp            # imm = 0x820
popq %rbp
retq
movq -0x530(%rbp), %rdi
callq 0x11c0
nopl (%rax)