// File: ShootMe[P]Klondike-Solver/Solitaire.cpp
// Function: Solitaire::SolveMinimal(int)
SolveResult Solitaire::SolveMinimal(int maxClosedCount) {
	MakeAutoMoves();
	if (movesAvailableCount == 0) { return foundationCount == 52 ? SolvedMinimal : Impossible; }

	int openCount = 1;
	int maxFoundationCount = foundationCount;
	int bestSolutionMoveCount = 512;
	int totalOpenCount = 1;

	int powerOf2 = 1;
	while (maxClosedCount > (1 << (powerOf2 + 2))) {
		powerOf2++;
	}
	HashMap<int> closed(powerOf2);
	stack<shared_ptr<MoveNode>> open[512];
	Move movesToMake[512];
	Move bestSolution[512];
	bestSolution[0].Count = 255;
	int startMoves = MinimumMovesLeft() + MovesMadeNormalizedCount();

	shared_ptr<MoveNode> firstNode = movesMadeCount > 0 ? make_shared<MoveNode>(movesMade[movesMadeCount - 1]) : NULL;
	shared_ptr<MoveNode> node = firstNode;
	for (int i = movesMadeCount - 2; i >= 0; i--) {
		node->Parent = make_shared<MoveNode>(movesMade[i]);
		node = node->Parent;
	}
	open[startMoves].push(firstNode);
	while (closed.Size() < maxClosedCount) {
		//Check for lowest score length
		int index = startMoves;
		while (index < 512 && open[index].size() == 0) { index++; }

		//End solver if no more states
		if (index >= 512) { break; }

		//Get next state to evaluate
		openCount--;
		firstNode = open[index].top();
		open[index].pop();

		//Initialize game to the found state
		ResetGame(drawCount);
		int movesTotal = 0;
		node = firstNode;
		while (node != NULL) {
			movesToMake[movesTotal++] = node->Value;
			node = node->Parent;
		}
		while (movesTotal > 0) {
			MakeMove(movesToMake[--movesTotal]);
		}

		//Make any auto moves
		UpdateAvailableMoves();
		while (movesAvailableCount == 1) {
			Move move = movesAvailable[0];
			MakeMove(move);
			firstNode = make_shared<MoveNode>(move, firstNode);
			UpdateAvailableMoves();
		}
		movesTotal = MovesMadeNormalizedCount();

		//Check for best solution to foundations
		if (foundationCount > maxFoundationCount || (foundationCount == maxFoundationCount && bestSolutionMoveCount > movesTotal)) {
			bestSolutionMoveCount = movesTotal;
			maxFoundationCount = foundationCount;

			//Save solution
			for (int i = 0; i < movesMadeCount; i++) {
				bestSolution[i] = movesMade[i];
			}
			bestSolution[movesMadeCount].Count = 255;
		} else if (maxFoundationCount == 52) {
			//Dont check state if above or equal to current best solution
			int helper = MinimumMovesLeft();
			helper += movesTotal;
			if (helper >= bestSolutionMoveCount) { continue; }
		}

		//Make available moves and add them to be evaulated
		for (int i = 0; i < movesAvailableCount; i++) {
			Move move = movesAvailable[i];
			int movesAdded = MovesAdded(move);

			MakeMove(move);

			movesAdded += movesTotal;
			movesAdded += MinimumMovesLeft();
			if (maxFoundationCount < 52 || movesAdded < bestSolutionMoveCount) {
				int helper = movesAdded;
				helper += 52 - foundationCount + roundCount;
				HashKey key = GameState();
				KeyValue<int> * result = closed.Add(key, movesAdded);
				if (result == NULL || result->Value > movesAdded) {
					node = make_shared<MoveNode>(move, firstNode);
					if (result != NULL) { result->Value = movesAdded; }

					totalOpenCount++;
					openCount++;
					open[helper].push(node);
				}
			}

			UndoMove();
		}
	}

	//Reset game to best solution found
	ResetGame(drawCount);
	for (int i = 0; bestSolution[i].Count < 255; i++) {
		MakeMove(bestSolution[i]);
	}
	return closed.Size() >= maxClosedCount ? (maxFoundationCount == 52 ? SolvedMayNotBeMinimal : CouldNotComplete) : (maxFoundationCount == 52 ? SolvedMinimal : Impossible);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb200, %rsp           # imm = 0xB200
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0xb128(%rbp)
callq 0x9260
movq -0xb128(%rbp), %rax
cmpl $0x0, 0x1910(%rax)
jne 0xac64
movq -0xb128(%rbp), %rax
movl 0x190c(%rax), %edx
xorl %eax, %eax
movl $0x1, %ecx
cmpl $0x34, %edx
cmovel %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0xb6f7
movq -0xb128(%rbp), %rax
movl $0x1, -0x18(%rbp)
movl 0x190c(%rax), %eax
movl %eax, -0x1c(%rbp)
movl $0x200, -0x20(%rbp)     # imm = 0x200
movl $0x1, -0x24(%rbp)
movl $0x1, -0x28(%rbp)
movl -0x14(%rbp), %eax
movl -0x28(%rbp), %ecx
addl $0x2, %ecx
movl $0x1, %edx
shll %cl, %edx
movl %edx, %ecx
cmpl %ecx, %eax
jle 0xacb1
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0xac90
movl -0x28(%rbp), %esi
leaq -0x48(%rbp), %rdi
callq 0xf2e0
leaq -0xa050(%rbp), %rax
movq %rax, -0xb140(%rbp)
movq %rax, %rcx
addq $0xa000, %rcx           # imm = 0xA000
movq %rcx, -0xb138(%rbp)
movq %rax, -0xb130(%rbp)
movq -0xb130(%rbp), %rdi
movq %rdi, -0xb148(%rbp)
callq 0xede0
jmp 0xacf8
movq -0xb138(%rbp), %rcx
movq -0xb148(%rbp), %rax
addq $0x50, %rax
cmpq %rcx, %rax
movq %rax, -0xb130(%rbp)
jne 0xace3
leaq -0xa860(%rbp), %rax
movq %rax, %rcx
addq $0x800, %rcx            # imm = 0x800
movq %rcx, -0xb158(%rbp)
movq %rax, -0xb150(%rbp)
movq -0xb150(%rbp), %rdi
movq %rdi, -0xb160(%rbp)
callq 0x5900
jmp 0xad4a
movq -0xb158(%rbp), %rcx
movq -0xb160(%rbp), %rax
addq $0x4, %rax
cmpq %rcx, %rax
movq %rax, -0xb150(%rbp)
jne 0xad35
leaq -0xb060(%rbp), %rax
movq %rax, %rcx
addq $0x800, %rcx            # imm = 0x800
movq %rcx, -0xb170(%rbp)
movq %rax, -0xb168(%rbp)
movq -0xb168(%rbp), %rdi
movq %rdi, -0xb178(%rbp)
callq 0x5900
jmp 0xad9c
movq -0xb170(%rbp), %rcx
movq -0xb178(%rbp), %rax
addq $0x4, %rax
cmpq %rcx, %rax
movq %rax, -0xb168(%rbp)
jne 0xad87
movq -0xb128(%rbp), %rdi
movb $-0x1, -0xb05e(%rbp)
callq 0x8130
movl %eax, -0xb17c(%rbp)
jmp 0xadd5
movq -0xb128(%rbp), %rdi
callq 0x7f50
movl %eax, -0xb180(%rbp)
jmp 0xade9
movq -0xb128(%rbp), %rax
movl -0xb180(%rbp), %edx
movl -0xb17c(%rbp), %ecx
addl %edx, %ecx
movl %ecx, -0xb064(%rbp)
cmpl $0x0, 0x1914(%rax)
jle 0xae33
movq -0xb128(%rbp), %rax
movl 0x1914(%rax), %ecx
decl %ecx
movslq %ecx, %rcx
leaq (%rax,%rcx,4), %rsi
leaq -0xb078(%rbp), %rdi
callq 0xf6b0
jmp 0xae31
jmp 0xae43
leaq -0xb078(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5ab0
leaq -0xb088(%rbp), %rdi
leaq -0xb078(%rbp), %rsi
callq 0xf490
movq -0xb128(%rbp), %rax
movl 0x1914(%rax), %eax
subl $0x2, %eax
movl %eax, -0xb08c(%rbp)
cmpl $0x0, -0xb08c(%rbp)
jl 0xaf92
movq -0xb128(%rbp), %rax
movslq -0xb08c(%rbp), %rcx
leaq (%rax,%rcx,4), %rsi
leaq -0xb0a0(%rbp), %rdi
callq 0xf6b0
jmp 0xae99
leaq -0xb088(%rbp), %rdi
callq 0xf020
movq %rax, %rdi
leaq -0xb0a0(%rbp), %rsi
callq 0x5ad0
leaq -0xb0a0(%rbp), %rdi
callq 0x5b00
leaq -0xb088(%rbp), %rdi
callq 0xf020
movq %rax, %rsi
leaq -0xb088(%rbp), %rdi
callq 0x5b20
movl -0xb08c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xb08c(%rbp)
jmp 0xae6c
movq -0xb140(%rbp), %rcx
movq %rax, %rsi
movq -0xb148(%rbp), %rax
movq %rsi, -0xa058(%rbp)
movl %edx, -0xa05c(%rbp)
cmpq %rax, %rcx
movq %rax, -0xb188(%rbp)
je 0xaf47
movq -0xb188(%rbp), %rdi
addq $-0x50, %rdi
movq %rdi, -0xb190(%rbp)
callq 0xee10
movq -0xb140(%rbp), %rcx
movq -0xb190(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xb188(%rbp)
jne 0xaf16
jmp 0xb6ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa058(%rbp)
movl %eax, -0xa05c(%rbp)
jmp 0xb69e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa058(%rbp)
movl %eax, -0xa05c(%rbp)
leaq -0xb088(%rbp), %rdi
callq 0x5b00
leaq -0xb078(%rbp), %rdi
callq 0x5b00
jmp 0xb69e
movslq -0xb064(%rbp), %rax
leaq (%rax,%rax,4), %rax
shlq $0x4, %rax
leaq -0xa050(%rbp,%rax), %rdi
leaq -0xb078(%rbp), %rsi
callq 0xf2b0
jmp 0xafb7
jmp 0xafb9
leaq -0x48(%rbp), %rdi
callq 0xee50
movl %eax, -0xb194(%rbp)
jmp 0xafca
movl -0xb194(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xb56a
movl -0xb064(%rbp), %eax
movl %eax, -0xb0a4(%rbp)
xorl %eax, %eax
cmpl $0x200, -0xb0a4(%rbp)   # imm = 0x200
movb %al, -0xb195(%rbp)
jge 0xb032
movslq -0xb0a4(%rbp), %rax
leaq (%rax,%rax,4), %rax
shlq $0x4, %rax
leaq -0xa050(%rbp,%rax), %rdi
callq 0xeea0
movq %rax, -0xb1a0(%rbp)
jmp 0xb01e
movq -0xb1a0(%rbp), %rax
cmpq $0x0, %rax
sete %al
movb %al, -0xb195(%rbp)
movb -0xb195(%rbp), %al
testb $0x1, %al
jne 0xb03e
jmp 0xb04f
movl -0xb0a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0a4(%rbp)
jmp 0xafe5
cmpl $0x200, -0xb0a4(%rbp)   # imm = 0x200
jl 0xb060
jmp 0xb56a
movl -0x18(%rbp), %eax
decl %eax
movl %eax, -0x18(%rbp)
movslq -0xb0a4(%rbp), %rax
leaq (%rax,%rax,4), %rax
shlq $0x4, %rax
leaq -0xa050(%rbp,%rax), %rdi
callq 0xefb0
movq %rax, -0xb1a8(%rbp)
jmp 0xb08d
movq -0xb1a8(%rbp), %rsi
leaq -0xb078(%rbp), %rdi
callq 0x5b20
movslq -0xb0a4(%rbp), %rax
leaq (%rax,%rax,4), %rax
shlq $0x4, %rax
leaq -0xa050(%rbp,%rax), %rdi
callq 0xefd0
jmp 0xb0be
movq -0xb128(%rbp), %rdi
movl 0x1904(%rdi), %esi
callq 0x99e0
jmp 0xb0d2
movl $0x0, -0xb0a8(%rbp)
leaq -0xb088(%rbp), %rdi
leaq -0xb078(%rbp), %rsi
callq 0x5b20
leaq -0xb088(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xeff0
testb $0x1, %al
jne 0xb105
jmp 0xb14e
leaq -0xb088(%rbp), %rdi
callq 0xf020
movq %rax, %rcx
movl -0xb0a8(%rbp), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, -0xb0a8(%rbp)
cltq
movl 0x10(%rcx), %ecx
movl %ecx, -0xa860(%rbp,%rax,4)
leaq -0xb088(%rbp), %rdi
callq 0xf020
movq %rax, %rsi
leaq -0xb088(%rbp), %rdi
callq 0x5b20
jmp 0xb0ef
jmp 0xb150
cmpl $0x0, -0xb0a8(%rbp)
jle 0xb18d
movq -0xb128(%rbp), %rdi
movslq -0xb0a8(%rbp), %rax
movl %eax, %ecx
decl %ecx
movl %ecx, -0xb0a8(%rbp)
movl -0xa864(%rbp,%rax,4), %eax
movl %eax, -0xb0ac(%rbp)
movl -0xb0ac(%rbp), %esi
callq 0x7150
jmp 0xb18b
jmp 0xb150
movq -0xb128(%rbp), %rdi
callq 0x7380
jmp 0xb19b
jmp 0xb19d
movq -0xb128(%rbp), %rax
cmpl $0x1, 0x1910(%rax)
jne 0xb232
movq -0xb128(%rbp), %rdi
movl 0x1874(%rdi), %eax
movl %eax, -0xb0b0(%rbp)
movl -0xb0b0(%rbp), %eax
movl %eax, -0xb0b4(%rbp)
movl -0xb0b4(%rbp), %esi
callq 0x7150
jmp 0xb1dd
leaq -0xb0c8(%rbp), %rdi
leaq -0xb0b0(%rbp), %rsi
leaq -0xb078(%rbp), %rdx
callq 0xf040
jmp 0xb1f9
leaq -0xb078(%rbp), %rdi
leaq -0xb0c8(%rbp), %rsi
movq %rsi, -0xb1b0(%rbp)
callq 0x5ad0
movq -0xb1b0(%rbp), %rdi
callq 0x5b00
movq -0xb128(%rbp), %rdi
callq 0x7380
jmp 0xb22d
jmp 0xb19d
movq -0xb128(%rbp), %rdi
callq 0x7f50
movl %eax, -0xb1b4(%rbp)
jmp 0xb246
movq -0xb128(%rbp), %rax
movl -0xb1b4(%rbp), %ecx
movl %ecx, -0xb0a8(%rbp)
movl 0x190c(%rax), %eax
cmpl -0x1c(%rbp), %eax
jg 0xb289
movq -0xb128(%rbp), %rax
movl 0x190c(%rax), %eax
cmpl -0x1c(%rbp), %eax
jne 0xb309
movl -0x20(%rbp), %eax
cmpl -0xb0a8(%rbp), %eax
jle 0xb309
movq -0xb128(%rbp), %rax
movl -0xb0a8(%rbp), %ecx
movl %ecx, -0x20(%rbp)
movl 0x190c(%rax), %eax
movl %eax, -0x1c(%rbp)
movl $0x0, -0xb0cc(%rbp)
movq -0xb128(%rbp), %rcx
movl -0xb0cc(%rbp), %eax
cmpl 0x1914(%rcx), %eax
jge 0xb2f1
movq -0xb128(%rbp), %rcx
movslq -0xb0cc(%rbp), %rdx
movslq -0xb0cc(%rbp), %rax
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0xb060(%rbp,%rax,4)
movl -0xb0cc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0cc(%rbp)
jmp 0xb2ac
movq -0xb128(%rbp), %rax
movslq 0x1914(%rax), %rax
movb $-0x1, -0xb05e(%rbp,%rax,4)
jmp 0xb355
cmpl $0x34, -0x1c(%rbp)
jne 0xb353
movq -0xb128(%rbp), %rdi
callq 0x8130
movl %eax, -0xb1b8(%rbp)
jmp 0xb323
movl -0xb1b8(%rbp), %eax
movl %eax, -0xb0d0(%rbp)
movl -0xb0a8(%rbp), %eax
addl -0xb0d0(%rbp), %eax
movl %eax, -0xb0d0(%rbp)
movl -0xb0d0(%rbp), %eax
cmpl -0x20(%rbp), %eax
jl 0xb351
jmp 0xafb9
jmp 0xb353
jmp 0xb355
movl $0x0, -0xb0d4(%rbp)
movq -0xb128(%rbp), %rcx
movl -0xb0d4(%rbp), %eax
cmpl 0x1910(%rcx), %eax
jge 0xb565
movq -0xb128(%rbp), %rdi
movslq -0xb0d4(%rbp), %rax
movl 0x1874(%rdi,%rax,4), %eax
movl %eax, -0xb0d8(%rbp)
leaq -0xb0d8(%rbp), %rsi
callq 0x8480
movl %eax, -0xb1bc(%rbp)
jmp 0xb3a7
movq -0xb128(%rbp), %rdi
movl -0xb1bc(%rbp), %eax
movl %eax, -0xb0dc(%rbp)
movl -0xb0d8(%rbp), %eax
movl %eax, -0xb0e0(%rbp)
movl -0xb0e0(%rbp), %esi
callq 0x7150
jmp 0xb3d3
movq -0xb128(%rbp), %rdi
movl -0xb0a8(%rbp), %ecx
movl -0xb0dc(%rbp), %eax
addl %ecx, %eax
movl %eax, -0xb0dc(%rbp)
callq 0x8130
movl %eax, -0xb1c0(%rbp)
jmp 0xb3fb
movl -0xb1c0(%rbp), %eax
addl -0xb0dc(%rbp), %eax
movl %eax, -0xb0dc(%rbp)
cmpl $0x34, -0x1c(%rbp)
jl 0xb422
movl -0xb0dc(%rbp), %eax
cmpl -0x20(%rbp), %eax
jge 0xb541
movq -0xb128(%rbp), %rsi
movl -0xb0dc(%rbp), %eax
movl %eax, -0xb0e4(%rbp)
movl 0x1908(%rsi), %edx
movl 0x190c(%rsi), %eax
subl %eax, %edx
movl -0xb0e4(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x34(%rax,%rcx), %eax
movl %eax, -0xb0e4(%rbp)
leaq -0xb0f9(%rbp), %rdi
callq 0x8600
jmp 0xb465
leaq -0x48(%rbp), %rdi
leaq -0xb0f9(%rbp), %rsi
leaq -0xb0dc(%rbp), %rdx
callq 0xf0c0
movq %rax, -0xb1c8(%rbp)
jmp 0xb485
movq -0xb1c8(%rbp), %rax
movq %rax, -0xb108(%rbp)
cmpq $0x0, -0xb108(%rbp)
je 0xb4b3
movq -0xb108(%rbp), %rax
movl 0x20(%rax), %eax
cmpl -0xb0dc(%rbp), %eax
jle 0xb53f
leaq -0xb118(%rbp), %rdi
leaq -0xb0d8(%rbp), %rsi
leaq -0xb078(%rbp), %rdx
callq 0xf040
jmp 0xb4cf
leaq -0xb088(%rbp), %rdi
leaq -0xb118(%rbp), %rsi
callq 0x5ad0
leaq -0xb118(%rbp), %rdi
callq 0x5b00
cmpq $0x0, -0xb108(%rbp)
je 0xb508
movl -0xb0dc(%rbp), %ecx
movq -0xb108(%rbp), %rax
movl %ecx, 0x20(%rax)
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movl -0x18(%rbp), %eax
incl %eax
movl %eax, -0x18(%rbp)
movslq -0xb0e4(%rbp), %rax
leaq (%rax,%rax,4), %rax
shlq $0x4, %rax
leaq -0xa050(%rbp,%rax), %rdi
leaq -0xb088(%rbp), %rsi
callq 0xf2b0
jmp 0xb53d
jmp 0xb53f
jmp 0xb541
movq -0xb128(%rbp), %rdi
callq 0x89a0
jmp 0xb54f
jmp 0xb551
movl -0xb0d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0d4(%rbp)
jmp 0xb35f
jmp 0xafb9
movq -0xb128(%rbp), %rdi
movl 0x1904(%rdi), %esi
callq 0x99e0
jmp 0xb57e
movl $0x0, -0xb11c(%rbp)
movslq -0xb11c(%rbp), %rax
movzbl -0xb05e(%rbp,%rax,4), %eax
cmpl $0xff, %eax
jge 0xb5d9
movq -0xb128(%rbp), %rdi
movslq -0xb11c(%rbp), %rax
movl -0xb060(%rbp,%rax,4), %eax
movl %eax, -0xb120(%rbp)
movl -0xb120(%rbp), %esi
callq 0x7150
jmp 0xb5c6
jmp 0xb5c8
movl -0xb11c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb11c(%rbp)
jmp 0xb588
leaq -0x48(%rbp), %rdi
callq 0xee50
movl %eax, -0xb1cc(%rbp)
jmp 0xb5ea
movl -0xb1cc(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xb610
movl -0x1c(%rbp), %edx
movl $0xfffffffe, %eax       # imm = 0xFFFFFFFE
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
cmpl $0x34, %edx
cmovel %ecx, %eax
movl %eax, -0xb1d0(%rbp)
jmp 0xb626
movl -0x1c(%rbp), %edx
xorl %eax, %eax
movl $0x1, %ecx
cmpl $0x34, %edx
cmovel %ecx, %eax
movl %eax, -0xb1d0(%rbp)
movl -0xb1d0(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0xb088(%rbp), %rdi
callq 0x5b00
leaq -0xb078(%rbp), %rdi
callq 0x5b00
leaq -0xa050(%rbp), %rax
movq %rax, -0xb1e0(%rbp)
addq $0xa000, %rax           # imm = 0xA000
movq %rax, -0xb1d8(%rbp)
movq -0xb1d8(%rbp), %rdi
addq $-0x50, %rdi
movq %rdi, -0xb1e8(%rbp)
callq 0xee10
movq -0xb1e0(%rbp), %rcx
movq -0xb1e8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xb1d8(%rbp)
jne 0xb662
leaq -0x48(%rbp), %rdi
callq 0xf620
jmp 0xb6f7
leaq -0xa050(%rbp), %rax
movq %rax, -0xb1f8(%rbp)
addq $0xa000, %rax           # imm = 0xA000
movq %rax, -0xb1f0(%rbp)
movq -0xb1f0(%rbp), %rdi
addq $-0x50, %rdi
movq %rdi, -0xb200(%rbp)
callq 0xee10
movq -0xb1f8(%rbp), %rcx
movq -0xb200(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xb1f0(%rbp)
jne 0xb6b9
jmp 0xb6ec
leaq -0x48(%rbp), %rdi
callq 0xf620
jmp 0xb703
movl -0x4(%rbp), %eax
addq $0xb200, %rsp           # imm = 0xB200
popq %rbp
retq
movq -0xa058(%rbp), %rdi
callq 0x33d0
nop