code: func CMSketchFromProto(protoSketch *tipb.CMSketch) *CMSketch {
  	if protoSketch == nil {
  		return nil
  	}
  	c := NewCMSketch(int32(len(protoSketch.Rows)), int32(len(protoSketch.Rows[0].Counters)))
  	for i, row := range protoSketch.Rows {
  		c.count = 0
  		for j, counter := range row.Counters {
  			c.table[i][j] = counter
  			c.count = c.count + uint64(counter)
  		}
  	}
  	if len(protoSketch.TopN) == 0 {
  		return c
  	}
  	c.defaultValue = protoSketch.DefaultValue
  	c.topN = make(map[uint64][]*TopNMeta)
  	for _, e := range protoSketch.TopN {
  		h1, h2 := murmur3.Sum128(e.Data)
  		c.topN[h1] = append(c.topN[h1], &TopNMeta{h2, e.Data, e.Count})
  	}
  	return c
  }
docs: // CMSketchFromProto converts CMSketch from its protobuf representation.