private void calculate() throws MemoryAccessException, CancelledException {
		// Try one pass with range of comparatively long sequences, 5 to 10 instructions, with no specialized constraints
		// With very similar functions, this should match the bulk of the instructions
		srcStore.calcHashes(5, 10, false, false, hashCalc);
		srcStore.insertHashes();
		destStore.calcHashes(5, 10, false, false, hashCalc);
		destStore.insertHashes();

		findMatches();

		if (srcStore.numMatchedInstructions() == srcStore.getTotalInstructions())
			return;
		if (destStore.numMatchedInstructions() == destStore.getTotalInstructions())
			return;

		// Now try multiple passes of 3 and 4 long n-grams hopefully filling in a lot of small holes in our match
		// given a scaffolding of previously matched basic blocks
		runPasses(3, 4, true, true, 10);

		if (srcStore.numMatchedInstructions() == srcStore.getTotalInstructions())
			return;
		if (destStore.numMatchedInstructions() == destStore.getTotalInstructions())
			return;

		// Repeat with big n-grams
		int curMatch = srcStore.numMatchedInstructions();
		runPasses(5, 10, false, false, 3);

		if (srcStore.numMatchedInstructions() == curMatch)
			return;		// No progress
		if (srcStore.numMatchedInstructions() == srcStore.getTotalInstructions())
			return;
		if (destStore.numMatchedInstructions() == destStore.getTotalInstructions())
			return;

		// Repeat with small n-grams
		runPasses(3, 4, true, true, 10);
	}
High-level control of the matching passes. Tries different sequence generation configurations,
terminating early if all instructions are matched.
@throws MemoryAccessException
@throws CancelledException
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java