             }
         }
     }
-    
+
     private func forEachVertexStartingFrom(_ v: Vertex, _ callback: (Vertex) -> Void) {
         var current = v
         repeat {

        self.lists = p.subpaths.map { self.createListFor(component: $0) }
    }
    
    fileprivate func markEntryExit(_ path: Path, _ nonCrossingComponents: inout [PathComponent]) {
        let fillRule = PathFillRule.winding
        
        // determine the min winding count
        
        // if the vertex at min winding count is inside the other path, then the path must be fully contained
        
        // otherwise subtract that value from all winding counts because the min winding count must be zero
        
        // determine entry / exit from the winding count

        for i in 0..<lists.count {
            var hasCrossing: Bool = false
            
            var windingCount: Int = path.windingCount(lists[i][0].emitPrevious().compute(0.5))
            
            self.forEachVertexInComponent(atIndex: i) { v in
                guard v.isIntersection else {
                    return

            list2.insertIntersectionVertex(vertex2, at: $0.indexedPathLocation2)
        }
        // mark each intersection as either entry or exit
        let useRelativeWinding = (list1 === list2)
        list1.markEntryExit(path2, &nonCrossingComponents1, useRelativeWinding: useRelativeWinding)
        if useRelativeWinding == false {
            list2.markEntryExit(path1, &nonCrossingComponents2, useRelativeWinding: useRelativeWinding)
        }
    }
    
