function fnv1a32(str) {
	let hash = FNV_OFFSET_32;
	for (let i = 0, len = str.length; i < len; i++) {
		hash ^= str.charCodeAt(i);
		// Use Math.imul to do c-style 32-bit multiplication and keep only the 32 least significant bits
		hash = Math.imul(hash, FNV_PRIME_32);
	}
	// Force the result to be positive
	return hash & MASK_31;
}
Computes a 32-bit FNV-1a hash value for the given string.
See https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
@param {string} str The input string to hash
@returns {number} - The computed hash value.