public synchronized long getPreviousPropertyIndex(long index) throws NoSuchIndexException {

		long pageID = getPageID(index);
		short offset = getPageOffset(index);

		ValueStoragePage<T> page = getPage(pageID);

		if (page != null) {
			short prevOffset = page.getPrevious(offset);
			if (prevOffset >= 0) {
				return getIndex(pageID, prevOffset);
			}
		}

		pageID = propertyPageIndex.getPrevious(pageID);

		if (pageID >= 0) {
			page = getPage(pageID);
			if (page != null) {
				short prevOffset = page.getLast();
				if (prevOffset < 0) {
					throw new AssertException(
						"Page (" + pageID +
							") exists but there is no 'last' offset");
				}
				return getIndex(pageID, prevOffset);
			}
		}

		throw NoSuchIndexException.noSuchIndexException;
	}
Get the previous index where a property value exists.
@param index the long representation of an address from which
		to begin the search (exclusive).
@throws NoSuchIndexException when there is no index
		with a property value before the given address.
Ghidra/Framework/Generic/src/main/java/ghidra/util/map/ValueMap.java