// File: ksabry[P]bfbrute/src/ProgramIterator.h
// Function: ProgramIterator<400ul, 32ul, 12ul, 32ul>::StringDistanceOutputRecursive[abi:cxx11](char const*, unsigned long, unsigned long, unsigned char*, unsigned long)
std::string StringDistanceOutputRecursive(const char* target, uint_fast32_t targetSize, uint_fast32_t shortCircuit, uint8_t* currentData, uint_fast32_t currentDataIdx)
	{
		if (targetSize == 0)
		{
			return std::string();
		}

		uint_fast32_t bestScore = 100000;
		std::string bestProgram = std::string(shortCircuit + 1, ' ');
		char c = target[0];

		// Compute best scores for reaching each specific data index
		uint_fast32_t dataDeltaScores[data_size];
		std::string dataDeltaPrograms[data_size];

		for (uint_fast32_t idx = 0; idx < data_size; idx++)
		{
			dataDeltaScores[idx] = abs(static_cast<int_fast32_t>(currentDataIdx - idx));
			dataDeltaPrograms[idx] = "";
			if (idx > currentDataIdx)
			{
				for (uint_fast32_t i = 0; i < idx - currentDataIdx; i++) dataDeltaPrograms[idx] += '>';
			}
			else
			{
				for (uint_fast32_t i = 0; i < currentDataIdx - idx; i++) dataDeltaPrograms[idx] += '<';
			}
		}
		for (int_fast32_t startDelta = -8; startDelta <= 8; startDelta++)
		{
			int_fast32_t startIdx = static_cast<int_fast32_t>(currentDataIdx) + startDelta;
			if (startIdx < 0 || startIdx >= data_size)
			{
				continue;
			}
			for (int_fast32_t innerDelta = -8; innerDelta <= 8; innerDelta++)
			{
				if (innerDelta == 0)
				{
					continue;
				}
				int_fast32_t innerIdx = startIdx;
				while (currentData[innerIdx])
				{
					innerIdx += innerDelta;
					if (innerIdx < 0 || innerIdx >= data_size)
					{
						goto loop_fail;
					}
				}
				for (int_fast32_t endDelta = -8; endDelta <= 8; endDelta++)
				{
					int_fast32_t endIdx = innerIdx + endDelta;
					if (endIdx < 0 || endIdx >= data_size)
					{
						continue;
					}
					uint_fast32_t dataDeltaScore = 2 + abs(startDelta) + abs(innerDelta) + abs(endDelta);
					if (dataDeltaScore < dataDeltaScores[endIdx])
					{
						dataDeltaScores[endIdx] = dataDeltaScore;
						dataDeltaPrograms[endIdx] = std::string();
						if (startDelta > 0)
						{
							for (uint_fast32_t i = 0; i < startDelta; i++) dataDeltaPrograms[endIdx] += '>';
						}
						else
						{
							for (uint_fast32_t i = 0; i < -startDelta; i++) dataDeltaPrograms[endIdx] += '<';
						}
						dataDeltaPrograms[endIdx] += '[';
						if (innerDelta > 0)
						{
							for (uint_fast32_t i = 0; i < innerDelta; i++) dataDeltaPrograms[endIdx] += '>';
						}
						else
						{
							for (uint_fast32_t i = 0; i < -innerDelta; i++) dataDeltaPrograms[endIdx] += '<';
						}
						dataDeltaPrograms[endIdx] += ']';
						if (endDelta > 0)
						{
							for (uint_fast32_t i = 0; i < endDelta; i++) dataDeltaPrograms[endIdx] += '>';
						}
						else
						{
							for (uint_fast32_t i = 0; i < -endDelta; i++) dataDeltaPrograms[endIdx] += '<';
						}
					}
				}
			loop_fail:;
			}
		}

		// Search through reaching each specific data index and directly modifying the data to match the next character
		for (uint_fast32_t newDataIdx = 0; newDataIdx < data_size; newDataIdx++)
		{
			uint_fast32_t charScore = 1 + dataDeltaScores[newDataIdx] + abs(static_cast<int8_t>(c - currentData[newDataIdx]));
			std::string charProgram = dataDeltaPrograms[newDataIdx];
			int8_t diff = static_cast<int8_t>(c - currentData[newDataIdx]);
			if (diff > 0)
			{
				for (uint_fast32_t i = 0; i < diff; i++) charProgram += '+';
			}
			else
			{
				for (uint_fast32_t i = 0; i < -diff; i++) charProgram += '-';
			}
			charProgram += '.';

			if (charScore > shortCircuit)
			{
				continue;
			}

			char oldData = currentData[newDataIdx];
			currentData[newDataIdx] = c;
			std::string restProgram = StringDistanceOutputRecursive(target + 1, targetSize - 1, shortCircuit - charScore, currentData, newDataIdx);
			uint_fast32_t restScore = restProgram.size();
			currentData[newDataIdx] = oldData;

			if (charScore + restScore < bestScore)
			{
				bestScore = charScore + restScore;
				bestProgram = charProgram + restProgram;
			}

#ifdef CASE_INSENSITIVE
			if ('a' <= c && c <= 'z')
			{
				char upperC = toupper(c);
				uint_fast32_t upperCharScore = 1 + dataDeltaScores[newDataIdx] + abs(static_cast<int8_t>(upperC - currentData[newDataIdx]));
				std::string upperCharProgram = dataDeltaPrograms[newDataIdx];
				int8_t diff = static_cast<int8_t>(upperC - currentData[newDataIdx]);
				if (diff > 0)
				{
					for (uint_fast32_t i = 0; i < diff; i++) upperCharProgram += '+';
				}
				else
				{
					for (uint_fast32_t i = 0; i < -diff; i++) upperCharProgram += '-';
				}
				upperCharProgram += '.';

				if (upperCharScore > shortCircuit)
				{
					continue;
				}

				char oldData = currentData[newDataIdx];
				currentData[newDataIdx] = upperC;
				std::string restProgram = StringDistanceOutputRecursive(target + 1, targetSize - 1, shortCircuit - upperCharScore, currentData, newDataIdx);
				uint_fast32_t restScore = restProgram.size();
				currentData[newDataIdx] = oldData;

				if (upperCharScore + restScore < bestScore)
				{
					bestScore = upperCharScore + restScore;
					bestProgram = upperCharProgram + restProgram;
				}
			}
#endif
		}
		return bestProgram;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4090, %rsp           # imm = 0x4090
movq %rdi, -0x4020(%rbp)
movq %rdi, %rax
movq %rax, -0x4018(%rbp)
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x4010(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x1158b
movq -0x4020(%rbp), %rdi
callq 0x33a0
jmp 0x11fb4
movq $0x186a0, -0x38(%rbp)   # imm = 0x186A0
movb $0x0, -0x39(%rbp)
movq -0x28(%rbp), %rax
incq %rax
movq %rax, -0x4030(%rbp)
leaq -0x3a(%rbp), %rdi
movq %rdi, -0x4028(%rbp)
callq 0x34e0
movq -0x4020(%rbp), %rdi
movq -0x4030(%rbp), %rsi
movq -0x4028(%rbp), %rcx
movl $0x20, %edx
callq 0x4890
jmp 0x115d6
leaq -0x3a(%rbp), %rdi
callq 0x32f0
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x4d(%rbp)
leaq -0x3ed0(%rbp), %rax
movq %rax, %rcx
addq $0x3200, %rcx           # imm = 0x3200
movq %rcx, -0x4040(%rbp)
movq %rax, -0x4038(%rbp)
movq -0x4038(%rbp), %rdi
movq %rdi, -0x4048(%rbp)
callq 0x33a0
movq -0x4048(%rbp), %rax
movq -0x4040(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x4038(%rbp)
jne 0x11607
movq $0x0, -0x3ed8(%rbp)
cmpq $0x190, -0x3ed8(%rbp) # imm = 0x190
jae 0x117a1
movq 0x10(%rbp), %rdi
movq -0x3ed8(%rbp), %rax
subq %rax, %rdi
callq 0x11510
movq %rax, %rcx
movq -0x3ed8(%rbp), %rax
movq %rcx, -0xcd0(%rbp,%rax,8)
movq -0x3ed8(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
leaq 0x218a(%rip), %rsi      # 0x1381d
callq 0x3390
jmp 0x1169a
movq -0x3ed8(%rbp), %rax
cmpq 0x10(%rbp), %rax
jbe 0x1172f
movq $0x0, -0x3ee0(%rbp)
movq -0x3ee0(%rbp), %rax
movq -0x3ed8(%rbp), %rcx
subq 0x10(%rbp), %rcx
cmpq %rcx, %rax
jae 0x1172d
movq -0x3ed8(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3e, %esi
callq 0x3170
jmp 0x116ec
jmp 0x116ee
movq -0x3ee0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3ee0(%rbp)
jmp 0x116b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x3a(%rbp), %rdi
callq 0x32f0
jmp 0x11fc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x11f4c
jmp 0x11788
movq $0x0, -0x3ee8(%rbp)
movq -0x3ee8(%rbp), %rax
movq 0x10(%rbp), %rcx
subq -0x3ed8(%rbp), %rcx
cmpq %rcx, %rax
jae 0x11786
movq -0x3ed8(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3c, %esi
callq 0x3170
jmp 0x11770
jmp 0x11772
movq -0x3ee8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3ee8(%rbp)
jmp 0x1173a
jmp 0x11788
jmp 0x1178a
movq -0x3ed8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3ed8(%rbp)
jmp 0x11643
movq $-0x8, -0x3ef0(%rbp)
cmpq $0x8, -0x3ef0(%rbp)
jg 0x11c14
movq 0x10(%rbp), %rax
addq -0x3ef0(%rbp), %rax
movq %rax, -0x3ef8(%rbp)
cmpq $0x0, -0x3ef8(%rbp)
jl 0x117e3
cmpq $0x190, -0x3ef8(%rbp) # imm = 0x190
jb 0x117e8
jmp 0x11bfd
movq $-0x8, -0x3f00(%rbp)
cmpq $0x8, -0x3f00(%rbp)
jg 0x11bfb
cmpq $0x0, -0x3f00(%rbp)
jne 0x11810
jmp 0x11be4
movq -0x3ef8(%rbp), %rax
movq %rax, -0x3f08(%rbp)
movq -0x30(%rbp), %rax
movq -0x3f08(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
je 0x11862
movq -0x3f00(%rbp), %rax
addq -0x3f08(%rbp), %rax
movq %rax, -0x3f08(%rbp)
cmpq $0x0, -0x3f08(%rbp)
jl 0x1185b
cmpq $0x190, -0x3f08(%rbp) # imm = 0x190
jb 0x11860
jmp 0x11be2
jmp 0x1181e
movq $-0x8, -0x3f10(%rbp)
cmpq $0x8, -0x3f10(%rbp)
jg 0x11be0
movq -0x3f08(%rbp), %rax
addq -0x3f10(%rbp), %rax
movq %rax, -0x3f18(%rbp)
cmpq $0x0, -0x3f18(%rbp)
jl 0x118a7
cmpq $0x190, -0x3f18(%rbp) # imm = 0x190
jb 0x118ac
jmp 0x11bc9
movq -0x3ef0(%rbp), %rdi
callq 0x11510
addq $0x2, %rax
movq %rax, -0x4058(%rbp)
movq -0x3f00(%rbp), %rdi
callq 0x11510
movq %rax, %rcx
movq -0x4058(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x4050(%rbp)
movq -0x3f10(%rbp), %rdi
callq 0x11510
movq %rax, %rcx
movq -0x4050(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x3f20(%rbp)
movq -0x3f20(%rbp), %rax
movq -0x3f18(%rbp), %rcx
cmpq -0xcd0(%rbp,%rcx,8), %rax
jae 0x11bc7
movq -0x3f20(%rbp), %rcx
movq -0x3f18(%rbp), %rax
movq %rcx, -0xcd0(%rbp,%rax,8)
leaq -0x3f40(%rbp), %rdi
callq 0x33a0
movq -0x3f18(%rbp), %rax
leaq -0x3ed0(%rbp), %rdi
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x3f40(%rbp), %rsi
callq 0x3350
leaq -0x3f40(%rbp), %rdi
callq 0x3160
cmpq $0x0, -0x3ef0(%rbp)
jle 0x119ca
movq $0x0, -0x3f48(%rbp)
movq -0x3f48(%rbp), %rax
cmpq -0x3ef0(%rbp), %rax
jae 0x119c8
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3e, %esi
callq 0x3170
jmp 0x119b2
jmp 0x119b4
movq -0x3f48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f48(%rbp)
jmp 0x11983
jmp 0x11a21
movq $0x0, -0x3f50(%rbp)
movq -0x3f50(%rbp), %rax
xorl %ecx, %ecx
subq -0x3ef0(%rbp), %rcx
cmpq %rcx, %rax
jae 0x11a1f
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3c, %esi
callq 0x3170
jmp 0x11a09
jmp 0x11a0b
movq -0x3f50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f50(%rbp)
jmp 0x119d5
jmp 0x11a21
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x5b, %esi
callq 0x3170
jmp 0x11a40
cmpq $0x0, -0x3f00(%rbp)
jle 0x11a9c
movq $0x0, -0x3f58(%rbp)
movq -0x3f58(%rbp), %rax
cmpq -0x3f00(%rbp), %rax
jae 0x11a9a
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3e, %esi
callq 0x3170
jmp 0x11a84
jmp 0x11a86
movq -0x3f58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f58(%rbp)
jmp 0x11a55
jmp 0x11af3
movq $0x0, -0x3f60(%rbp)
movq -0x3f60(%rbp), %rax
xorl %ecx, %ecx
subq -0x3f00(%rbp), %rcx
cmpq %rcx, %rax
jae 0x11af1
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3c, %esi
callq 0x3170
jmp 0x11adb
jmp 0x11add
movq -0x3f60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f60(%rbp)
jmp 0x11aa7
jmp 0x11af3
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x5d, %esi
callq 0x3170
jmp 0x11b12
cmpq $0x0, -0x3f10(%rbp)
jle 0x11b6e
movq $0x0, -0x3f68(%rbp)
movq -0x3f68(%rbp), %rax
cmpq -0x3f10(%rbp), %rax
jae 0x11b6c
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3e, %esi
callq 0x3170
jmp 0x11b56
jmp 0x11b58
movq -0x3f68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f68(%rbp)
jmp 0x11b27
jmp 0x11bc5
movq $0x0, -0x3f70(%rbp)
movq -0x3f70(%rbp), %rax
xorl %ecx, %ecx
subq -0x3f10(%rbp), %rcx
cmpq %rcx, %rax
jae 0x11bc3
movq -0x3f18(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rdi
movl $0x3c, %esi
callq 0x3170
jmp 0x11bad
jmp 0x11baf
movq -0x3f70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f70(%rbp)
jmp 0x11b79
jmp 0x11bc5
jmp 0x11bc7
jmp 0x11bc9
movq -0x3f10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f10(%rbp)
jmp 0x1186d
jmp 0x11be2
jmp 0x11be4
movq -0x3f00(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f00(%rbp)
jmp 0x117f3
jmp 0x11bfd
movq -0x3ef0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3ef0(%rbp)
jmp 0x117ac
movq $0x0, -0x3f78(%rbp)
cmpq $0x190, -0x3f78(%rbp) # imm = 0x190
jae 0x11eea
movq -0x3f78(%rbp), %rsi
movq -0xcd0(%rbp,%rsi,8), %rax
movzbl -0x4d(%rbp), %ecx
movq -0x30(%rbp), %rdx
movzbl (%rdx,%rsi), %edx
subl %edx, %ecx
movsbl %cl, %ecx
movl %ecx, %edx
negl %edx
cmovnsl %edx, %ecx
leaq 0x1(%rax,%rcx), %rax
movq %rax, -0x3f80(%rbp)
movq -0x3f78(%rbp), %rax
shlq $0x5, %rax
leaq -0x3ed0(%rbp,%rax), %rsi
leaq -0x3fa0(%rbp), %rdi
callq 0x30d0
jmp 0x11c84
movsbl -0x4d(%rbp), %eax
movq -0x30(%rbp), %rcx
movq -0x3f78(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
subl %ecx, %eax
movb %al, -0x3fa1(%rbp)
movsbl -0x3fa1(%rbp), %eax
cmpl $0x0, %eax
jle 0x11d06
movq $0x0, -0x3fb0(%rbp)
movq -0x3fb0(%rbp), %rax
movsbq -0x3fa1(%rbp), %rcx
cmpq %rcx, %rax
jae 0x11d04
leaq -0x3fa0(%rbp), %rdi
movl $0x2b, %esi
callq 0x3170
jmp 0x11cdd
jmp 0x11cdf
movq -0x3fb0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3fb0(%rbp)
jmp 0x11cb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x11edc
jmp 0x11d56
movq $0x0, -0x3fb8(%rbp)
movq -0x3fb8(%rbp), %rax
movsbl -0x3fa1(%rbp), %edx
xorl %ecx, %ecx
subl %edx, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
jae 0x11d54
leaq -0x3fa0(%rbp), %rdi
movl $0x2d, %esi
callq 0x3170
jmp 0x11d3e
jmp 0x11d40
movq -0x3fb8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3fb8(%rbp)
jmp 0x11d11
jmp 0x11d56
leaq -0x3fa0(%rbp), %rdi
movl $0x2e, %esi
callq 0x3170
jmp 0x11d69
movq -0x3f80(%rbp), %rax
cmpq -0x28(%rbp), %rax
jbe 0x11d85
movl $0x2b, -0x3fbc(%rbp)
jmp 0x11ea9
movq -0x4010(%rbp), %rsi
movq -0x30(%rbp), %rax
movq -0x3f78(%rbp), %rcx
movb (%rax,%rcx), %al
movb %al, -0x3fbd(%rbp)
movb -0x4d(%rbp), %dl
movq -0x30(%rbp), %rax
movq -0x3f78(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x18(%rbp), %rdx
incq %rdx
movq -0x20(%rbp), %rcx
decq %rcx
movq -0x28(%rbp), %r8
movq -0x3f80(%rbp), %rax
subq %rax, %r8
movq -0x30(%rbp), %r9
movq -0x3f78(%rbp), %rdi
movq %rsp, %rax
movq %rdi, (%rax)
leaq -0x3fe0(%rbp), %rdi
callq 0x11530
jmp 0x11dec
leaq -0x3fe0(%rbp), %rdi
callq 0x31b0
movq %rax, -0x3fe8(%rbp)
movb -0x3fbd(%rbp), %dl
movq -0x30(%rbp), %rax
movq -0x3f78(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x3f80(%rbp), %rax
addq -0x3fe8(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x11e93
movq -0x3f80(%rbp), %rax
movq -0x3fe8(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
leaq -0x4008(%rbp), %rdi
leaq -0x3fa0(%rbp), %rsi
leaq -0x3fe0(%rbp), %rdx
callq 0x11fd0
jmp 0x11e58
movq -0x4020(%rbp), %rdi
leaq -0x4008(%rbp), %rsi
callq 0x3350
leaq -0x4008(%rbp), %rdi
callq 0x3160
jmp 0x11e93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x3fe0(%rbp), %rdi
callq 0x3160
jmp 0x11edc
leaq -0x3fe0(%rbp), %rdi
callq 0x3160
movl $0x0, -0x3fbc(%rbp)
leaq -0x3fa0(%rbp), %rdi
callq 0x3160
movl -0x3fbc(%rbp), %eax
testl %eax, %eax
je 0x11ec3
jmp 0x11ec1
jmp 0x11ec5
jmp 0x11ec5
movq -0x3f78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3f78(%rbp)
jmp 0x11c1f
leaq -0x3fa0(%rbp), %rdi
callq 0x3160
jmp 0x11f4c
movb $0x1, -0x39(%rbp)
movl $0x1, -0x3fbc(%rbp)
leaq -0x3ed0(%rbp), %rax
movq %rax, -0x4068(%rbp)
addq $0x3200, %rax           # imm = 0x3200
movq %rax, -0x4060(%rbp)
movq -0x4060(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x4070(%rbp)
callq 0x3160
movq -0x4068(%rbp), %rcx
movq -0x4070(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x4060(%rbp)
jne 0x11f13
testb $0x1, -0x39(%rbp)
jne 0x11fb2
jmp 0x11fa6
leaq -0x3ed0(%rbp), %rax
movq %rax, -0x4080(%rbp)
addq $0x3200, %rax           # imm = 0x3200
movq %rax, -0x4078(%rbp)
movq -0x4078(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x4088(%rbp)
callq 0x3160
movq -0x4080(%rbp), %rcx
movq -0x4088(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x4078(%rbp)
jne 0x11f67
movq -0x4020(%rbp), %rdi
callq 0x3160
jmp 0x11fc4
movq -0x4020(%rbp), %rdi
callq 0x3160
jmp 0x11fb4
movq -0x4018(%rbp), %rax
addq $0x4090, %rsp           # imm = 0x4090
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x34d0
nopl (%rax)