public static List<ByteSequenceRowObject> getFilteredRowObjects(
			List<FunctionBitPatternInfo> unfilteredInfo, PatternType type,
			ContextRegisterFilter registerFilter, ByteSequenceLengthFilter lengthFilter) {
		Map<String, Integer> byteSeqCounts = new HashMap<String, Integer>();
		Map<String, String> bytesToDisassembly = new HashMap<String, String>();
		int numTotalSeqs = 0;
		for (FunctionBitPatternInfo fInfo : unfilteredInfo) {
			if (failsFilter(fInfo, registerFilter)) {
				continue;
			}
			List<String> byteStrings = getAllByteStringsOfType(fInfo, type);
			FilteredBytesAndDisassembly fAndD =
				getFilteredBytesAndDisassembly(byteStrings, lengthFilter, fInfo, type);

			int numFilteredStrings = fAndD.getFilteredBytes().size();
			for (int i = 0; i < numFilteredStrings; ++i) {
				//only record the disassembly string if it's longer than what is there already
				//this is important for prebyte strings, where sometimes the bytes will have been
				//disassembled by ghidra and sometimes they won't have been
				String currentFilteredByteString = fAndD.getFilteredBytes().get(i);
				String currentDis = bytesToDisassembly.get(currentFilteredByteString);
				List<String> disassembly = fAndD.getDisassembly();
				if (currentDis == null || currentDis.length() < disassembly.get(i).length()) {
					if (!(disassembly.get(i).contains("null"))) {
						bytesToDisassembly.put(currentFilteredByteString, disassembly.get(i));
					}
				}
				if (byteSeqCounts.containsKey(currentFilteredByteString)) {
					Integer count = byteSeqCounts.get(currentFilteredByteString);
					byteSeqCounts.put(currentFilteredByteString, count + 1);
					numTotalSeqs++;
				}
				else {
					byteSeqCounts.put(currentFilteredByteString, Integer.valueOf(1));
					numTotalSeqs++;
				}
			}
		}
		return getRowObjectsForLengthFilteredSeqs(byteSeqCounts, bytesToDisassembly, numTotalSeqs);
	}
Returns the {@link ByteSequenceRowObjects} of {@link PatternType} in {@code unfilteredInfo} which
pass the context register filter and the length filter
 
@param unfilteredInfo information about function starts/pre-starts/returns
@param type desired {@code PatternType}
@param registerFilter {@ContextRegisterFilter} to apply
@param lengthFilter {@ByteSequenceLengthFilter} to apply
@return filtered row objects
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/ByteSequenceRowObject.java