class SimpleConnectionPool {
    private final Map<URI, SimpleURIConnectionPool> pools = new ConcurrentHashMap<>();
    private final SimpleConnectionMaker connectionMaker;
    private final long expireTime;
    private final int poolSize;

    public SimpleConnectionPool(long expireTime, int poolSize, SimpleConnectionMaker connectionMaker) {
        this.expireTime = expireTime;
        this.poolSize = poolSize;
        this.connectionMaker = connectionMaker;
    }

    public SimpleConnectionHolder.ConnectionToken borrow(long createConnectionTimeout, boolean isHttp2, URI uri)
        throws RuntimeException
    {<FILL_FUNCTION_BODY>}

    public void restore(SimpleConnectionHolder.ConnectionToken connectionToken) {
        if(pools.containsKey(connectionToken.uri()))
            pools.get(connectionToken.uri()).restore(connectionToken);
    }
}

        if(!pools.containsKey(uri)) {
            synchronized (pools) {
                if (!pools.containsKey(uri))
                    pools.put(uri, new SimpleURIConnectionPool(uri, expireTime, poolSize, connectionMaker));
            }
        }
        return pools.get(uri).borrow(createConnectionTimeout);
    
<no_super_class>