code: func (p *Profile) Demangle(d Demangler) error {
  	// Collect names to demangle.
  	var names []string
  	for _, fn := range p.Function {
  		names = append(names, fn.SystemName)
  	}
  
  	// Update profile with demangled names.
  	demangled, err := d(names)
  	if err != nil {
  		return err
  	}
  	for _, fn := range p.Function {
  		if dd, ok := demangled[fn.SystemName]; ok {
  			fn.Name = dd
  		}
  	}
  	return nil
  }
docs: // Demangle attempts to demangle and optionally simplify any function
  // names referenced in the profile. It works on a best-effort basis:
  // it will silently preserve the original names in case of any errors.