// File: /workspace/github_cpp_makefile_star2_O2/lrq3000[P]rfrb/./src/fileHandler.cpp
// Function: FileHandler::buildMapHeuristic(std::vector<std::vector<Block, std::allocator<Block>>, std::allocator<std::vector<Block, std::allocator<Block>>>>&, std::vector<unsigned long, std::allocator<unsigned long>>&)
std::vector<std::vector<std::pair<bool, std::vector<size_t>>>>
FileHandler::buildMapHeuristic(std::vector<std::vector<Block>> &input, std::vector<size_t> &parityDist)
{
	//Initialization
	std::vector<std::vector<std::pair<bool, std::vector<size_t>>>> ret;
	ret.resize(inFiles.size());

	size_t maxCalls = input.at(0).size();
	std::vector<std::vector<Block>::iterator> iterators;
	for (auto &in : input)
	{
		iterators.push_back(in.begin());
		maxCalls = std::min(in.size(), maxCalls);
	}
	size_t curMin = -1;
	bool interestingStart=false;
	bool interestingEnd=false;
	std::vector<size_t> pushMe;

	std::vector<std::vector<size_t>> parityDistribution;
	for (size_t i = 0; i < inFiles.size(); ++i)
	{
		std::vector<size_t> tmp;
		for (size_t j = 0; j < inFiles.size(); ++j)
		{
			tmp.push_back(0);
		}
		parityDistribution.push_back(tmp);
	}
	while (maxCalls != 0)
	{
		maxCalls--;
		curMin = -1;
		for (auto &in : iterators)
		{
			curMin = std::min(curMin, (*in).startAdress);
		}
		interestingStart = true;
		pushMe.clear();
		size_t num=0;
		for (auto &in : iterators)
		{
			if ((*in).startAdress == curMin)
			{}
			else if ((*in).startAdress == curMin+1)
			{
				pushMe.push_back(num);
			}
			else
			{
				interestingStart=false;
			}
			++num;
		}
		if (interestingStart == true && (!(pushMe.empty())))
		{
			std::pair<bool, std::vector<size_t>> entry;
			entry = std::make_pair(true, pushMe);
			size_t modOp = (curMin) % inFiles.size();
			ret.at(modOp).push_back(entry);
		}

		//If an interesting start was found
		if (interestingStart == true)
		{
			size_t sAdress = curMin;
			curMin = -1;
			for (auto &in : iterators)
				curMin = std::min(curMin, (*in).entropies.size());
			for (size_t i = 1; i < curMin; ++i)
			{
				size_t pos=0;
				size_t par=0;
				float highest=0.0f;
				size_t en = (sAdress+i)%inFiles.size();
				for (auto &in : iterators)
				{
					if ((*in).startAdress == sAdress)
					{
						if ((*in).entropies.at(i) > highest)
						{
							highest = (*in).entropies.at(i);
							par = pos;
						}
					}
					else
					{
						if ((*in).entropies.at(i-1) > highest)
						{
							highest = (*in).entropies.at(i-1);
							par = pos;
						}
					}
					++pos;
				}
				parityDistribution.at(en).at(par) = parityDistribution.at(en).at(par)+1;
			}
		}

		curMin = -1;
		for (auto &in : iterators)
		{
			curMin = std::min(curMin, (*in).endAdress);
		}
		interestingEnd = true;
		pushMe.clear();
		num=0;
		for (auto &in : iterators)
		{
			if ((*in).endAdress == curMin)
			{
				pushMe.push_back(num);
				++in;
			}
			else if ((*in).endAdress == curMin+1)
			{
				++in;
			}
			else
			{
				interestingEnd=false;
			}
			++num;
		}

		//If an interesting end was found
		if (interestingEnd == true && pushMe.size()<inFiles.size())
		{
			std::pair<bool, std::vector<size_t>> entry;
			entry = std::make_pair(false, pushMe);
			size_t modOp = (curMin) % inFiles.size();
			ret.at(modOp).push_back(entry);
		}
	}

	//Build the hashMap
	std::map<std::vector<size_t>, size_t> hashMap;
	bool schlonz = true;
	for (size_t i = 0; i < ret.size();)
	{
		hashMap.clear();
		for (size_t j = 0; j < ret.at(i).size(); ++j)
		{
			if (ret.at(i).at(j).first == schlonz)
			{
				if (hashMap.find(ret.at(i).at(j).second) == hashMap.end())
				{
					hashMap.insert(std::pair<std::vector<size_t>, size_t>(ret.at(i).at(j).second, 0));
				}
				hashMap.at(ret.at(i).at(j).second) += 1;
			}
		}
		if (hashMap.size() == 1 && hashMap.begin()->first.size() > 1)
		{
			for (size_t j = 0; j < ret.at(i).size();)
			{
				if (ret.at(i).at(j).first == schlonz)
				{
					ret.at(i).erase(ret.at(i).begin()+j);
					continue;
				}
				++j;
			}
		}
		//Kill also all unnecessary entries
		for (std::map<std::vector<size_t>, size_t>::iterator j = hashMap.begin(); j != hashMap.end();)
		{
			bool killMe = false;
			for (std::map<std::vector<size_t>, size_t>::iterator x = j; x != hashMap.end();)
			{
				if (x == j)
				{
					++x;
					continue;
				}
				if (j->first.size() == x->first.size())
				{
					if (j->second >= x->second)
					{
						if (j->second == x->second)
							killMe = true;
						for (size_t kill = 0; kill < ret.at(i).size();)
						{
							if (ret.at(i).at(kill).first == schlonz && ret.at(i).at(kill).second == x->first)
							{
								ret.at(i).erase(ret.at(i).begin()+kill);
								continue;
							}
							++kill;
						}
						x = hashMap.erase(x);
						continue;
					}
					else
					{
						killMe = true;
					}
				}
				++x;
			}
			if (killMe == true)
			{
				for (size_t kill = 0; kill < ret.at(i).size();)
				{
					if (ret.at(i).at(kill).first == schlonz && ret.at(i).at(kill).second == j->first)
					{
						ret.at(i).erase(ret.at(i).begin()+kill);
						continue;
					}
					++kill;
				}
				j = hashMap.erase(j);
				continue;
			}
			++j;
		}
		if (schlonz == true)
		{
			schlonz = false;
		}
		else
		{
			schlonz = true;
			++i;
		}
	}

	//Parity distribution is estimated
	for (size_t i = 0; i < inFiles.size(); ++i)
	{
		size_t bestFit = 0;
		size_t highestScore=0;
		for (size_t j = 0; j < inFiles.size(); ++j)
		{
			//std::cout << parityDistribution.at(i).at(j) << "\t";
			if (parityDistribution.at(i).at(j) > highestScore)
			{
				highestScore = parityDistribution.at(i).at(j);
				bestFit = j;
			}
		}
		parityDist.push_back(bestFit);
		//std::cout << std::endl;
	}
	return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rcx, 0xd8(%rsp)
movq %rdx, %r14
movq %rsi, %rbp
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
movq 0x48(%rsi), %rsi
subq 0x40(%rbp), %rsi
sarq $0x3, %rsi
movq %rdi, 0x8(%rsp)
callq 0xbc70
movq %r14, %rdi
xorl %esi, %esi
callq 0xbc30
movq 0x8(%rax), %rcx
subq (%rax), %rcx
pushq $0x38
popq %rbx
movq %rcx, %rax
cqto
idivq %rbx
movq %rax, 0x50(%rsp)
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %r15
movaps %xmm0, (%r15)
andq $0x0, 0x10(%r15)
movq (%r14), %r12
movq 0x8(%r14), %r13
leaq 0x60(%rsp), %r14
cmpq %r13, %r12
je 0x97e1
movq (%r12), %rax
movq %rax, 0x60(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xebd4
movq 0x8(%r12), %rax
subq (%r12), %rax
cqto
idivq %rbx
movq 0x50(%rsp), %rcx
cmpq %rax, %rcx
cmovaeq %rax, %rcx
movq %rcx, 0x50(%rsp)
addq $0x18, %r12
jmp 0x97a3
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
andq $0x0, 0x40(%rsp)
leaq 0xe0(%rsp), %r14
andq $0x0, 0x10(%r14)
movaps %xmm0, (%r14)
xorl %ebx, %ebx
leaq 0x60(%rsp), %r15
leaq 0xb8(%rsp), %r12
movq 0x40(%rbp), %rcx
movq 0x48(%rbp), %rax
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %rdx, %rbx
jae 0x987c
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
andq $0x0, 0x70(%rsp)
xorl %r13d, %r13d
subq %rcx, %rax
sarq $0x3, %rax
cmpq %rax, %r13
jae 0x9864
andq $0x0, 0xb8(%rsp)
movq %r15, %rdi
movq %r12, %rsi
callq 0xed64
incq %r13
movq 0x40(%rbp), %rcx
movq 0x48(%rbp), %rax
jmp 0x9837
movq %r14, %rdi
movq %r15, %rsi
callq 0xbef4
movq %r15, %rdi
callq 0xc19e
incq %rbx
jmp 0x980f
movq %rbp, 0x58(%rsp)
movq 0x50(%rsp), %rax
subq $0x1, %rax
jb 0x9c6e
movq %rax, 0x50(%rsp)
movq 0xa0(%rsp), %rbx
movq 0xa8(%rsp), %r14
movq %rbx, %rax
pushq $-0x1
popq %rcx
movq %rcx, 0x18(%rsp)
cmpq %r14, %rax
je 0x98d3
movq (%rax), %rcx
movq 0x18(%rcx), %rcx
movq 0x18(%rsp), %rdx
cmpq %rdx, %rcx
cmovbq %rcx, %rdx
movq %rdx, 0x18(%rsp)
addq $0x8, %rax
jmp 0x98b0
movq 0x30(%rsp), %rax
cmpq %rax, 0x38(%rsp)
je 0x98e4
movq %rax, 0x38(%rsp)
andq $0x0, 0x28(%rsp)
movq 0x18(%rsp), %rax
leaq 0x1(%rax), %r15
movb $0x1, %bpl
xorl %eax, %eax
cmpq %r14, %rbx
je 0x9936
movq (%rbx), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rsp), %rcx
je 0x9928
cmpq %r15, %rcx
jne 0x9926
leaq 0x30(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0xbe6e
movq 0x28(%rsp), %rax
jmp 0x9928
xorl %ebp, %ebp
incq %rax
movq %rax, 0x28(%rsp)
addq $0x8, %rbx
jmp 0x98f8
testb $0x1, %bpl
movq 0x58(%rsp), %rbx
je 0x9b21
movq 0x30(%rsp), %rax
cmpq 0x38(%rsp), %rax
leaq 0xc0(%rsp), %r14
leaq 0x60(%rsp), %r15
je 0x99d8
movb $0x0, 0x60(%rsp)
leaq 0x68(%rsp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movb $0x1, 0xb8(%rsp)
movq %r14, %rdi
leaq 0x30(%rsp), %rsi
callq 0xc150
movq %r15, %rdi
leaq 0xb8(%rsp), %rsi
callq 0xbf20
movq %r14, %rdi
callq 0xc19e
movq 0x48(%rbx), %rcx
subq 0x40(%rbx), %rcx
sarq $0x3, %rcx
movq 0x18(%rsp), %rax
xorl %edx, %edx
divq %rcx
movq 0x8(%rsp), %rdi
movq %rdx, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r15, %rsi
callq 0xbd68
leaq 0x68(%rsp), %rdi
callq 0xc19e
movq 0xa0(%rsp), %rax
movq 0xa8(%rsp), %rcx
pushq $-0x1
popq %rdi
cmpq %rcx, %rax
je 0x9a0b
movq (%rax), %rdx
movq 0x8(%rdx), %rsi
subq (%rdx), %rsi
sarq $0x2, %rsi
cmpq %rdi, %rsi
cmovbq %rsi, %rdi
addq $0x8, %rax
jmp 0x99eb
pushq $0x1
popq %r15
movq %rdi, 0x98(%rsp)
cmpq %rdi, %r15
jae 0x9b21
movq 0x48(%rbx), %rcx
subq 0x40(%rbx), %rcx
movq 0x18(%rsp), %rax
addq %r15, %rax
sarq $0x3, %rcx
xorl %edx, %edx
divq %rcx
movq %rdx, 0x20(%rsp)
movq 0xa0(%rsp), %r12
movq 0xa8(%rsp), %r14
leaq -0x1(%r15), %rbp
xorps %xmm0, %xmm0
movss %xmm0, 0x14(%rsp)
xorl %ebx, %ebx
xorl %r13d, %r13d
cmpq %r14, %r12
je 0x9aca
movq (%r12), %rdi
movq 0x18(%rsp), %rax
cmpq %rax, 0x18(%rdi)
jne 0x9a95
movq %r15, %rsi
callq 0xbf3a
movss (%rax), %xmm0
ucomiss 0x14(%rsp), %xmm0
jbe 0x9ac1
movq (%r12), %rdi
movq %r15, %rsi
callq 0xbf3a
jmp 0x9ab4
movq %rbp, %rsi
callq 0xbf3a
movss (%rax), %xmm0
ucomiss 0x14(%rsp), %xmm0
jbe 0x9ac1
movq (%r12), %rdi
movq %rbp, %rsi
callq 0xbf3a
movss (%rax), %xmm0
movss %xmm0, 0x14(%rsp)
movq %r13, %rbx
incq %r13
addq $0x8, %r12
jmp 0x9a60
leaq 0xe0(%rsp), %r12
movq %r12, %rdi
movq 0x20(%rsp), %r13
movq %r13, %rsi
callq 0xbf5c
movq %rax, %rdi
movq %rbx, %rsi
callq 0xbca6
movq (%rax), %r14
movq %r12, %rdi
movq %r13, %rsi
callq 0xbf5c
movq %rax, %rdi
movq %rbx, %rsi
callq 0xbca6
incq %r14
movq %r14, (%rax)
incq %r15
movq 0x58(%rsp), %rbx
movq 0x98(%rsp), %rdi
jmp 0x9a17
movq 0xa0(%rsp), %rbx
movq 0xa8(%rsp), %r15
movq %rbx, %rax
pushq $-0x1
popq %r14
cmpq %r15, %rax
je 0x9b51
movq (%rax), %rcx
movq 0x28(%rcx), %rcx
cmpq %r14, %rcx
cmovbq %rcx, %r14
addq $0x8, %rax
jmp 0x9b38
movq 0x30(%rsp), %rax
cmpq %rax, 0x38(%rsp)
je 0x9b62
movq %rax, 0x38(%rsp)
andq $0x0, 0x28(%rsp)
leaq 0x1(%r14), %r12
movb $0x1, %bpl
xorl %eax, %eax
cmpq %r15, %rbx
je 0x9bba
movq (%rbx), %rcx
movq 0x28(%rcx), %rdx
cmpq %r14, %rdx
jne 0x9b9c
leaq 0x30(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0xbe6e
addq $0x38, (%rbx)
movq 0x28(%rsp), %rax
jmp 0x9bac
cmpq %r12, %rdx
jne 0x9baa
addq $0x38, %rcx
movq %rcx, (%rbx)
jmp 0x9bac
xorl %ebp, %ebp
incq %rax
movq %rax, 0x28(%rsp)
addq $0x8, %rbx
jmp 0x9b71
testb $0x1, %bpl
movq 0x58(%rsp), %rbx
je 0x9881
movq 0x38(%rsp), %rax
subq 0x30(%rsp), %rax
movq 0x48(%rbx), %rcx
subq 0x40(%rbx), %rcx
cmpq %rcx, %rax
jae 0x9881
xorl %ecx, %ecx
movb %cl, 0x60(%rsp)
leaq 0x68(%rsp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movb %cl, 0xb8(%rsp)
leaq 0xc0(%rsp), %r15
movq %r15, %rdi
leaq 0x30(%rsp), %rsi
callq 0xc150
leaq 0x60(%rsp), %r12
movq %r12, %rdi
leaq 0xb8(%rsp), %rsi
callq 0xbf20
movq %r15, %rdi
callq 0xc19e
movq 0x48(%rbx), %rcx
subq 0x40(%rbx), %rcx
sarq $0x3, %rcx
movq %r14, %rax
xorl %edx, %edx
divq %rcx
movq 0x8(%rsp), %rdi
movq %rdx, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r12, %rsi
callq 0xbd68
leaq 0x68(%rsp), %rdi
callq 0xc19e
jmp 0x9881
leaq 0x60(%rsp), %rbx
andl $0x0, 0x8(%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x68(%rsp), %rax
movq %rax, 0x18(%rbx)
movq %rax, 0x20(%rbx)
andq $0x0, 0x28(%rbx)
movb $0x1, %r15b
xorl %ebp, %ebp
movq 0x8(%rsp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %rbp
jae 0xa0bf
movq %rbx, %rdi
callq 0xf07c
movl %r15d, %eax
andb $0x1, %al
movb %al, 0x14(%rsp)
xorl %r14d, %r14d
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq 0x8(%rax), %rcx
subq (%rax), %rcx
sarq $0x5, %rcx
cmpq %rcx, %r14
jae 0x9db7
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
movb 0x14(%rsp), %cl
cmpb %cl, (%rax)
jne 0x9daf
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
addq $0x8, %rax
movq %rbx, %rdi
movq %rax, %rsi
callq 0xf0aa
leaq 0x68(%rsp), %rcx
cmpq %rcx, %rax
jne 0x9d85
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
addq $0x8, %rax
leaq 0xb8(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0xc150
andq $0x0, 0xd0(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xf176
movq %r12, %rdi
callq 0xc19e
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
addq $0x8, %rax
movq %rbx, %rdi
movq %rax, %rsi
callq 0xbf7a
incq (%rax)
incq %r14
jmp 0x9cc4
movb %r15b, 0x98(%rsp)
movq 0x78(%rsp), %r15
cmpq $0x1, 0x88(%rsp)
jne 0x9e5f
movq 0x28(%r15), %rax
subq 0x20(%r15), %rax
cmpq $0x9, %rax
jb 0x9e5f
xorl %r14d, %r14d
movq %r14, %rbx
shlq $0x5, %rbx
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq 0x8(%rax), %rcx
subq (%rax), %rcx
sarq $0x5, %rcx
cmpq %rcx, %r14
jae 0x9e5a
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
movb 0x14(%rsp), %cl
cmpb %cl, (%rax)
jne 0x9e55
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %r15
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq (%rax), %rsi
addq %rbx, %rsi
movq %r15, %rdi
callq 0xbfc0
jmp 0x9deb
incq %r14
jmp 0x9de4
movq 0x78(%rsp), %r15
leaq 0x68(%rsp), %rax
cmpq %rax, %r15
je 0xa09d
leaq 0x20(%r15), %rbx
movl $0x0, 0x20(%rsp)
movq %r15, %r14
leaq 0x68(%rsp), %rax
cmpq %rax, %r14
je 0x9fc2
cmpq %r15, %r14
jne 0x9e9c
movq %r14, %rdi
callq 0x5250
movq %rax, %r14
jmp 0x9e7c
movq %rbx, %r12
movq 0x28(%r15), %rax
subq 0x20(%r15), %rax
movq 0x28(%r14), %rcx
subq 0x20(%r14), %rcx
cmpq %rcx, %rax
jne 0x9f8e
leaq 0x20(%r14), %rax
movq %rax, 0x18(%rsp)
movq 0x38(%r14), %rax
movb $0x1, %bl
cmpq %rax, 0x38(%r15)
jb 0x9f94
sete %al
movl 0x20(%rsp), %ecx
orb %al, %cl
movl %ecx, 0x20(%rsp)
xorl %r13d, %r13d
movq %r12, %rbx
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq 0x8(%rax), %rcx
subq (%rax), %rcx
sarq $0x5, %rcx
cmpq %rcx, %r13
jae 0x9fad
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r13, %rsi
callq 0xbd94
movb 0x14(%rsp), %cl
cmpb %cl, (%rax)
jne 0x9f86
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r13, %rsi
callq 0xbd94
addq $0x8, %rax
movq %rax, %rdi
movq 0x18(%rsp), %rsi
callq 0xbfc5
testb %al, %al
je 0x9f86
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %r12
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %r13, %rsi
shlq $0x5, %rsi
addq (%rax), %rsi
movq %r12, %rdi
callq 0xbfc0
jmp 0x9ee4
incq %r13
jmp 0x9ee4
movl 0x20(%rsp), %eax
movl %eax, %ebx
movq %r14, %rdi
callq 0x5250
movq %rax, %r14
movl %ebx, %eax
movl %eax, 0x20(%rsp)
movq %r12, %rbx
jmp 0x9e7c
leaq 0x60(%rsp), %rdi
movq %r14, %rsi
callq 0xf436
movq %rax, %r14
jmp 0x9e7c
testb $0x1, 0x20(%rsp)
je 0xa078
xorl %r14d, %r14d
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq 0x8(%rax), %rcx
subq (%rax), %rcx
sarq $0x5, %rcx
cmpq %rcx, %r14
jae 0xa088
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
movb 0x14(%rsp), %cl
cmpb %cl, (%rax)
jne 0xa070
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %rdi
movq %r14, %rsi
callq 0xbd94
addq $0x8, %rax
movq %rax, %rdi
movq %rbx, %rsi
callq 0xbfc5
testb %al, %al
je 0xa070
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %rax, %r12
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
callq 0xbd4a
movq %r14, %rsi
shlq $0x5, %rsi
addq (%rax), %rsi
movq %r12, %rdi
callq 0xbfc0
jmp 0x9fd0
incq %r14
jmp 0x9fd0
movq %r15, %rdi
callq 0x5250
movq %rax, %r15
jmp 0x9e5f
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0xf436
movq %rax, %r15
jmp 0x9e5f
movb 0x98(%rsp), %r15b
xorb $0x1, %r15b
movb 0x14(%rsp), %al
xorb $0x1, %al
movzbl %al, %eax
addq %rax, %rbp
leaq 0x60(%rsp), %rbx
jmp 0x9c93
xorl %r14d, %r14d
leaq 0xe0(%rsp), %r15
leaq 0xb8(%rsp), %r12
movq 0x58(%rsp), %rbp
movq 0x40(%rbp), %rcx
movq 0x48(%rbp), %rax
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %rdx, %r14
jae 0xa169
andq $0x0, 0xb8(%rsp)
xorl %ebx, %ebx
xorl %r13d, %r13d
subq %rcx, %rax
sarq $0x3, %rax
cmpq %rax, %r13
jae 0xa151
movq %r15, %rdi
movq %r14, %rsi
callq 0xbf5c
movq %rax, %rdi
movq %r13, %rsi
callq 0xbca6
cmpq %rbx, (%rax)
jbe 0xa144
movq %r15, %rdi
movq %r14, %rsi
callq 0xbf5c
movq %rax, %rdi
movq %r13, %rsi
callq 0xbca6
movq (%rax), %rbx
movq %r13, 0xb8(%rsp)
incq %r13
movq 0x40(%rbp), %rcx
movq 0x48(%rbp), %rax
jmp 0xa0fc
movq 0xd8(%rsp), %rdi
movq %r12, %rsi
callq 0xbe6e
incq %r14
jmp 0xa0d7
leaq 0x60(%rsp), %rdi
callq 0xc20e
leaq 0xe0(%rsp), %rdi
callq 0xbfee
leaq 0x30(%rsp), %rdi
callq 0xc19e
leaq 0xa0(%rsp), %rdi
callq 0xebc6
movq 0x8(%rsp), %rax
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xa1b0
movq %rax, %r14
jmp 0xa246
jmp 0xa1be
jmp 0xa1be
jmp 0xa1be
movq %rax, %r14
leaq 0x68(%rsp), %rdi
jmp 0xa1fb
jmp 0xa215
jmp 0xa1f3
movq %rax, %r14
jmp 0xa239
movq %rax, %r14
leaq 0xb8(%rsp), %rdi
callq 0xc19e
jmp 0xa218
jmp 0xa215
jmp 0xa215
jmp 0xa20c
jmp 0xa215
jmp 0xa215
jmp 0xa215
jmp 0xa20c
jmp 0xa215
movq %rax, %r14
leaq 0x60(%rsp), %rdi
callq 0xc19e
jmp 0xa222
jmp 0xa215
jmp 0xa20c
jmp 0xa215
jmp 0xa215
jmp 0xa215
movq %rax, %r14
jmp 0xa222
jmp 0xa215
jmp 0xa215
movq %rax, %r14
leaq 0x60(%rsp), %rdi
callq 0xc20e
leaq 0xe0(%rsp), %rdi
callq 0xbfee
leaq 0x30(%rsp), %rdi
callq 0xc19e
leaq 0xa0(%rsp), %rdi
callq 0xebc6
movq 0x8(%rsp), %rdi
callq 0xbe8e
movq %r14, %rdi
callq 0x5610