code: func (pos *Position) Hash() [16]byte {
  	sq := "-"
  	if pos.enPassantSquare != NoSquare {
  		sq = pos.enPassantSquare.String()
  	}
  	s := pos.turn.String() + ":" + pos.castleRights.String() + ":" + sq
  	for _, p := range allPieces {
  		bb := pos.board.bbForPiece(p)
  		s += ":" + strconv.FormatUint(uint64(bb), 16)
  	}
  	return md5.Sum([]byte(s))
  }
docs: // Hash returns a unique hash of the position