code: @Builder(builderMethodName = "throttleInputStream", builderClassName = "InputStreamThrottler")
    private ThrottledInputStream doThrottleInputStream(InputStream inputStream, URI sourceURI, URI targetURI) {
      Preconditions.checkNotNull(inputStream, "InputStream cannot be null.");
  
      Limiter limiter = new NoopLimiter();
      if (sourceURI != null && targetURI != null) {
        StreamCopierSharedLimiterKey key = new StreamCopierSharedLimiterKey(sourceURI, targetURI);
        try {
          limiter = new MultiLimiter(limiter, this.broker.getSharedResource(new SharedLimiterFactory<S>(),
              key));
        } catch (NotConfiguredException nce) {
          log.warn("Could not create a Limiter for key " + key, nce);
        }
      } else {
        log.info("Not throttling input stream because source or target URIs are not defined.");
      }
  
      Optional<MeteredInputStream> meteredStream = MeteredInputStream.findWrappedMeteredInputStream(inputStream);
      if (!meteredStream.isPresent()) {
        meteredStream = Optional.of(MeteredInputStream.builder().in(inputStream).build());
        inputStream = meteredStream.get();
      }
  
      return new ThrottledInputStream(inputStream, limiter, meteredStream.get());
    }
docs: Throttles an {@link InputStream} if throttling is configured.
  @param inputStream {@link InputStream} to throttle.
  @param sourceURI used for selecting the throttling policy.
  @param targetURI used for selecting the throttling policy.