code: ChallengeHandler lookup(ChallengeRequest challengeRequest) {
          ChallengeHandler result = null;
          String location = challengeRequest.getLocation();
          if (location != null) {
              Node<ChallengeHandler,UriElement> resultNode = findBestMatchingNode(location);
  
              //
              // If we found an exact or wildcard match, try to find a handler
              // for the requested challenge.
              //
              if (resultNode != null) {
                  List<ChallengeHandler> handlers = resultNode.getValues();
                  if (handlers != null) {
                      for (ChallengeHandler challengeHandler : handlers) {
                          if (challengeHandler.canHandle(challengeRequest)) {
                              result = challengeHandler;
                              break;
                          }
                      }
                  }
              }
          }
          return result;
      }
docs: Locate a challenge handler factory to serve the given location and challenge type.
  
  
  @param challengeRequest A challenge string from the server.
  @return a challenge handler registered to handle the challenge at the location,
  or <code>null</code> if none could be found.