public void apply(byte[] buffer, ArrayList<Match> match) {
		SequenceSearchState curstate;
		int subindex;
		for (int offset = 0; offset < buffer.length; ++offset) {
			curstate = this;			// New starting offset -> Root state
			subindex = offset;
			do {
				if (curstate.success != null) {
					curstate.exportSuccess(match, offset);
				}
				if (subindex >= buffer.length) {	// if we've run out of bytes, must restart at next offset
					break;
				}
				curstate = curstate.trans[0xff & buffer[subindex]];	// Perform state transition based on next byte
				subindex += 1;
			}
			while (curstate != null);
		}
	}
Search for patterns in a byte array.  All matches are returned.
@param buffer is the array of bytes to search
@param match is populated with a Match object for each pattern and position that matches
Ghidra/Features/Base/src/main/java/ghidra/util/bytesearch/SequenceSearchState.java