full version before hashing implementation