code: func serializeBundle(b ConfigBundle) ([]byte, error) {
  	keys := make([]string, 0, len(b))
  	for k := range b {
  		keys = append(keys, k)
  	}
  	sort.Strings(keys)
  
  	items := make([]blobWithType, 0, len(b))
  	for _, k := range keys {
  		v := b[k]
  		blob, err := proto.Marshal(v)
  		if err != nil {
  			return nil, err
  		}
  		items = append(items, blobWithType{
  			Path: k,
  			Kind: proto.MessageName(v),
  			Blob: blob,
  		})
  	}
  
  	out := bytes.Buffer{}
  	if err := gob.NewEncoder(&out).Encode(items); err != nil {
  		return nil, err
  	}
  	return out.Bytes(), nil
  }
docs: // serializeBundle deterministically converts ConfigBundle into a byte blob.
  //
  // The byte blob references proto message names to know how to deserialize them
  // later.