// File: iamlouk[P]asbi/src/vm.cc
// Function: asbi::execute(std::vector<asbi::OpCode, std::allocator<asbi::OpCode>>, std::shared_ptr<asbi::Env>, asbi::Context*)
Value asbi::execute(std::vector<OpCode> opcodes, std::shared_ptr<Env> env, Context* ctx) {
#ifndef NDEBUG
	auto oldstacksize = ctx->stack.size();
#endif
	unsigned int pc = 0;
	while (pc < opcodes.size()) {
		switch (opcodes[pc++]) {
		case PUSH_NUMBER:{
			auto flt = opcodes[pc++];
			auto fltptr = reinterpret_cast<double*>(&flt);
			ctx->push(Value::number(*fltptr));
			break;
		}
		case PUSH_BOOLEAN:{
			auto val = opcodes[pc++];
			ctx->push(Value::boolean(val != 0));
			break;
		}
		case PUSH_TRUE:
			ctx->push(Value::boolean(true));
			break;
		case PUSH_FALSE:
			ctx->push(Value::boolean(false));
			break;
		case PUSH_NIL:
			ctx->push(Value::nil());
			break;
		case PUSH_SYMBOL:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			ctx->push(Value::symbol(sc));
			break;
		}
		case PUSH_STRING:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			ctx->push(Value::string(sc));
			break;
		}
		case PUSH_LAMBDA:{
			auto raw = opcodes[pc++];
			auto lc = reinterpret_cast<LambdaContainer*>(raw);
			ctx->push(Value::lambda(new LambdaContainer(env, lc->ops, lc->argnames, ctx, true)));
			break;
		}
		case PUSH_STACK_PLACEHOLDER:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			ctx->push(Value::stackplaceholder(sc));
			break;
		}
		case POP:
			ctx->pop();
			break;
		case ENTER_SCOPE:{
			env = std::make_shared<Env>(ctx, env);
			break;
		}
		case LEAVE_SCOPE:{
			env = env->outer;
			assert(env != nullptr);
			break;
		}
		case CALL:{
			auto n = static_cast<unsigned int>(opcodes[pc++]);
			auto callable = ctx->pop();
			ctx->push(callable.call(ctx, n, env));
			break;
		}
		case LOOKUP:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			ctx->push(env->lookup(sc));
			break;
		}
		case DECL:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			env->decl(sc, ctx->pop());
			ctx->push(Value::nil());
			break;
		}
		case SET:{
			auto raw = opcodes[pc++];
			auto sc = reinterpret_cast<StringContainer*>(raw);
			auto val = ctx->pop();
			env->set(sc, val);
			ctx->push(val);
			break;
		}
		case ADD:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type == type_t::Number && b.type == type_t::Number) {
				ctx->push(Value::number(a._number + b._number));
				break;
			}

			if (a.type == type_t::String/* && b.type == type_t::String*/) {
				auto sc = ctx->new_string(a._string->data);
				sc->data += b/*._string->data*/.to_string(false);
				ctx->push(Value::string(sc));
				ctx->heap_size += sc->gc_size();
				ctx->check_gc(env);
				break;
			}

			throw std::runtime_error("expected number or string");
		}
		case SUB:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::number(a._number - b._number));
			break;
		}
		case MUL:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::number(a._number * b._number));
			break;
		}
		case DIV:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::number(a._number / b._number));
			break;
		}
		case EQUALS:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			ctx->push(Value::boolean(a == b));
			break;
		}
		case EQUALS_NOT:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			ctx->push(Value::boolean(!(a == b)));
			break;
		}
		case SMALLER:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::boolean(a._number < b._number));
			break;
		}
		case BIGGER:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::boolean(a._number > b._number));
			break;
		}
		case SMALLER_OR_EQUAL:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::boolean(a._number <= b._number));
			break;
		}
		case BIGGER_OR_EQUAL:{
			auto b = ctx->pop();
			auto a = ctx->pop();
			if (a.type != type_t::Number || b.type != type_t::Number)
				throw std::runtime_error("expected number");
			ctx->push(Value::boolean(a._number >= b._number));
			break;
		}
		case NOT:{
			auto a = ctx->pop();
			if (a.type != type_t::Bool)
				throw std::runtime_error("expected boolean");
			ctx->push(Value::boolean(!a._boolean));
			break;
		}
		case MAKE_MAP:{
			auto n = static_cast<unsigned int>(opcodes[pc++]);
			auto mc = new MapContainer(ctx);
			for (unsigned int i = 0; i < n; ++i) {
				mc->set(ctx->pop(), ctx->pop());
			}

			ctx->push(Value::map(mc));
			ctx->heap_size += mc->gc_size();
			ctx->check_gc(env);
			break;
		}
		case MAKE_MAP_ARRLIKE:{
			auto n = static_cast<unsigned int>(opcodes[pc++]);
			auto mc = new MapContainer(ctx);
			for (unsigned int i = 0; i < n; ++i) {
				mc->set(Value::number(n - 1- i), ctx->pop());
			}

			ctx->push(Value::map(mc));
			ctx->heap_size += mc->gc_size();
			ctx->check_gc(env);
			break;
		}
		case GET_MAP_VAL:{
			auto map = ctx->pop();
			if (map.type != type_t::Map)
				throw std::runtime_error("expected map");

			ctx->push(map._map->get(ctx->pop()));
			break;
		}
		case SET_MAP_VAL:{
			auto map = ctx->pop();
			if (map.type != type_t::Map)
				throw std::runtime_error("expected map");

			auto val = ctx->pop();
			auto key = ctx->pop();
			auto prevsize = map._map->gc_size();
			map._map->set(key, val);
			if (prevsize < map._map->gc_size()) {
				ctx->heap_size -= prevsize;
				ctx->heap_size += map._map->gc_size();
				ctx->push(val);
				ctx->check_gc(env);
				break;
			}
			ctx->push(val);
			break;
		}
		case DESTRUCT_ARRLIKE:{
			auto n = static_cast<unsigned int>(opcodes[pc++]);
			auto map = ctx->pop();
			if (map.type != type_t::Map)
				throw std::runtime_error("expected map");

			for (unsigned int i = 0; i < n; ++i) {
				auto tomatch = ctx->pop();
				auto value = map._map->get(Value::number(i));
				if (tomatch.type == type_t::StackPlaceholder) {
					env->decl(tomatch._string, value);
				} else {
					if (!(tomatch == value)) {
						throw std::runtime_error("match error in destruction");
					}
				}
			}
			ctx->push(map);
			break;
		}
		case GOTO:{
			pc = static_cast<unsigned int>(opcodes[pc++]);
			assert(pc <= opcodes.size());
			break;
		}
		case IF_TRUE_GOTO:{
			auto a = ctx->pop();
			auto new_pc = static_cast<unsigned int>(opcodes[pc++]);
			if (a.type != type_t::Bool)
				throw std::runtime_error("expected boolean");

			if (a._boolean)
				pc = new_pc;
			break;
		}
		case IF_FALSE_GOTO:{
			auto a = ctx->pop();
			auto new_pc = static_cast<unsigned int>(opcodes[pc++]);
			if (a.type != type_t::Bool)
				throw std::runtime_error("expected boolean");

			if (!a._boolean)
				pc = new_pc;
			break;
		}
		case NOOP:
			assert("NOOPs should not happen");
			break;
		default:
			throw std::runtime_error("invalid opcode");
		}
	}

	assert(pc <= opcodes.size());
	assert(ctx->stack.size() == oldstacksize + 1);
	return ctx->pop();
}

