code: func NewTopic(name string, relatedContent []byte) (topic Topic, err error) {
  	if relatedContent != nil {
  		contentLength := len(relatedContent)
  		if contentLength > TopicLength {
  			contentLength = TopicLength
  			err = ErrTopicTooLong
  		}
  		copy(topic[:], relatedContent[:contentLength])
  	}
  	nameBytes := []byte(name)
  	nameLength := len(nameBytes)
  	if nameLength > TopicLength {
  		nameLength = TopicLength
  		err = ErrTopicTooLong
  	}
  	bitutil.XORBytes(topic[:], topic[:], nameBytes[:nameLength])
  	return topic, err
  }
docs: // NewTopic creates a new topic from a provided name and "related content" byte array,
  // merging the two together.
  // If relatedContent or name are longer than TopicLength, they will be truncated and an error returned
  // name can be an empty string
  // relatedContent can be nil