code: func Decode(dst *Hash, src string) error {
  	// Return error if hash string is too long.
  	if len(src) > MaxHashStringSize {
  		return ErrHashStrSize
  	}
  
  	// Hex decoder expects the hash to be a multiple of two.  When not, pad
  	// with a leading zero.
  	var srcBytes []byte
  	if len(src)%2 == 0 {
  		srcBytes = []byte(src)
  	} else {
  		srcBytes = make([]byte, 1+len(src))
  		srcBytes[0] = '0'
  		copy(srcBytes[1:], src)
  	}
  
  	// Hex decode the source bytes to a temporary destination.
  	var reversedHash Hash
  	_, err := hex.Decode(reversedHash[HashSize-hex.DecodedLen(len(srcBytes)):], srcBytes)
  	if err != nil {
  		return err
  	}
  
  	// Reverse copy from the temporary hash to destination.  Because the
  	// temporary was zeroed, the written result will be correctly padded.
  	for i, b := range reversedHash[:HashSize/2] {
  		dst[i], dst[HashSize-1-i] = reversedHash[HashSize-1-i], b
  	}
  
  	return nil
  }
docs: // Decode decodes the byte-reversed hexadecimal string encoding of a Hash to a
  // destination.