     /// - Parameters:
     ///   - session:    The session containing the stream task that closed reads.
     ///   - streamTask: The stream task that closed reads.
+    @available(iOS 9.0, OSX 10.11, *)
     public func urlSession(_ session: URLSession, readClosedFor streamTask: URLSessionStreamTask) {
         streamTaskOfSessionReadClosed?(streamTask, session)
     }

    public var sessionDidBecomeInvalid: SessionDidBecomeInvalid?
    /// Closure for `urlSession(_:didReceive:completionHandler:)` function in protocol `URLSessionDelegate`.
    public var sessionDidReceiveChallenge: SessionDidReceiveChallenge?
    
    /// Closure for `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)` function in protocol `URLSessionTaskDelegate`.
    public var taskOfSessionWillPerformHTTPRedirection: TaskOfSessionWillPerformHTTPRedirection?

extension SessionDelegate {
    public typealias SessionDidBecomeInvalid                   = ((URLSession, Error?) -> Swift.Void)
    public typealias SessionDidReceiveChallenge                = ((URLSession, URLAuthenticationChallenge, (@escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void)) -> Swift.Void)
    public typealias SessionDidFinishedEvents                  = ((URLSession) -> Swift.Void)
    public typealias TaskOfSessionWillPerformHTTPRedirection   = ((URLSessionTask, URLSession, HTTPURLResponse, URLRequest, @escaping (URLRequest?) -> Swift.Void) -> Swift.Void)
    public typealias TaskOfSessionDidReceiveChallenge          = ((URLSessionTask, URLSession, URLAuthenticationChallenge, @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) -> Swift.Void)
    public typealias TaskOfSessionNeedNewBodyStream            = ((URLSessionTask, URLSession, @escaping (InputStream?) -> Swift.Void) -> Swift.Void)
