code: func Hash(data []byte, seed uint32) uint32 {
  	// Similar to murmur hash
  	const (
  		m = uint32(0xc6a4a793)
  		r = uint32(24)
  	)
  	var (
  		h = seed ^ (uint32(len(data)) * m)
  		i int
  	)
  
  	for n := len(data) - len(data)%4; i < n; i += 4 {
  		h += binary.LittleEndian.Uint32(data[i:])
  		h *= m
  		h ^= (h >> 16)
  	}
  
  	switch len(data) - i {
  	default:
  		panic("not reached")
  	case 3:
  		h += uint32(data[i+2]) << 16
  		fallthrough
  	case 2:
  		h += uint32(data[i+1]) << 8
  		fallthrough
  	case 1:
  		h += uint32(data[i])
  		h *= m
  		h ^= (h >> r)
  	case 0:
  	}
  
  	return h
  }
docs: // Hash return hash of the given data.