code: func (c *Config) Clone() *Config {
  	c.mutex.Lock()
  	defer c.mutex.Unlock()
  
  	return &Config{
  		ServerName: c.ServerName,
  
  		SendSessionTickets: c.SendSessionTickets,
  		TicketLifetime:     c.TicketLifetime,
  		TicketLen:          c.TicketLen,
  		EarlyDataLifetime:  c.EarlyDataLifetime,
  		AllowEarlyData:     c.AllowEarlyData,
  		RequireCookie:      c.RequireCookie,
  		CookieHandler:      c.CookieHandler,
  		CookieProtector:    c.CookieProtector,
  		ExtensionHandler:   c.ExtensionHandler,
  		RequireClientAuth:  c.RequireClientAuth,
  		Time:               c.Time,
  		RootCAs:            c.RootCAs,
  		InsecureSkipVerify: c.InsecureSkipVerify,
  
  		Certificates:          c.Certificates,
  		VerifyPeerCertificate: c.VerifyPeerCertificate,
  		CipherSuites:          c.CipherSuites,
  		Groups:                c.Groups,
  		SignatureSchemes:      c.SignatureSchemes,
  		NextProtos:            c.NextProtos,
  		PSKs:                  c.PSKs,
  		PSKModes:              c.PSKModes,
  		NonBlocking:           c.NonBlocking,
  		UseDTLS:               c.UseDTLS,
  	}
  }
docs: // Clone returns a shallow clone of c. It is safe to clone a Config that is
  // being used concurrently by a TLS client or server.