code: func (c *SolverManager) chooseSolver(authz acme.Authorization) solver {
  	// Allow to have a deterministic challenge order
  	sort.Sort(byType(authz.Challenges))
  
  	domain := challenge.GetTargetedDomain(authz)
  	for _, chlg := range authz.Challenges {
  		if solvr, ok := c.solvers[challenge.Type(chlg.Type)]; ok {
  			log.Infof("[%s] acme: use %s solver", domain, chlg.Type)
  			return solvr
  		}
  		log.Infof("[%s] acme: Could not find solver for: %s", domain, chlg.Type)
  	}
  
  	return nil
  }
docs: // Checks all challenges from the server in order and returns the first matching solver.