// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_msl.cpp
// Function: spirv_cross::CompilerMSL::emit_entry_point_declarations()
void CompilerMSL::emit_entry_point_declarations()
{
	// FIXME: Get test coverage here ...

	// Emit constexpr samplers here.
	for (auto &samp : constexpr_samplers)
	{
		auto &var = get<SPIRVariable>(samp.first);
		auto &type = get<SPIRType>(var.basetype);
		if (type.basetype == SPIRType::Sampler)
			add_resource_name(samp.first);

		vector<string> args;
		auto &s = samp.second;

		if (s.coord != MSL_SAMPLER_COORD_NORMALIZED)
			args.push_back("coord::pixel");

		if (s.min_filter == s.mag_filter)
		{
			if (s.min_filter != MSL_SAMPLER_FILTER_NEAREST)
				args.push_back("filter::linear");
		}
		else
		{
			if (s.min_filter != MSL_SAMPLER_FILTER_NEAREST)
				args.push_back("min_filter::linear");
			if (s.mag_filter != MSL_SAMPLER_FILTER_NEAREST)
				args.push_back("mag_filter::linear");
		}

		switch (s.mip_filter)
		{
		case MSL_SAMPLER_MIP_FILTER_NONE:
			// Default
			break;
		case MSL_SAMPLER_MIP_FILTER_NEAREST:
			args.push_back("mip_filter::nearest");
			break;
		case MSL_SAMPLER_MIP_FILTER_LINEAR:
			args.push_back("mip_filter::linear");
			break;
		default:
			SPIRV_CROSS_THROW("Invalid mip filter.");
		}

		if (s.s_address == s.t_address && s.s_address == s.r_address)
		{
			if (s.s_address != MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE)
				args.push_back(create_sampler_address("", s.s_address));
		}
		else
		{
			if (s.s_address != MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE)
				args.push_back(create_sampler_address("s_", s.s_address));
			if (s.t_address != MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE)
				args.push_back(create_sampler_address("t_", s.t_address));
			if (s.r_address != MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE)
				args.push_back(create_sampler_address("r_", s.r_address));
		}

		if (s.compare_enable)
		{
			switch (s.compare_func)
			{
			case MSL_SAMPLER_COMPARE_FUNC_ALWAYS:
				args.push_back("compare_func::always");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_NEVER:
				args.push_back("compare_func::never");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_EQUAL:
				args.push_back("compare_func::equal");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_NOT_EQUAL:
				args.push_back("compare_func::not_equal");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_LESS:
				args.push_back("compare_func::less");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_LESS_EQUAL:
				args.push_back("compare_func::less_equal");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_GREATER:
				args.push_back("compare_func::greater");
				break;
			case MSL_SAMPLER_COMPARE_FUNC_GREATER_EQUAL:
				args.push_back("compare_func::greater_equal");
				break;
			default:
				SPIRV_CROSS_THROW("Invalid sampler compare function.");
			}
		}

		if (s.s_address == MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER || s.t_address == MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER ||
		    s.r_address == MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER)
		{
			switch (s.border_color)
			{
			case MSL_SAMPLER_BORDER_COLOR_OPAQUE_BLACK:
				args.push_back("border_color::opaque_black");
				break;
			case MSL_SAMPLER_BORDER_COLOR_OPAQUE_WHITE:
				args.push_back("border_color::opaque_white");
				break;
			case MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK:
				args.push_back("border_color::transparent_black");
				break;
			default:
				SPIRV_CROSS_THROW("Invalid sampler border color.");
			}
		}

		if (s.anisotropy_enable)
			args.push_back(join("max_anisotropy(", s.max_anisotropy, ")"));
		if (s.lod_clamp_enable)
		{
			args.push_back(
			    join("lod_clamp(", convert_to_string(s.lod_clamp_min), ", ", convert_to_string(s.lod_clamp_max), ")"));
		}

		statement("constexpr sampler ",
		          type.basetype == SPIRType::SampledImage ? to_sampler_expression(samp.first) : to_name(samp.first),
		          "(", merge(args), ");");
	}

	// Emit buffer arrays here.
	for (uint32_t array_id : buffer_arrays)
	{
		const auto &var = get<SPIRVariable>(array_id);
		const auto &type = get<SPIRType>(var.basetype);
		string name = get_name(array_id);
		statement(get_argument_address_space(var) + " " + type_to_glsl(type) + "* " + name + "[] =");
		begin_scope();
		for (uint32_t i = 0; i < type.array[0]; ++i)
			statement(name + "_" + convert_to_string(i) + ",");
		end_scope_decl();
		statement("");
	}
	// For some reason, without this, we end up emitting the arrays twice.
	buffer_arrays.clear();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdi, %r13
movq 0x9d8(%rdi), %r14
testq %r14, %r14
movq %rdi, 0xe8(%rsp)
je 0x886fa
movq %rsp, %r12
leaq 0x60(%rsp), %rbx
leaq 0x32210(%rip), %r15     # 0xba0ab
leaq 0x40(%rsp), %rbp
movl 0x8(%r14), %esi
movq %r13, %rdi
callq 0xb3ca
movl 0xc(%rax), %esi
movq %r13, %rdi
callq 0xa3ea
movq %rax, 0xc0(%rsp)
cmpl $0xf, 0xc(%rax)
jne 0x87ed1
movl 0x8(%r14), %esi
movq %r13, %rdi
callq 0x281be
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movq $0x0, 0x70(%rsp)
cmpl $0x0, 0xc(%r14)
je 0x87f2e
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38267(%rip), %rsi     # 0xc0163
leaq 0x3826c(%rip), %rdx     # 0xc016f
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x87f2e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x10(%r14), %ecx
movl 0x14(%r14), %eax
cmpl %eax, %ecx
jne 0x87f6e
testl %ecx, %ecx
je 0x88004
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38232(%rip), %rsi     # 0xc0187
leaq 0x38239(%rip), %rdx     # 0xc0195
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x87fe9
testl %ecx, %ecx
je 0x87fbb
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x381eb(%rip), %rsi     # 0xc0170
leaq 0x381f6(%rip), %rdx     # 0xc0182
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x87fb7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x14(%r14), %eax
testl %eax, %eax
je 0x88004
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x381b1(%rip), %rsi     # 0xc0183
leaq 0x381bc(%rip), %rdx     # 0xc0195
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x88004
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x18(%r14), %eax
testl %eax, %eax
je 0x8808b
cmpl $0x2, %eax
je 0x88046
cmpl $0x1, %eax
jne 0x88db8
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38169(%rip), %rsi     # 0xc0196
leaq 0x38175(%rip), %rdx     # 0xc01a9
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88070
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38151(%rip), %rsi     # 0xc01aa
leaq 0x3815c(%rip), %rdx     # 0xc01bc
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8808b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x1c(%r14), %edx
movl 0x20(%r14), %eax
cmpl %eax, %edx
jne 0x880c5
cmpl 0x24(%r14), %edx
jne 0x880c5
cmpl $0x1, %edx
je 0x8817d
movq %r12, %rdi
leaq 0x2c7ff(%rip), %rsi     # 0xb48af
callq 0x8929f
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88162
cmpl $0x1, %edx
je 0x88103
movq %r12, %rdi
leaq 0x380fd(%rip), %rsi     # 0xc01d1
callq 0x8929f
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x880ff
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x20(%r14), %eax
cmpl $0x1, %eax
je 0x8813f
movq %r12, %rdi
leaq 0x359aa(%rip), %rsi     # 0xbdabc
movl %eax, %edx
callq 0x8929f
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8813f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x24(%r14), %edx
cmpl $0x1, %edx
je 0x8817d
movq %r12, %rdi
leaq 0x2c105(%rip), %rsi     # 0xb4257
callq 0x8929f
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8817d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
cmpb $0x1, 0x3c(%r14)
jne 0x8832e
movl 0x28(%r14), %eax
cmpq $0x7, %rax
ja 0x88e7b
leaq 0x376b3(%rip), %rcx     # 0xbf850
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38030(%rip), %rsi     # 0xc01e9
leaq 0x3803c(%rip), %rdx     # 0xc01fc
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38083(%rip), %rsi     # 0xc026b
leaq 0x38097(%rip), %rdx     # 0xc0286
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x38025(%rip), %rsi     # 0xc023c
leaq 0x38036(%rip), %rdx     # 0xc0254
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x3800f(%rip), %rsi     # 0xc0255
leaq 0x3801d(%rip), %rdx     # 0xc026a
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f5f(%rip), %rsi     # 0xc01d4
leaq 0x37f6c(%rip), %rdx     # 0xc01e8
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f85(%rip), %rsi     # 0xc0229
leaq 0x37f90(%rip), %rdx     # 0xc023b
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f2d(%rip), %rsi     # 0xc01fd
leaq 0x37f39(%rip), %rdx     # 0xc0210
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x88313
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f15(%rip), %rsi     # 0xc0211
leaq 0x37f25(%rip), %rdx     # 0xc0228
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8832e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
cmpl $0x2, 0x1c(%r14)
je 0x88347
cmpl $0x2, 0x20(%r14)
je 0x88347
cmpl $0x2, 0x24(%r14)
jne 0x883fa
movl 0x2c(%r14), %eax
testl %eax, %eax
je 0x883b5
cmpl $0x2, %eax
je 0x88389
cmpl $0x1, %eax
jne 0x88e1b
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f39(%rip), %rsi     # 0xc02a9
leaq 0x37f4c(%rip), %rdx     # 0xc02c3
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x883df
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f28(%rip), %rsi     # 0xc02c4
leaq 0x37f3b(%rip), %rdx     # 0xc02de
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
jmp 0x883df
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %r12, %rdi
leaq 0x37f17(%rip), %rsi     # 0xc02df
leaq 0x37f2f(%rip), %rdx     # 0xc02fe
callq 0x7be0
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x883fa
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
cmpb $0x1, 0x3e(%r14)
jne 0x88441
leaq 0x38(%r14), %rdx
movq %r12, %rdi
leaq 0x37f0e(%rip), %rsi     # 0xc031d
leaq 0x325ff(%rip), %rcx     # 0xbaa15
callq 0xa2ff3
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x88441
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
cmpb $0x1, 0x3d(%r14)
jne 0x885f9
xorps %xmm0, %xmm0
cvtss2sd 0x30(%r14), %xmm0
movq %r12, %rdi
leaq 0x328c4(%rip), %rsi     # 0xbad23
movb $0x1, %al
callq 0x6060
movq %r12, %rdi
movl $0x2e, %esi
callq 0x60e0
testq %rax, %rax
jne 0x8849d
movq %r12, %rdi
movl $0x65, %esi
callq 0x60e0
testq %rax, %rax
jne 0x8849d
movq %r12, %rdi
callq 0x6120
movw $0x302e, (%rsp,%rax)    # imm = 0x302E
movb $0x0, 0x2(%rsp,%rax)
leaq 0x90(%rsp), %rax
movq %rax, 0x80(%rsp)
movq %r12, %rdi
callq 0x6120
leaq (%rsp,%rax), %rdx
leaq 0x80(%rsp), %rdi
movq %r12, %rsi
callq 0x7be0
xorps %xmm0, %xmm0
cvtss2sd 0x34(%r14), %xmm0
movq %r12, %rdi
leaq 0x32847(%rip), %rsi     # 0xbad23
movb $0x1, %al
callq 0x6060
movq %r12, %rdi
movl $0x2e, %esi
callq 0x60e0
testq %rax, %rax
jne 0x8851a
movq %r12, %rdi
movl $0x65, %esi
callq 0x60e0
testq %rax, %rax
jne 0x8851a
movq %r12, %rdi
callq 0x6120
movw $0x302e, (%rsp,%rax)    # imm = 0x302E
movb $0x0, 0x2(%rsp,%rax)
leaq 0xb0(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq %r12, %rdi
callq 0x6120
leaq (%rsp,%rax), %rdx
leaq 0xa0(%rsp), %r15
movq %r15, %rdi
movq %r12, %rbp
movq %r12, %rsi
callq 0x7be0
leaq 0x40(%rsp), %r12
movq %r12, %rdi
leaq 0x37dd2(%rip), %rsi     # 0xc032d
leaq 0x80(%rsp), %rdx
leaq 0x31b41(%rip), %rcx     # 0xba0ab
movq %r15, %r8
leaq 0x324a1(%rip), %r9      # 0xbaa15
callq 0xa308f
movq %rbx, %rdi
movq %r12, %rsi
callq 0xebc2
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
leaq 0x31b13(%rip), %r15     # 0xba0ab
je 0x885a7
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
movq %rbp, %r12
je 0x885cf
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
leaq 0x40(%rsp), %rbp
je 0x885f9
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xc0(%rsp), %rax
cmpl $0xe, 0xc(%rax)
movl 0x8(%r14), %edx
jne 0x88618
movq %r12, %rdi
movq %r13, %rsi
callq 0x893aa
jmp 0x8862a
movq (%r13), %rax
movq %r12, %rdi
movq %r13, %rsi
movl $0x1, %ecx
callq *0x38(%rax)
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
movq $0x0, 0x48(%rsp)
movb $0x0, 0x50(%rsp)
movq 0x60(%rsp), %rbx
movq 0x68(%rsp), %r13
cmpq %r13, %rbx
je 0x8867f
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
movq %rbp, %rdi
callq 0x60b0
movq 0x68(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %rbx
je 0x88679
movq %rbp, %rdi
movq %r15, %rsi
callq 0x64e0
addq $0x20, %rbx
jmp 0x8864c
movq 0xe8(%rsp), %r13
movq %r13, %rdi
leaq 0x37ca7(%rip), %rsi     # 0xc0338
movq %r12, %rdx
leaq 0x3a5d6(%rip), %rcx     # 0xc2c71
movq %rbp, %r8
leaq 0x3644b(%rip), %r9      # 0xbeaf0
callq 0xa3144
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
leaq 0x60(%rsp), %rbx
je 0x886cb
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x886e6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0xda2c
movq (%r14), %r14
testq %r14, %r14
jne 0x87ea0
movq 0xa00(%r13), %rax
movq 0xa08(%r13), %rcx
movq %rcx, 0x110(%rsp)
cmpq %rcx, %rax
je 0x88da6
leaq 0xa0(%rsp), %r12
movl $0xd1b71759, %ebx       # imm = 0xD1B71759
movq %rax, 0xc0(%rsp)
movl (%rax), %ebp
movq %r13, %rdi
movl %ebp, %esi
callq 0xb3ca
movq %rax, %r14
movl 0xc(%rax), %esi
movq %r13, %rdi
callq 0xa3ea
movq %rax, %r15
movq %r13, %rdi
movl %ebp, %esi
callq 0x14d2c
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rsp, %rdi
callq 0xe456
leaq 0x118(%rsp), %rbp
movq %rbp, %rdi
movq %r13, %rsi
movq %r14, %rdx
callq 0x8960a
movq %rbp, %rdi
leaq 0x2c11e(%rip), %rsi     # 0xb48ae
callq 0x64e0
leaq 0xd8(%rsp), %rbp
movq %rbp, 0xc8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movq 0xe8(%rsp), %r13
leaq 0xb0(%rsp), %r14
je 0x887d9
movq %rdx, 0xc8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd8(%rsp)
jmp 0x887e0
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rdx, 0xd0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%r13), %rax
leaq 0xf0(%rsp), %rdi
movq %r13, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq *0x98(%rax)
movq 0xc8(%rsp), %rcx
movl $0xf, %edi
cmpq %rbp, %rcx
je 0x8882f
movq 0xd8(%rsp), %rdi
movq 0xd0(%rsp), %r8
movq 0xf0(%rsp), %rsi
movq 0xf8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x8886f
movl $0xf, %edi
leaq 0x100(%rsp), %r9
cmpq %r9, %rsi
je 0x8886a
movq 0x100(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x8887e
leaq 0xc8(%rsp), %rdi
callq 0x60b0
jmp 0x8888f
leaq 0xf0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x62c0
leaq 0x70(%rsp), %rsi
movq %rsi, 0x60(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x888b4
movq %rdx, 0x60(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x70(%rsp)
jmp 0x888ba
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x68(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x60(%rsp), %rdi
leaq 0x30c62(%rip), %rsi     # 0xb9545
callq 0x64e0
movq %r14, 0xa0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x88914
movq %rdx, 0xa0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb0(%rsp)
jmp 0x8891b
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, 0xa8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r12, %rdi
callq 0x60b0
leaq 0x90(%rsp), %rsi
movq %rsi, 0x80(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x8897b
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x88981
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x88(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x80(%rsp), %rdi
leaq 0x379a0(%rip), %rsi     # 0xc034b
callq 0x64e0
leaq 0x50(%rsp), %rsi
movq %rsi, 0x40(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x889d8
movq %rdx, 0x40(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x50(%rsp)
jmp 0x889de
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x48(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
callq 0xa32fc
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x88a1f
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x88a44
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xa0(%rsp), %rdi
cmpq %r14, %rdi
je 0x88a61
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x88a7d
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x88aa2
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xc8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x88abf
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x88ae4
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r13, %rdi
callq 0x281d8
movq 0x20(%r15), %rax
cmpl $0x0, (%rax)
je 0x88d43
xorl %ebp, %ebp
movq %r14, 0xa0(%rsp)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xe456
movq %r12, %rdi
leaq 0x35496(%rip), %rsi     # 0xbdfb7
callq 0x64e0
movl $0x1, %eax
cmpl $0xa, %ebp
jb 0x88b6f
movl $0x4, %eax
movl %ebp, %ecx
cmpl $0x63, %ecx
jbe 0x88b68
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x88b6d
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x88b6f
movl %ecx, %edx
imulq %rbx, %rdx
shrq $0x2d, %rdx
addl $0x4, %eax
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x88b37
addl $-0x3, %eax
jmp 0x88b6f
addl $-0x2, %eax
jmp 0x88b6f
decl %eax
movl %eax, %esi
leaq 0x70(%rsp), %rax
movq %rax, 0x60(%rsp)
leaq 0x60(%rsp), %rdi
xorl %edx, %edx
callq 0x62f0
movq 0x60(%rsp), %rdi
movl 0x68(%rsp), %esi
movl %ebp, %edx
callq 0x20b57
movq 0xa0(%rsp), %rcx
movl $0xf, %edi
cmpq %r14, %rcx
je 0x88bb1
movq 0xb0(%rsp), %rdi
movq 0xa8(%rsp), %r8
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x88be5
movl $0xf, %edi
leaq 0x70(%rsp), %r9
cmpq %r9, %rsi
je 0x88be0
movq 0x70(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x88bef
movq %r12, %rdi
callq 0x60b0
jmp 0x88bfd
leaq 0x60(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x62c0
leaq 0x90(%rsp), %rsi
movq %rsi, 0x80(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x88c2e
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x88c34
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x88(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x80(%rsp), %rdi
leaq 0x38d2a(%rip), %rsi     # 0xc198d
callq 0x64e0
leaq 0x50(%rsp), %rsi
movq %rsi, 0x40(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x88c90
movq %rdx, 0x40(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x50(%rsp)
jmp 0x88c96
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x48(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
callq 0xa32fc
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x88cd7
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x88cfc
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x88d18
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xa0(%rsp), %rdi
cmpq %r14, %rdi
je 0x88d35
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
incl %ebp
movq 0x20(%r15), %rax
cmpl (%rax), %ebp
jb 0x88afb
movq %r13, %rdi
callq 0x28270
movq %r13, %rdi
leaq 0x2bb5a(%rip), %rsi     # 0xb48af
callq 0xa6c4
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x88d75
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xc0(%rsp), %rax
addq $0x4, %rax
cmpq 0x110(%rsp), %rax
jne 0x88726
movq 0xa00(%r13), %rax
cmpq %rax, 0xa08(%r13)
je 0x88da6
movq %rax, 0xa08(%r13)
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
movq %rsp, %rdi
leaq 0x10(%rsp), %rax
movq %rax, (%rdi)
leaq 0x373e6(%rip), %rsi     # 0xc01bd
leaq 0x373f2(%rip), %rdx     # 0xc01d0
callq 0x7be0
movb $0x1, %bl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0x72fd1(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebx, %ebx
leaq 0x72fa9(%rip), %rsi     # 0xfbdb0
movq 0x741ca(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x88ed9
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
movq %rsp, %rdi
leaq 0x10(%rsp), %rax
movq %rax, (%rdi)
leaq 0x374c5(%rip), %rsi     # 0xc02ff
leaq 0x374db(%rip), %rdx     # 0xc031c
callq 0x7be0
movb $0x1, %bl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0x72f6e(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebx, %ebx
leaq 0x72f46(%rip), %rsi     # 0xfbdb0
movq 0x74167(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x88ed9
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
movq %rsp, %rdi
leaq 0x10(%rsp), %rax
movq %rax, (%rdi)
leaq 0x373ed(%rip), %rsi     # 0xc0287
leaq 0x37407(%rip), %rdx     # 0xc02a8
callq 0x7be0
movb $0x1, %bl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0x72f0e(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebx, %ebx
leaq 0x72ee6(%rip), %rsi     # 0xfbdb0
movq 0x74107(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x88f52
jmp 0x88f79
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x88f52
jmp 0x88f79
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
movq %rax, %r15
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x88f70
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bl, %bl
jne 0x88f7c
jmp 0x8928d
movq %rax, %r15
movq %r14, %rdi
callq 0x6200
jmp 0x8928d
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x89199
jmp 0x8906b
jmp 0x8906b
movq %rax, %r15
jmp 0x89040
movq %rax, %r15
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x8901b
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x8901b
jmp 0x89199
jmp 0x89199
movq %rax, %r15
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x89040
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x8928d
movq 0x90(%rsp), %rsi
jmp 0x89285
jmp 0x89199
movq %rax, %r15
jmp 0x89272
jmp 0x89211
movq %rax, %r15
jmp 0x8916e
movq %rax, %r15
jmp 0x89151
movq %rax, %r15
jmp 0x89124
movq %rax, %r15
jmp 0x89108
movq %rax, %r15
jmp 0x890e3
movq %rax, %r15
jmp 0x890be
movq %rax, %r15
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x890be
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x890e3
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x89108
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x89124
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x89149
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0xd8(%rsp), %rbp
movq 0xc8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x8916e
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x89236
movq 0x128(%rsp), %rsi
jmp 0x8922e
jmp 0x89253
movq %rax, %r15
jmp 0x8928d
jmp 0x89211
movq %rax, %r15
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x891c7
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x891c7
movq %rax, %r15
leaq 0x90(%rsp), %rax
movq 0x80(%rsp), %rdi
cmpq %rax, %rdi
je 0x891f3
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x891f3
jmp 0x89216
movq %rax, %r15
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x89219
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x89219
movq %rax, %r15
jmp 0x89236
movq %rax, %r15
movq 0xa0(%rsp), %rdi
cmpq %r14, %rdi
je 0x89236
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x6260
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x89297
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x89297
movq %rax, %r15
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x89272
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x6260
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8928d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x60(%rsp), %rdi
callq 0xda2c
movq %r15, %rdi
callq 0x64a0