// Assembly:
subq $0x8f8, %rsp            # imm = 0x8F8
movq %rdi, 0x250(%rsp)
movq %rsi, 0x258(%rsp)
movq %rdi, 0x8e0(%rsp)
movq %rsi, 0x8d8(%rsp)
movq %rdx, 0x8d0(%rsp)
movq 0x8d0(%rsp), %rdi
addq $0x508, %rdi            # imm = 0x508
callq 0x1d030
movq %rax, 0x8c8(%rsp)
movl $0x0, 0x8c4(%rsp)
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movq %rax, 0x248(%rsp)
callq 0x1d050
movq %rax, %rcx
movq 0x248(%rsp), %rax
cmpq %rcx, %rax
jae 0x1cf58
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %esi
movl %esi, %eax
incl %eax
movl %eax, 0x8c4(%rsp)
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x240(%rsp)
subq $0x23, %rax
ja 0x1cef5
movq 0x240(%rsp), %rax
leaq 0x1dfad(%rip), %rcx     # 0x38c68
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x8b8(%rsp)
leaq 0x8b8(%rsp), %rax
movq %rax, 0x8b0(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x238(%rsp)
movq 0x8b0(%rsp), %rax
movsd (%rax), %xmm0
callq 0x1d090
movq 0x238(%rsp), %rdi
movl %eax, 0x8a0(%rsp)
movq %rdx, 0x8a8(%rsp)
movl 0x8a0(%rsp), %esi
movq 0x8a8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x898(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x230(%rsp)
cmpq $0x0, 0x898(%rsp)
setne %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0x230(%rsp), %rdi
movl %eax, 0x888(%rsp)
movq %rdx, 0x890(%rsp)
movl 0x888(%rsp), %esi
movq 0x890(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rax
movq %rax, 0x228(%rsp)
movl $0x1, %edi
callq 0x1d0d0
movq 0x228(%rsp), %rdi
movl %eax, 0x878(%rsp)
movq %rdx, 0x880(%rsp)
movl 0x878(%rsp), %esi
movq 0x880(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rax
movq %rax, 0x220(%rsp)
xorl %edi, %edi
callq 0x1d0d0
movq 0x220(%rsp), %rdi
movl %eax, 0x868(%rsp)
movq %rdx, 0x870(%rsp)
movl 0x868(%rsp), %esi
movq 0x870(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rax
movq %rax, 0x218(%rsp)
callq 0x1d110
movq 0x218(%rsp), %rdi
movl %eax, 0x858(%rsp)
movq %rdx, 0x860(%rsp)
movl 0x858(%rsp), %esi
movq 0x860(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x850(%rsp)
movq 0x850(%rsp), %rax
movq %rax, 0x848(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x210(%rsp)
movq 0x848(%rsp), %rdi
callq 0x1d140
movq 0x210(%rsp), %rdi
movl %eax, 0x838(%rsp)
movq %rdx, 0x840(%rsp)
movl 0x838(%rsp), %esi
movq 0x840(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x830(%rsp)
movq 0x830(%rsp), %rax
movq %rax, 0x828(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x208(%rsp)
movq 0x828(%rsp), %rdi
callq 0x1d180
movq 0x208(%rsp), %rdi
movl %eax, 0x818(%rsp)
movq %rdx, 0x820(%rsp)
movl 0x818(%rsp), %esi
movq 0x820(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %esi
movl %esi, %eax
incl %eax
movl %eax, 0x8c4(%rsp)
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x810(%rsp)
movq 0x810(%rsp), %rax
movq %rax, 0x808(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x1f0(%rsp)
movl $0x48, %edi
callq 0x6460
movq 0x258(%rsp), %rsi
movq %rax, 0x1f8(%rsp)
movb $0x1, 0x7c3(%rsp)
leaq 0x7e8(%rsp), %rdi
callq 0x7d80
movq 0x808(%rsp), %rsi
movq 0x28(%rsi), %rax
movq %rax, 0x200(%rsp)
addq $0x30, %rsi
leaq 0x7d0(%rsp), %rdi
callq 0x140a0
jmp 0x1b06a
movq 0x200(%rsp), %rdx
movq 0x1f8(%rsp), %rdi
movq 0x8d0(%rsp), %r8
leaq 0x7e8(%rsp), %rsi
leaq 0x7d0(%rsp), %rcx
movl $0x1, %r9d
callq 0x21100
jmp 0x1b09f
movq 0x1f8(%rsp), %rdi
movb $0x0, 0x7c3(%rsp)
callq 0x1d1c0
movq %rdx, 0x1e0(%rsp)
movl %eax, 0x1ec(%rsp)
jmp 0x1b0c5
movq 0x1f0(%rsp), %rdi
movq 0x1e0(%rsp), %rax
movl 0x1ec(%rsp), %ecx
movl %ecx, 0x7f8(%rsp)
movq %rax, 0x800(%rsp)
movl 0x7f8(%rsp), %esi
movq 0x800(%rsp), %rdx
callq 0x26b20
jmp 0x1b101
leaq 0x7d0(%rsp), %rdi
callq 0x129f0
leaq 0x7e8(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x1b157
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x7d0(%rsp), %rdi
callq 0x129f0
leaq 0x7e8(%rsp), %rdi
callq 0x7db0
testb $0x1, 0x7c3(%rsp)
jne 0x1b170
jmp 0x1b182
movq 0x1f8(%rsp), %rdi
movl $0x48, %esi
callq 0x6470
jmp 0x1d018
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x7b8(%rsp)
movq 0x7b8(%rsp), %rax
movq %rax, 0x7b0(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x1d8(%rsp)
movq 0x7b0(%rsp), %rdi
callq 0x1d200
movq 0x1d8(%rsp), %rdi
movl %eax, 0x7a0(%rsp)
movq %rdx, 0x7a8(%rsp)
movl 0x7a0(%rsp), %esi
movq 0x7a8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x790(%rsp)
movq %rdx, 0x798(%rsp)
jmp 0x1cf53
movq 0x258(%rsp), %rdx
leaq 0x780(%rsp), %rdi
leaq 0x8d0(%rsp), %rsi
callq 0x1d240
movq 0x258(%rsp), %rdi
leaq 0x780(%rsp), %rsi
callq 0x1d2c0
leaq 0x780(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq 0x258(%rsp), %rdi
callq 0x7bd0
movq 0x258(%rsp), %rdi
movq %rax, %rsi
callq 0x1d2f0
movq 0x258(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1aab0
testb $0x1, %al
jne 0x1b2ac
jmp 0x1b2ae
jmp 0x1b2cd
leaq 0x1da43(%rip), %rdi     # 0x38cf8
leaq 0x1da4b(%rip), %rsi     # 0x38d07
movl $0x44, %edx
leaq 0x1da45(%rip), %rcx     # 0x38d0d
callq 0x62b0
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %esi
movl %esi, %eax
incl %eax
movl %eax, 0x8c4(%rsp)
callq 0x1d070
movl (%rax), %eax
movl %eax, 0x77c(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x258(%rsp), %rsi
movl %eax, 0x768(%rsp)
movq %rdx, 0x770(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movl 0x77c(%rsp), %eax
movl %eax, 0x1bc(%rsp)
leaq 0x748(%rsp), %rdi
movq %rdi, 0x1c0(%rsp)
callq 0x7d80
movq 0x1b0(%rsp), %rsi
movl 0x1bc(%rsp), %edx
movq 0x1c0(%rsp), %rcx
leaq 0x768(%rsp), %rdi
callq 0x219c0
movq %rdx, 0x1c8(%rsp)
movl %eax, 0x1d4(%rsp)
jmp 0x1b388
movq 0x1b0(%rsp), %rdi
movq 0x1c8(%rsp), %rax
movl 0x1d4(%rsp), %ecx
movl %ecx, 0x758(%rsp)
movq %rax, 0x760(%rsp)
movl 0x758(%rsp), %esi
movq 0x760(%rsp), %rdx
callq 0x26b20
jmp 0x1b3c4
leaq 0x748(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x748(%rsp), %rdi
callq 0x7db0
jmp 0x1d018
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq 0x258(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x740(%rsp)
movq 0x740(%rsp), %rax
movq %rax, 0x738(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x1a8(%rsp)
callq 0x7bd0
movq %rax, %rdi
movq 0x738(%rsp), %rsi
callq 0x25e70
movq 0x1a8(%rsp), %rdi
movl %eax, 0x728(%rsp)
movq %rdx, 0x730(%rsp)
movl 0x728(%rsp), %esi
movq 0x730(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq 0x258(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x720(%rsp)
movq 0x720(%rsp), %rax
movq %rax, 0x718(%rsp)
callq 0x7bd0
movq %rax, 0x190(%rsp)
movq 0x718(%rsp), %rax
movq %rax, 0x198(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x190(%rsp), %rdi
movq 0x198(%rsp), %rsi
movl %eax, 0x708(%rsp)
movq %rdx, 0x710(%rsp)
movl 0x708(%rsp), %edx
movq 0x710(%rsp), %rcx
callq 0x26220
movq 0x8d0(%rsp), %rax
movq %rax, 0x1a0(%rsp)
callq 0x1d110
movq 0x1a0(%rsp), %rdi
movl %eax, 0x6f8(%rsp)
movq %rdx, 0x700(%rsp)
movl 0x6f8(%rsp), %esi
movq 0x700(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movq %rax, 0x6f0(%rsp)
movq 0x6f0(%rsp), %rax
movq %rax, 0x6e8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x258(%rsp), %rdi
movl %eax, 0x6d8(%rsp)
movq %rdx, 0x6e0(%rsp)
callq 0x7bd0
movq %rax, %rdi
movq 0x6e8(%rsp), %rsi
movq 0x6d8(%rsp), %rax
movq %rax, 0x6c8(%rsp)
movq 0x6e0(%rsp), %rax
movq %rax, 0x6d0(%rsp)
movl 0x6c8(%rsp), %edx
movq 0x6d0(%rsp), %rcx
callq 0x26380
movq 0x8d0(%rsp), %rdi
movq 0x6d8(%rsp), %rax
movq %rax, 0x6b8(%rsp)
movq 0x6e0(%rsp), %rax
movq %rax, 0x6c0(%rsp)
movl 0x6b8(%rsp), %esi
movq 0x6c0(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x6a8(%rsp)
movq %rdx, 0x6b0(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x698(%rsp)
movq %rdx, 0x6a0(%rsp)
cmpl $0x1, 0x698(%rsp)
jne 0x1b70c
cmpl $0x1, 0x6a8(%rsp)
jne 0x1b70c
movq 0x8d0(%rsp), %rax
movq %rax, 0x188(%rsp)
movsd 0x6a0(%rsp), %xmm0
addsd 0x6b0(%rsp), %xmm0
callq 0x1d090
movq 0x188(%rsp), %rdi
movl %eax, 0x688(%rsp)
movq %rdx, 0x690(%rsp)
movl 0x688(%rsp), %esi
movq 0x690(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
cmpl $0x4, 0x698(%rsp)
jne 0x1b899
movq 0x8d0(%rsp), %rdi
movq 0x6a0(%rsp), %rsi
addq $0x20, %rsi
callq 0x27030
movq %rax, 0x680(%rsp)
leaq 0x660(%rsp), %rdi
movq %rdi, 0x180(%rsp)
leaq 0x6a8(%rsp), %rsi
xorl %edx, %edx
callq 0x220c0
movq 0x180(%rsp), %rsi
movq 0x680(%rsp), %rdi
addq $0x20, %rdi
callq 0x65c0
jmp 0x1b775
leaq 0x660(%rsp), %rdi
callq 0x6290
movq 0x8d0(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x680(%rsp), %rdi
callq 0x1d180
movq 0x168(%rsp), %rdi
movl %eax, 0x650(%rsp)
movq %rdx, 0x658(%rsp)
movl 0x650(%rsp), %esi
movq 0x658(%rsp), %rdx
callq 0x26b20
movq 0x680(%rsp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
movq 0x258(%rsp), %rsi
movq %rax, %rdx
movq 0x8d0(%rsp), %rax
movq 0x308(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x308(%rax)
movq 0x8d0(%rsp), %rax
movq %rax, 0x170(%rsp)
leaq 0x640(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0x7d80
movq 0x170(%rsp), %rdi
movq 0x178(%rsp), %rsi
callq 0x1a870
jmp 0x1b83b
leaq 0x640(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x660(%rsp), %rdi
callq 0x6290
jmp 0x1d018
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x640(%rsp), %rdi
callq 0x7db0
jmp 0x1d018
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x160(%rsp)
leaq 0x1d49f(%rip), %rsi     # 0x38d57
callq 0x6160
jmp 0x1b8bf
movq 0x160(%rsp), %rdi
movq 0x30722(%rip), %rsi     # 0x4bff0
movq 0x306cb(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x160(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x630(%rsp)
movq %rdx, 0x638(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x620(%rsp)
movq %rdx, 0x628(%rsp)
cmpl $0x1, 0x620(%rsp)
jne 0x1b94c
cmpl $0x1, 0x630(%rsp)
je 0x1b9b3
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x158(%rsp)
leaq 0x1d406(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1b972
movq 0x158(%rsp), %rdi
movq 0x3066f(%rip), %rsi     # 0x4bff0
movq 0x30618(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x158(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x150(%rsp)
movsd 0x628(%rsp), %xmm0
subsd 0x638(%rsp), %xmm0
callq 0x1d090
movq 0x150(%rsp), %rdi
movl %eax, 0x610(%rsp)
movq %rdx, 0x618(%rsp)
movl 0x610(%rsp), %esi
movq 0x618(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x600(%rsp)
movq %rdx, 0x608(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x5f0(%rsp)
movq %rdx, 0x5f8(%rsp)
cmpl $0x1, 0x5f0(%rsp)
jne 0x1ba56
cmpl $0x1, 0x600(%rsp)
je 0x1babd
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x148(%rsp)
leaq 0x1d2fc(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1ba7c
movq 0x148(%rsp), %rdi
movq 0x30565(%rip), %rsi     # 0x4bff0
movq 0x3050e(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x148(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x140(%rsp)
movsd 0x5f8(%rsp), %xmm0
mulsd 0x608(%rsp), %xmm0
callq 0x1d090
movq 0x140(%rsp), %rdi
movl %eax, 0x5e0(%rsp)
movq %rdx, 0x5e8(%rsp)
movl 0x5e0(%rsp), %esi
movq 0x5e8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x5d0(%rsp)
movq %rdx, 0x5d8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x5c0(%rsp)
movq %rdx, 0x5c8(%rsp)
cmpl $0x1, 0x5c0(%rsp)
jne 0x1bb60
cmpl $0x1, 0x5d0(%rsp)
je 0x1bbc7
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x138(%rsp)
leaq 0x1d1f2(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1bb86
movq 0x138(%rsp), %rdi
movq 0x3045b(%rip), %rsi     # 0x4bff0
movq 0x30404(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x138(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x130(%rsp)
movsd 0x5c8(%rsp), %xmm0
divsd 0x5d8(%rsp), %xmm0
callq 0x1d090
movq 0x130(%rsp), %rdi
movl %eax, 0x5b0(%rsp)
movq %rdx, 0x5b8(%rsp)
movl 0x5b0(%rsp), %esi
movq 0x5b8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x5a0(%rsp)
movq %rdx, 0x5a8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x590(%rsp)
movq %rdx, 0x598(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x590(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x21de0
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0x128(%rsp), %rdi
movl %eax, 0x580(%rsp)
movq %rdx, 0x588(%rsp)
movl 0x580(%rsp), %esi
movq 0x588(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x570(%rsp)
movq %rdx, 0x578(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x560(%rsp)
movq %rdx, 0x568(%rsp)
movq 0x8d0(%rsp), %rax
movq %rax, 0x120(%rsp)
leaq 0x560(%rsp), %rdi
leaq 0x570(%rsp), %rsi
callq 0x21de0
xorb $-0x1, %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0x120(%rsp), %rdi
movl %eax, 0x550(%rsp)
movq %rdx, 0x558(%rsp)
movl 0x550(%rsp), %esi
movq 0x558(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x540(%rsp)
movq %rdx, 0x548(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x530(%rsp)
movq %rdx, 0x538(%rsp)
cmpl $0x1, 0x530(%rsp)
jne 0x1bd9c
cmpl $0x1, 0x540(%rsp)
je 0x1be03
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x118(%rsp)
leaq 0x1cfb6(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1bdc2
movq 0x118(%rsp), %rdi
movq 0x3021f(%rip), %rsi     # 0x4bff0
movq 0x301c8(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x118(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x110(%rsp)
movsd 0x538(%rsp), %xmm1
movsd 0x548(%rsp), %xmm0
ucomisd %xmm1, %xmm0
seta %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0x110(%rsp), %rdi
movl %eax, 0x520(%rsp)
movq %rdx, 0x528(%rsp)
movl 0x520(%rsp), %esi
movq 0x528(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x510(%rsp)
movq %rdx, 0x518(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x500(%rsp)
movq %rdx, 0x508(%rsp)
cmpl $0x1, 0x500(%rsp)
jne 0x1beb3
cmpl $0x1, 0x510(%rsp)
je 0x1bf1a
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x108(%rsp)
leaq 0x1ce9f(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1bed9
movq 0x108(%rsp), %rdi
movq 0x30108(%rip), %rsi     # 0x4bff0
movq 0x300b1(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x108(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x100(%rsp)
movsd 0x508(%rsp), %xmm0
ucomisd 0x518(%rsp), %xmm0
seta %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0x100(%rsp), %rdi
movl %eax, 0x4f0(%rsp)
movq %rdx, 0x4f8(%rsp)
movl 0x4f0(%rsp), %esi
movq 0x4f8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x4e0(%rsp)
movq %rdx, 0x4e8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x4d0(%rsp)
movq %rdx, 0x4d8(%rsp)
cmpl $0x1, 0x4d0(%rsp)
jne 0x1bfc6
cmpl $0x1, 0x4e0(%rsp)
je 0x1c02d
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xf8(%rsp)
leaq 0x1cd8c(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1bfec
movq 0xf8(%rsp), %rdi
movq 0x2fff5(%rip), %rsi     # 0x4bff0
movq 0x2ff9e(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0xf8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0xf0(%rsp)
movsd 0x4d8(%rsp), %xmm1
movsd 0x4e8(%rsp), %xmm0
ucomisd %xmm1, %xmm0
setae %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0xf0(%rsp), %rdi
movl %eax, 0x4c0(%rsp)
movq %rdx, 0x4c8(%rsp)
movl 0x4c0(%rsp), %esi
movq 0x4c8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x4b0(%rsp)
movq %rdx, 0x4b8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x4a0(%rsp)
movq %rdx, 0x4a8(%rsp)
cmpl $0x1, 0x4a0(%rsp)
jne 0x1c0dd
cmpl $0x1, 0x4b0(%rsp)
je 0x1c144
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xe8(%rsp)
leaq 0x1cc75(%rip), %rsi     # 0x38d71
callq 0x6160
jmp 0x1c103
movq 0xe8(%rsp), %rdi
movq 0x2fede(%rip), %rsi     # 0x4bff0
movq 0x2fe87(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0xe8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0xe0(%rsp)
movsd 0x4a8(%rsp), %xmm0
ucomisd 0x4b8(%rsp), %xmm0
setae %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0xe0(%rsp), %rdi
movl %eax, 0x490(%rsp)
movq %rdx, 0x498(%rsp)
movl 0x490(%rsp), %esi
movq 0x498(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x480(%rsp)
movq %rdx, 0x488(%rsp)
cmpl $0x0, 0x480(%rsp)
je 0x1c231
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xd8(%rsp)
leaq 0x1cb98(%rip), %rsi     # 0x38d81
callq 0x6160
jmp 0x1c1f0
movq 0xd8(%rsp), %rdi
movq 0x2fdf1(%rip), %rsi     # 0x4bff0
movq 0x2fd9a(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0xd8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0xd0(%rsp)
movb 0x488(%rsp), %al
xorb $-0x1, %al
movzbl %al, %edi
andl $0x1, %edi
callq 0x1d0d0
movq 0xd0(%rsp), %rdi
movl %eax, 0x470(%rsp)
movq %rdx, 0x478(%rsp)
movl 0x470(%rsp), %esi
movq 0x478(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %esi
movl %esi, %eax
incl %eax
movl %eax, 0x8c4(%rsp)
callq 0x1d070
movl (%rax), %eax
movl %eax, 0x46c(%rsp)
movl $0x68, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xc8(%rsp)
movq 0x8d0(%rsp), %rsi
callq 0x212d0
jmp 0x1c2d6
movq 0xc8(%rsp), %rax
movq %rax, 0x460(%rsp)
movl $0x0, 0x45c(%rsp)
movl 0x45c(%rsp), %eax
cmpl 0x46c(%rsp), %eax
jae 0x1c3b9
movq 0x460(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x448(%rsp)
movq %rdx, 0x450(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0xc0(%rsp), %rdi
movl %eax, 0x438(%rsp)
movq %rdx, 0x440(%rsp)
movl 0x448(%rsp), %esi
movq 0x450(%rsp), %rdx
movl 0x438(%rsp), %ecx
movq 0x440(%rsp), %r8
callq 0x21550
movl 0x45c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x45c(%rsp)
jmp 0x1c2f1
movq 0xc8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
movl $0x68, %esi
callq 0x6470
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0x460(%rsp), %rdi
callq 0x7be0
movq 0xa8(%rsp), %rdi
movl %eax, 0x428(%rsp)
movq %rdx, 0x430(%rsp)
movl 0x428(%rsp), %esi
movq 0x430(%rsp), %rdx
callq 0x26b20
movq 0x460(%rsp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
movq 0x258(%rsp), %rsi
movq %rax, %rdx
movq 0x8d0(%rsp), %rax
movq 0x308(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x308(%rax)
movq 0x8d0(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x418(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x7d80
movq 0xb0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x1a870
jmp 0x1c472
leaq 0x418(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x418(%rsp), %rdi
callq 0x7db0
jmp 0x1d018
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %esi
movl %esi, %eax
incl %eax
movl %eax, 0x8c4(%rsp)
callq 0x1d070
movl (%rax), %eax
movl %eax, 0x414(%rsp)
movl $0x68, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xa0(%rsp)
movq 0x8d0(%rsp), %rsi
callq 0x212d0
jmp 0x1c4fb
movq 0xa0(%rsp), %rax
movq %rax, 0x408(%rsp)
movl $0x0, 0x404(%rsp)
movl 0x404(%rsp), %eax
cmpl 0x414(%rsp), %eax
jae 0x1c5ed
movq 0x408(%rsp), %rax
movq %rax, 0x98(%rsp)
movl 0x414(%rsp), %ecx
movl 0x404(%rsp), %eax
notl %eax
addl %ecx, %eax
cvtsi2sd %rax, %xmm0
callq 0x1d090
movl %eax, 0x3f0(%rsp)
movq %rdx, 0x3f8(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x98(%rsp), %rdi
movl %eax, 0x3e0(%rsp)
movq %rdx, 0x3e8(%rsp)
movl 0x3f0(%rsp), %esi
movq 0x3f8(%rsp), %rdx
movl 0x3e0(%rsp), %ecx
movq 0x3e8(%rsp), %r8
callq 0x21550
movl 0x404(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x404(%rsp)
jmp 0x1c516
movq 0xa0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
movl $0x68, %esi
callq 0x6470
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x408(%rsp), %rdi
callq 0x7be0
movq 0x80(%rsp), %rdi
movl %eax, 0x3d0(%rsp)
movq %rdx, 0x3d8(%rsp)
movl 0x3d0(%rsp), %esi
movq 0x3d8(%rsp), %rdx
callq 0x26b20
movq 0x408(%rsp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
movq 0x258(%rsp), %rsi
movq %rax, %rdx
movq 0x8d0(%rsp), %rax
movq 0x308(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x308(%rax)
movq 0x8d0(%rsp), %rax
movq %rax, 0x88(%rsp)
leaq 0x3c0(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x7d80
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rsi
callq 0x1a870
jmp 0x1c6a6
leaq 0x3c0(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x3c0(%rsp), %rdi
callq 0x7db0
jmp 0x1d018
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x3b0(%rsp)
movq %rdx, 0x3b8(%rsp)
cmpl $0x6, 0x3b0(%rsp)
je 0x1c762
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x78(%rsp)
leaq 0x1c672(%rip), %rsi     # 0x38d92
callq 0x6160
jmp 0x1c727
movq 0x78(%rsp), %rdi
movq 0x2f8bd(%rip), %rsi     # 0x4bff0
movq 0x2f866(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x78(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x3b8(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x68(%rsp), %rdi
movl %eax, 0x390(%rsp)
movq %rdx, 0x398(%rsp)
movl 0x390(%rsp), %esi
movq 0x398(%rsp), %rdx
callq 0x216c0
movq 0x70(%rsp), %rdi
movl %eax, 0x3a0(%rsp)
movq %rdx, 0x3a8(%rsp)
movl 0x3a0(%rsp), %esi
movq 0x3a8(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x380(%rsp)
movq %rdx, 0x388(%rsp)
cmpl $0x6, 0x380(%rsp)
je 0x1c862
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x60(%rsp)
leaq 0x1c572(%rip), %rsi     # 0x38d92
callq 0x6160
jmp 0x1c827
movq 0x60(%rsp), %rdi
movq 0x2f7bd(%rip), %rsi     # 0x4bff0
movq 0x2f766(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x60(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x370(%rsp)
movq %rdx, 0x378(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x360(%rsp)
movq %rdx, 0x368(%rsp)
movq 0x388(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq %rax, 0x358(%rsp)
movq 0x388(%rsp), %rdi
movq 0x360(%rsp), %rax
movq %rax, 0x348(%rsp)
movq 0x368(%rsp), %rax
movq %rax, 0x350(%rsp)
movq 0x370(%rsp), %rax
movq %rax, 0x338(%rsp)
movq 0x378(%rsp), %rax
movq %rax, 0x340(%rsp)
movl 0x348(%rsp), %esi
movq 0x350(%rsp), %rdx
movl 0x338(%rsp), %ecx
movq 0x340(%rsp), %r8
callq 0x21550
movq 0x358(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x388(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq %rax, %rcx
movq 0x58(%rsp), %rax
cmpq %rcx, %rax
jae 0x1ca31
movq 0x358(%rsp), %rdx
movq 0x8d0(%rsp), %rax
movq 0x308(%rax), %rcx
subq %rdx, %rcx
movq %rcx, 0x308(%rax)
movq 0x388(%rsp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
movq %rax, %rdx
movq 0x8d0(%rsp), %rax
movq 0x308(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x308(%rax)
movq 0x8d0(%rsp), %rdi
movups 0x370(%rsp), %xmm0
movaps %xmm0, 0x320(%rsp)
movl 0x320(%rsp), %esi
movq 0x328(%rsp), %rdx
callq 0x26b20
movq 0x258(%rsp), %rsi
movq 0x8d0(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x310(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x7d80
movq 0x48(%rsp), %rdi
movq 0x50(%rsp), %rsi
callq 0x1a870
jmp 0x1c9f9
leaq 0x310(%rsp), %rdi
callq 0x7db0
jmp 0x1cf53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x310(%rsp), %rdi
callq 0x7db0
jmp 0x1d018
movq 0x8d0(%rsp), %rdi
movq 0x370(%rsp), %rax
movq %rax, 0x300(%rsp)
movq 0x378(%rsp), %rax
movq %rax, 0x308(%rsp)
movl 0x300(%rsp), %esi
movq 0x308(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movl %eax, 0x2fc(%rsp)
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x2e8(%rsp)
movq %rdx, 0x2f0(%rsp)
cmpl $0x6, 0x2e8(%rsp)
je 0x1cb24
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x40(%rsp)
leaq 0x1c2b0(%rip), %rsi     # 0x38d92
callq 0x6160
jmp 0x1cae9
movq 0x40(%rsp), %rdi
movq 0x2f4fb(%rip), %rsi     # 0x4bff0
movq 0x2f4a4(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x40(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
movl $0x0, 0x2e4(%rsp)
movl 0x2e4(%rsp), %eax
cmpl 0x2fc(%rsp), %eax
jae 0x1cc9d
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x2d0(%rsp)
movq %rdx, 0x2d8(%rsp)
movq 0x2f0(%rsp), %rax
movq %rax, 0x38(%rsp)
movl 0x2e4(%rsp), %eax
cvtsi2sd %rax, %xmm0
callq 0x1d090
movq 0x38(%rsp), %rdi
movl %eax, 0x2b0(%rsp)
movq %rdx, 0x2b8(%rsp)
movl 0x2b0(%rsp), %esi
movq 0x2b8(%rsp), %rdx
callq 0x216c0
movl %eax, 0x2c0(%rsp)
movq %rdx, 0x2c8(%rsp)
cmpl $0x8, 0x2d0(%rsp)
jne 0x1cc0c
movq 0x258(%rsp), %rdi
callq 0x7bd0
movq %rax, %rdi
movq 0x2d8(%rsp), %rsi
movq 0x2c0(%rsp), %rax
movq %rax, 0x2a0(%rsp)
movq 0x2c8(%rsp), %rax
movq %rax, 0x2a8(%rsp)
movl 0x2a0(%rsp), %edx
movq 0x2a8(%rsp), %rcx
callq 0x26220
jmp 0x1cc85
leaq 0x2d0(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
callq 0x21de0
testb $0x1, %al
jne 0x1cc83
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x30(%rsp)
leaq 0x1c15e(%rip), %rsi     # 0x38d9f
callq 0x6160
jmp 0x1cc48
movq 0x30(%rsp), %rdi
movq 0x2f39c(%rip), %rsi     # 0x4bff0
movq 0x2f345(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x30(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
jmp 0x1cc85
jmp 0x1cc87
movl 0x2e4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2e4(%rsp)
jmp 0x1cb2f
movq 0x8d0(%rsp), %rdi
movq 0x2e8(%rsp), %rax
movq %rax, 0x290(%rsp)
movq 0x2f0(%rsp), %rax
movq %rax, 0x298(%rsp)
movl 0x290(%rsp), %esi
movq 0x298(%rsp), %rdx
callq 0x26b20
jmp 0x1cf53
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq 0x250(%rsp), %rdi
movq (%rax), %rax
movl %eax, 0x8c4(%rsp)
movl 0x8c4(%rsp), %eax
movq %rax, 0x28(%rsp)
callq 0x1d050
movq %rax, %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
ja 0x1cd34
jmp 0x1cd53
leaq 0x1c07f(%rip), %rdi     # 0x38dba
leaq 0x1bfc5(%rip), %rsi     # 0x38d07
movl $0x109, %edx            # imm = 0x109
leaq 0x1bfbf(%rip), %rcx     # 0x38d0d
callq 0x62b0
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x250(%rsp), %rdi
movl %eax, 0x280(%rsp)
movq %rdx, 0x288(%rsp)
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movl %eax, 0x27c(%rsp)
cmpl $0x0, 0x280(%rsp)
je 0x1ce0a
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x20(%rsp)
leaq 0x1bfb9(%rip), %rsi     # 0x38d81
callq 0x6160
jmp 0x1cdcf
movq 0x20(%rsp), %rdi
movq 0x2f215(%rip), %rsi     # 0x4bff0
movq 0x2f1be(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x20(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
testb $0x1, 0x288(%rsp)
je 0x1ce22
movl 0x27c(%rsp), %eax
movl %eax, 0x8c4(%rsp)
jmp 0x1cf53
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movq 0x250(%rsp), %rdi
movl %eax, 0x268(%rsp)
movq %rdx, 0x270(%rsp)
movl 0x8c4(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x8c4(%rsp)
movl %eax, %eax
movl %eax, %esi
callq 0x1d070
movq (%rax), %rax
movl %eax, 0x264(%rsp)
cmpl $0x0, 0x268(%rsp)
je 0x1ced9
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x18(%rsp)
leaq 0x1beea(%rip), %rsi     # 0x38d81
callq 0x6160
jmp 0x1ce9e
movq 0x18(%rsp), %rdi
movq 0x2f146(%rip), %rsi     # 0x4bff0
movq 0x2f0ef(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x18(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
testb $0x1, 0x270(%rsp)
jne 0x1cef1
movl 0x264(%rsp), %eax
movl %eax, 0x8c4(%rsp)
jmp 0x1cf53
jmp 0x1cf53
movl $0x10, %edi
callq 0x6200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x10(%rsp)
leaq 0x1bebe(%rip), %rsi     # 0x38dcf
callq 0x6160
jmp 0x1cf18
movq 0x10(%rsp), %rdi
movq 0x2f0cc(%rip), %rsi     # 0x4bff0
movq 0x2f075(%rip), %rdx     # 0x4bfa0
callq 0x6780
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
callq 0x6320
jmp 0x1d018
jmp 0x1ac46
movq 0x250(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movq %rax, 0x8(%rsp)
callq 0x1d050
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
ja 0x1cf80
jmp 0x1cf9f
leaq 0x1be33(%rip), %rdi     # 0x38dba
leaq 0x1bd79(%rip), %rsi     # 0x38d07
movl $0x128, %edx            # imm = 0x128
leaq 0x1bd73(%rip), %rcx     # 0x38d0d
callq 0x62b0
movq 0x8d0(%rsp), %rdi
addq $0x508, %rdi            # imm = 0x508
callq 0x1d030
movq 0x8c8(%rsp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jne 0x1cfc6
jmp 0x1cfe5
leaq 0x1be11(%rip), %rdi     # 0x38dde
leaq 0x1bd33(%rip), %rsi     # 0x38d07
movl $0x129, %edx            # imm = 0x129
leaq 0x1bd2d(%rip), %rcx     # 0x38d0d
callq 0x62b0
movq 0x8d0(%rsp), %rdi
callq 0x26b50
movl %eax, 0x8e8(%rsp)
movq %rdx, 0x8f0(%rsp)
movl 0x8e8(%rsp), %eax
movq 0x8f0(%rsp), %rdx
addq $0x8f8, %rsp            # imm = 0x8F8
retq
movq 0x7c8(%rsp), %rdi
callq 0x67a0
nopw %cs:(%rax,%rax)
nop