 public final class ContextToken: Hashable {
 
     public let context: Context
-    fileprivate weak var contextAware: ContextAware?
+    fileprivate weak var contextNode: ContextNode?
 
     fileprivate init(context: Context) {
         self.context = context

extension UIViewController: ContextPreloadable {

    public func contextPreload() {
        guard let contextAware = self as? ContextAware, contextAware.contextToken == nil else { return }
        self.loadViewIfNeeded()
    }
}

    }
}

// MARK: - ContextNodeContainer

public protocol ContextNodeContainer {

    var childContextObjects: [Any] { get }
}

extension UIViewController: ContextNodeContainer {

    public var childContextObjects: [Any] {
        return self.childViewControllers.map({ $0 })
    }
}

extension UIView: ContextNodeContainer {

    public var childContextObjects: [Any] {
        return self.subviews.map({ $0 })
    }
}
