@itwin/core-geometry 5.2.4 → 5.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  10. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  14. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  16. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  17. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  19. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  21. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  25. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  26. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  27. package/lib/cjs/core-geometry.js.map +1 -1
  28. package/lib/cjs/curve/Arc3d.js.map +1 -1
  29. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  30. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  31. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  32. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  33. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  34. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  35. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  36. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  37. package/lib/cjs/curve/CurveOps.js.map +1 -1
  38. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  39. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  40. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  41. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  42. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  43. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  44. package/lib/cjs/curve/LineString3d.js.map +1 -1
  45. package/lib/cjs/curve/Loop.js.map +1 -1
  46. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  47. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  48. package/lib/cjs/curve/Path.js.map +1 -1
  49. package/lib/cjs/curve/PointString3d.js.map +1 -1
  50. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  51. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  52. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  53. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  54. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  55. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  56. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  57. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  58. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  59. package/lib/cjs/curve/RegionOps.js.map +1 -1
  60. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  61. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  62. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  63. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  64. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  66. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  84. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  85. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  86. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  87. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  88. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  89. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  90. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  91. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  92. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  93. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  94. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  95. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  96. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  97. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  98. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  99. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  100. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  101. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  102. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  103. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  104. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  105. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  106. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  107. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  108. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  109. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  110. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  111. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  112. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  113. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  114. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  115. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  116. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  117. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  118. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  119. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  120. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  121. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  122. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  123. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  124. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  125. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  126. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  127. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  128. package/lib/cjs/geometry3d/Range.js.map +1 -1
  129. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  130. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  132. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  133. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  134. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  135. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  136. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  137. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  138. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  139. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  140. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  141. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  142. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  143. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  144. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  145. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  146. package/lib/cjs/numerics/Complex.js.map +1 -1
  147. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  148. package/lib/cjs/numerics/Newton.js.map +1 -1
  149. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  150. package/lib/cjs/numerics/PolarData.js.map +1 -1
  151. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  152. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  153. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  154. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  155. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  156. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  157. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  158. package/lib/cjs/polyface/AuxData.js.map +1 -1
  159. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  160. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  161. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  162. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  163. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  164. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  165. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  166. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  167. package/lib/cjs/polyface/Polyface.js.map +1 -1
  168. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  169. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  170. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  171. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  172. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  173. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  174. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  175. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  176. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  177. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  178. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  179. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  180. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  181. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  182. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  183. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  184. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  185. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  186. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  187. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  188. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  189. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  190. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  191. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  192. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  193. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  194. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  195. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  196. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  197. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  198. package/lib/cjs/solid/Box.js.map +1 -1
  199. package/lib/cjs/solid/Cone.js.map +1 -1
  200. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  201. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  202. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  203. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  204. package/lib/cjs/solid/Sphere.js.map +1 -1
  205. package/lib/cjs/solid/SweepContour.js.map +1 -1
  206. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  207. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  208. package/lib/cjs/topology/Graph.js.map +1 -1
  209. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  210. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  211. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  212. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  213. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  214. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  215. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  216. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  217. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  218. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  219. package/lib/cjs/topology/MaskManager.js.map +1 -1
  220. package/lib/cjs/topology/Merging.js.map +1 -1
  221. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  222. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  223. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  224. package/lib/cjs/topology/Triangulation.js.map +1 -1
  225. package/lib/cjs/topology/Voronoi.js.map +1 -1
  226. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  227. package/lib/esm/Constant.js.map +1 -1
  228. package/lib/esm/Geometry.js.map +1 -1
  229. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  230. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  231. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  232. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  233. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  234. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  235. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  236. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  237. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  238. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  239. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  240. package/lib/esm/bspline/KnotVector.js.map +1 -1
  241. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  242. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  243. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  244. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  245. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  246. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  247. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  248. package/lib/esm/clipping/ClipVector.js.map +1 -1
  249. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  250. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  251. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  252. package/lib/esm/core-geometry.js.map +1 -1
  253. package/lib/esm/curve/Arc3d.js.map +1 -1
  254. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  255. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  256. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  257. package/lib/esm/curve/CurveCollection.js.map +1 -1
  258. package/lib/esm/curve/CurveCurve.js.map +1 -1
  259. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  260. package/lib/esm/curve/CurveFactory.js.map +1 -1
  261. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  262. package/lib/esm/curve/CurveOps.js.map +1 -1
  263. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  264. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  265. package/lib/esm/curve/CurveTypes.js.map +1 -1
  266. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  267. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  268. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  269. package/lib/esm/curve/LineString3d.js.map +1 -1
  270. package/lib/esm/curve/Loop.js.map +1 -1
  271. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  272. package/lib/esm/curve/ParityRegion.js.map +1 -1
  273. package/lib/esm/curve/Path.js.map +1 -1
  274. package/lib/esm/curve/PointString3d.js.map +1 -1
  275. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  276. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  277. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  278. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  279. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  280. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  281. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  282. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  283. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  284. package/lib/esm/curve/RegionOps.js.map +1 -1
  285. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  286. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  287. package/lib/esm/curve/UnionRegion.js.map +1 -1
  288. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  289. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  290. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  291. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  292. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  293. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  294. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  295. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  296. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  297. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  298. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  299. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  300. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  301. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  302. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  303. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  304. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  305. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  306. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  307. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  308. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  309. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  310. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  311. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  312. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  313. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  314. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  315. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  316. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  317. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  318. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  319. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  320. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  321. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  322. package/lib/esm/geometry3d/Angle.js.map +1 -1
  323. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  324. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  325. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  326. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  327. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  328. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  329. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  330. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  331. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  332. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  333. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  334. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  335. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  336. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  337. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  338. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  339. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  340. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  341. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  342. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  343. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  344. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  345. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  346. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  347. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  348. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  349. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  350. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  351. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  352. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  353. package/lib/esm/geometry3d/Range.js.map +1 -1
  354. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  355. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  356. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  357. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  358. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  359. package/lib/esm/geometry3d/Transform.js.map +1 -1
  360. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  361. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  362. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  363. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  364. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  365. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  366. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  367. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  368. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  369. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  370. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  371. package/lib/esm/numerics/Complex.js.map +1 -1
  372. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  373. package/lib/esm/numerics/Newton.js.map +1 -1
  374. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  375. package/lib/esm/numerics/PolarData.js.map +1 -1
  376. package/lib/esm/numerics/Polynomials.js.map +1 -1
  377. package/lib/esm/numerics/Quadrature.js.map +1 -1
  378. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  379. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  380. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  381. package/lib/esm/numerics/UnionFind.js.map +1 -1
  382. package/lib/esm/numerics/UsageSums.js.map +1 -1
  383. package/lib/esm/polyface/AuxData.js.map +1 -1
  384. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  385. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  386. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  387. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  388. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  389. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  390. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  391. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  392. package/lib/esm/polyface/Polyface.js.map +1 -1
  393. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  394. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  395. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  396. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  397. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  398. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  399. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  400. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  401. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  402. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  403. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  404. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  405. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  406. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  407. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  408. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  409. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  410. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  411. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  412. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  413. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  414. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  415. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  416. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  417. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  418. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  419. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  420. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  421. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  422. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  423. package/lib/esm/solid/Box.js.map +1 -1
  424. package/lib/esm/solid/Cone.js.map +1 -1
  425. package/lib/esm/solid/LinearSweep.js.map +1 -1
  426. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  427. package/lib/esm/solid/RuledSweep.js.map +1 -1
  428. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  429. package/lib/esm/solid/Sphere.js.map +1 -1
  430. package/lib/esm/solid/SweepContour.js.map +1 -1
  431. package/lib/esm/solid/TorusPipe.js.map +1 -1
  432. package/lib/esm/topology/ChainMerge.js.map +1 -1
  433. package/lib/esm/topology/Graph.js.map +1 -1
  434. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  435. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  436. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  437. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  438. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  439. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  440. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  441. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  442. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  443. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  444. package/lib/esm/topology/MaskManager.js.map +1 -1
  445. package/lib/esm/topology/Merging.js.map +1 -1
  446. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  447. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  448. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  449. package/lib/esm/topology/Triangulation.js.map +1 -1
  450. package/lib/esm/topology/Voronoi.js.map +1 -1
  451. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  452. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { IndexedXYZCollection, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\r\nimport { Point2d } from \"./Point2dVector2d\";\r\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\r\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\r\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\r\n\r\n/**\r\n *\r\n * @param numA first candidate -- presumed 0 or positive\r\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\r\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\r\n */\r\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\r\n\r\n if (numB !== undefined) {\r\n const numC = numB * multiplyBy;\r\n if (numC >= 0 && numC <= numA)\r\n return numC;\r\n }\r\n return numA;\r\n}\r\n/**\r\n * The `NumberArray` class contains static methods that act on arrays of numbers.\r\n * @public\r\n */\r\nexport class NumberArray {\r\n /** return the sum of values in an array, The summation is done with correction terms which\r\n * improves last-bit numeric accuracy.\r\n */\r\n public static preciseSum(data: number[]): number {\r\n const n = data.length;\r\n if (n === 0)\r\n return 0.0;\r\n let sum = data[0];\r\n let c = 0.0;\r\n let y: number;\r\n let t: number;\r\n for (let i = 1; i < n; i++) {\r\n y = data[i] - c;\r\n t = sum + y;\r\n c = (t - sum) - y;\r\n sum = t;\r\n }\r\n return sum;\r\n }\r\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\r\n public static isExactEqual(dataA: any[] | Float64Array | Uint8Array | Uint32Array | undefined, dataB: any[] | Float64Array | Uint8Array | Uint32Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (dataA[i] !== dataB[i])\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** Return true if arrays have identical counts and entries equal within tolerance */\r\n public static isAlmostEqual(\r\n dataA: number[] | Float64Array | undefined,\r\n dataB: number[] | Float64Array | undefined,\r\n tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\r\n public static sum(data: number[] | Float64Array): number {\r\n let sum = 0;\r\n for (const x of data) { sum += x; }\r\n return sum;\r\n }\r\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\r\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\r\n if (data) {\r\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\r\n }\r\n return false;\r\n }\r\n /** Return the max absolute value in a array of numbers. */\r\n public static maxAbsArray(values: number[]): number {\r\n const arrLen = values.length;\r\n if (arrLen === 0) {\r\n return 0.0;\r\n }\r\n let a = Math.abs(values[0]);\r\n for (let i = 1; i < arrLen; i++) {\r\n const b = Math.abs(values[i]);\r\n if (a < b) {\r\n a = b;\r\n }\r\n }\r\n return a;\r\n }\r\n /** return the max absolute value of a pair of numbers */\r\n public static maxAbsTwo(a1: number, a2: number): number {\r\n a1 = Math.abs(a1);\r\n a2 = Math.abs(a2);\r\n return (a1 > a2) ? a1 : a2;\r\n }\r\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n\r\n /** Return the max absolute difference between corresponding entries in two Float64Array\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n /**\r\n * Return an array with indicated start and end points, and maximum step size.\r\n * @param low first value in returned array\r\n * @param high last value in returned array\r\n * @param step max permitted step\r\n */\r\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\r\n if (low === high)\r\n return [low];\r\n const delta = high - low;\r\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\r\n const result = [];\r\n result.push(low);\r\n for (let i = 1; i < numInterval; i++) {\r\n result.push(low + (i / numInterval) * delta);\r\n }\r\n result.push(high);\r\n return result;\r\n }\r\n\r\n /** Copy numbers from variant sources to number[]. */\r\n public static create(source: number[] | Float64Array): number[] {\r\n const result: number[] = [];\r\n for (const q of source)\r\n result.push(q);\r\n return result;\r\n }\r\n\r\n /** Copy number[][]. */\r\n public static copy2d(source: number[][]): number[][] {\r\n const result: number[][] = [];\r\n for (const row of source) {\r\n const newRow = [];\r\n for (const entry of row)\r\n newRow.push(entry);\r\n result.push(newRow);\r\n }\r\n return result;\r\n }\r\n\r\n /** Copy number[][][]. */\r\n public static copy3d(source: number[][][]): number[][][] {\r\n const result: number[][][] = [];\r\n for (const row of source) {\r\n const newRow = [];\r\n for (const block of row) {\r\n const newBlock = [];\r\n for (const entry of block)\r\n newBlock.push(entry);\r\n newRow.push(newBlock);\r\n }\r\n result.push(newRow);\r\n }\r\n return result;\r\n }\r\n\r\n /** Copy numbers from Float64Array to number[][].\r\n * @param numPerBlock block size\r\n */\r\n public static unpack2d(source: Float64Array, numPerBlock: number): number[][] | undefined {\r\n if (numPerBlock < 1)\r\n return undefined;\r\n return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock) as number[][];\r\n }\r\n\r\n /** Copy numbers from Float64Array to number[][][].\r\n * @param numPerRow row size\r\n * @param numPerBlock block size\r\n */\r\n public static unpack3d(source: Float64Array, numPerRow: number, numPerBlock: number): number[][][] | undefined {\r\n if (numPerBlock < 1 || numPerRow < 1)\r\n return undefined;\r\n return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow) as number[][][];\r\n }\r\n\r\n /** Copy numbers from 1d/2d/3d array to Float64Array. */\r\n public static pack(source: number[] | number[][] | number[][][]): Float64Array {\r\n const numRows = source.length;\r\n let numPerRow = 0;\r\n let numPerBlock = 0;\r\n let numCoords = 0;\r\n if (numRows > 0) {\r\n numCoords = numRows;\r\n if (Array.isArray(source[0])) {\r\n numPerRow = source[0].length;\r\n if (numPerRow > 0) {\r\n numCoords *= numPerRow;\r\n if (Array.isArray(source[0][0])) {\r\n numPerBlock = source[0][0].length;\r\n if (numPerBlock > 0)\r\n numCoords *= numPerBlock;\r\n }\r\n }\r\n }\r\n }\r\n const result = new Float64Array(numCoords);\r\n if (numPerBlock > 0) {\r\n const src3d = source as number[][][];\r\n for (let i = 0, c = 0; i < numRows; ++i)\r\n for (let j = 0; j < numPerRow; ++j)\r\n for (let k = 0; k < numPerBlock; ++k)\r\n result[c++] = src3d[i][j][k];\r\n } else if (numPerRow > 0) {\r\n const src2d = source as number[][];\r\n for (let i = 0, c = 0; i < numRows; ++i)\r\n for (let j = 0; j < numPerRow; ++j)\r\n result[c++] = src2d[i][j];\r\n } else if (numRows > 0) {\r\n const src1d = source as number[];\r\n for (let i = 0, c = 0; i < numRows; ++i)\r\n result[c++] = src1d[i];\r\n }\r\n return result;\r\n }\r\n\r\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\r\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\r\n const result: number[] = [];\r\n if (knots === undefined || knots.length === 0)\r\n return result;\r\n let multiplicity0 = 1;\r\n const knot0 = knots[0];\r\n const knot1 = knots[knots.length - 1];\r\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\r\n let multiplicity1 = 1;\r\n const k1 = knots.length - 1;\r\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\r\n\r\n for (let k = 0; k < target0; k++)\r\n result.push(knot0);\r\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\r\n result.push(knots[k]);\r\n for (let k = 0; k < target1; k++)\r\n result.push(knot1);\r\n return result;\r\n }\r\n\r\n /** Compute the linear combination s of the numbers and scales.\r\n * @param data array of numbers d_i.\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\r\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\r\n */\r\n public static linearCombination(data: number[], scales: number[]): number {\r\n const numTerms = Math.min(data.length, scales.length);\r\n let sum = 0;\r\n for (let i = 0; i < numTerms; ++i)\r\n sum += scales[i] * data[i];\r\n return sum;\r\n }\r\n\r\n /** Compute the linear combination s of the colors and scales.\r\n * * The result is another color if the scales are in [0,1] and sum to 1.\r\n * @param colors array of colors c_i (rgba in first four bytes).\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\r\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\r\n */\r\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\r\n const numTerms = Math.min(colors.length, scales.length);\r\n const bytes = [0, 0, 0, 0];\r\n // compute a convex combination of each byte\r\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\r\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\r\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\r\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\r\n bytes[iByte] += fraction * colorComponent;\r\n }\r\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\r\n }\r\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\r\n }\r\n\r\n /**\r\n * Given an array of strictly increasing numbers, find the index of the largest number that is less than or equal\r\n * to `value`.\r\n * * Get an initial estimate by proportions of `value` and the first and last entries.\r\n * * Linear search from there for final value.\r\n * * For regularly spaced numbers (e.g., `data` is the `_facetStart` indices for a triangulated [[IndexedPolyface]]),\r\n * the proportional estimate will be immediately correct.\r\n * @param data the array of strictly increasing numbers\r\n * @param value the value to search for\r\n */\r\n public static searchStrictlyIncreasingNumbers(data: ReadonlyArray<number>, value: number): number | undefined {\r\n const lastQ = data.length - 1;\r\n if (lastQ <= 0 || value < 0 || value >= data[lastQ])\r\n return undefined;\r\n let q = Math.floor((value * lastQ) / data[lastQ]);\r\n while (data[q] > value)\r\n q--;\r\n while (data[q + 1] <= value)\r\n q++;\r\n return q;\r\n }\r\n}\r\n\r\n/**\r\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\r\n * @public\r\n */\r\nexport class Point2dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: Point2d[] | Float64Array | undefined, dataB: Point2d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (dataA && dataB) {\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\r\n return false;\r\n } else { // different types\r\n const points = dataA instanceof Float64Array ? dataB as Point2d[] : dataA;\r\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\r\n if (numbers.length !== points.length * 2)\r\n return false;\r\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\r\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[2 * iPoint], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[2 * iPoint + 1], tolerance))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\r\n return data.map((p: Point2d) => p.clone());\r\n }\r\n /**\r\n * Return the number of points when trailing points that match point 0 are excluded.\r\n * @param data array of XAndY points.\r\n */\r\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\r\n let n = data.length;\r\n if (n < 2)\r\n return n;\r\n const x0 = data[0].x;\r\n const y0 = data[0].y;\r\n while (n > 1) {\r\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\r\n return n;\r\n n--;\r\n }\r\n return n;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\r\n * @public\r\n */\r\nexport class Vector3dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: Vector3d[] | Float64Array | undefined, dataB: Vector3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (dataA && dataB) {\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\r\n return false;\r\n } else { // different types\r\n const points = dataA instanceof Float64Array ? dataB as Vector3d[] : dataA;\r\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\r\n if (numbers.length !== points.length * 3)\r\n return false;\r\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\r\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Vector3d data[]\r\n * @param data source data\r\n */\r\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\r\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\r\n }\r\n}\r\n\r\n/**\r\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\r\n * @public\r\n */\r\nexport class Point4dArray {\r\n /**\r\n * Copy each weighted point and its corresponding weight into a packed buffer.\r\n * @param data array of weighted xyz\r\n * @param weights scalar weight array\r\n * @param result optional destination array. If insufficiently sized, a new array is returned.\r\n * @return packed weighted point array\r\n */\r\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array, result?: Float64Array): Float64Array | undefined {\r\n let points: Point3d[] | Float64Array | number[];\r\n if (Array.isArray(data) && data[0] instanceof Point3d) {\r\n points = data as Point3d[];\r\n if (points.length !== weights.length)\r\n return undefined;\r\n const numValues = 4 * points.length;\r\n if (!result || result.length < numValues)\r\n result = new Float64Array(numValues);\r\n for (let i = 0, k = 0; k < points.length; k++) {\r\n result[i++] = points[k].x;\r\n result[i++] = points[k].y;\r\n result[i++] = points[k].z;\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n }\r\n points = data as (Float64Array | number[]);\r\n const numPoints = weights.length;\r\n if (points.length !== 3 * numPoints)\r\n return undefined;\r\n const numValues1 = 4 * numPoints;\r\n if (!result || result.length < numValues1)\r\n result = new Float64Array(numValues1);\r\n for (let i = 0, k = 0; k < numPoints; k++) {\r\n const k0 = 3 * k;\r\n result[i++] = points[k0];\r\n result[i++] = points[k0 + 1];\r\n result[i++] = points[k0 + 2];\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy 4d points into a packed buffer.\r\n * @param data array of xyzw\r\n * @param result optional destination array. If insufficiently sized, a new array is returned.\r\n * @return packed point array\r\n */\r\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\r\n const numValues = 4 * data.length;\r\n if (!result || result.length < numValues)\r\n result = new Float64Array(numValues);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n result[i++] = p.w;\r\n }\r\n return result;\r\n }\r\n /** unpack from ... to array of Point4d */\r\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\r\n const result = [];\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\r\n }\r\n return result;\r\n }\r\n /**\r\n * Unpack packed 4D data to a Point3d array and an array of weights.\r\n * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].\r\n * @param data input 4D points (packed)\r\n * @param points output 3D data\r\n * @param weights output weights (w portion of input)\r\n * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.\r\n */\r\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\r\n pointFormatter: (x: number, y: number, z: number) => any = (x, y, z) => Point3d.create(x, y, z)) {\r\n points.length = 0;\r\n weights.length = 0;\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\r\n weights.push(data[i + 3]);\r\n }\r\n }\r\n private static _workPoint4d = Point4d.create();\r\n /**\r\n * Multiply (and replace) each block of 4 values as a Point4d.\r\n * @param transform transform to apply\r\n * @param xyzw array of x,y,z,w points.\r\n */\r\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\r\n const numXYZW = xyzw.length;\r\n const xyzw1 = Point4dArray._workPoint4d;\r\n for (let i = 0; i + 3 < numXYZW; i += 4) {\r\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\r\n xyzw[i] = xyzw1.x;\r\n xyzw[i + 1] = xyzw1.y;\r\n xyzw[i + 2] = xyzw1.z;\r\n xyzw[i + 3] = xyzw1.w;\r\n }\r\n }\r\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\r\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (dataA && dataB) {\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\r\n return false;\r\n } else { // different types\r\n const points = dataA instanceof Float64Array ? dataB as Point4d[] : dataA;\r\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\r\n if (numbers.length !== points.length * 4)\r\n return false;\r\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\r\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3], tolerance))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n for (const xyzw of data) {\r\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 4) {\r\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n/**\r\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\r\n * @public\r\n */\r\n\r\nexport class Point3dArray {\r\n /**\r\n * Copy 3d points into a packed buffer.\r\n * @param data array of xyz\r\n * @param result optional destination array. If insufficiently sized, a new array is returned.\r\n * @return packed point array\r\n */\r\n public static packToFloat64Array(data: Point3d[], result?: Float64Array): Float64Array {\r\n const numValues = 3 * data.length;\r\n if (!result || result.length < numValues)\r\n result = new Float64Array(numValues);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Copy 3d points into a packed number array.\r\n * @param data array of xyz\r\n * @param result optional destination array.\r\n * @return packed number array\r\n */\r\n public static packToNumberArray(data: Point3d[], result?: number[]): number[] {\r\n const numValues = 3 * data.length;\r\n if (!result)\r\n result = Array<number>(numValues);\r\n result.length = numValues;\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute the 8 weights of trilinear mapping\r\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\r\n * @param weights preallocated array to receive weights.\r\n * @param u0 low u weight\r\n * @param u1 high u weight\r\n * @param v0 low v weight\r\n * @param v1 high v weight\r\n * @param w0 low w weight\r\n * @param w1 high w weight\r\n */\r\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\r\n\r\n weights[0] = u0 * v0 * w0;\r\n weights[1] = u1 * v0 * w0;\r\n weights[2] = u0 * v1 * w0;\r\n weights[3] = u1 * v1 * w0;\r\n weights[4] = u0 * v0 * w1;\r\n weights[5] = u1 * v0 * w1;\r\n weights[6] = u0 * v1 * w1;\r\n weights[7] = u1 * v1 * w1;\r\n }\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].x;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].y;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].z;\r\n return sum;\r\n }\r\n\r\n private static _weightUVW = new Float64Array(8);\r\n private static _weightDU = new Float64Array(8);\r\n private static _weightDV = new Float64Array(8);\r\n private static _weightDW = new Float64Array(8);\r\n /**\r\n * Compute a point by trilinear mapping.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result point\r\n */\r\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\r\n if (!result) result = Point3d.create(0, 0, 0);\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n let a;\r\n for (let i = 0; i < 8; i++) {\r\n a = this._weightUVW[i];\r\n result.x += a * points[i].x;\r\n result.y += a * points[i].y;\r\n result.z += a * points[i].z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute a point and derivatives wrt uvw by trilinear mapping.\r\n * * evaluated point is the point part of the transform\r\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result transform\r\n */\r\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\r\n return Transform.createRowValues(\r\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\r\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\r\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\r\n result);\r\n }\r\n /** unpack from a number array or Float64Array to an array of `Point3d` */\r\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\r\n const result = [];\r\n for (let i = 0; i + 2 < data.length; i += 3) {\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a 2-dimensional array containing all the values of `data` in arrays of numPerBlock\r\n * @param data simple array of numbers.\r\n * @param numPerBlock number of values in each block at first level down.\r\n */\r\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n while (i < n) {\r\n // there is at least one more value for a block\r\n const row = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n row.push(data[i]);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.\r\n * @param data simple array of numbers\r\n * @param numPerBlock number of values in each block\r\n * @param numPerRow number of blocks per row\r\n */\r\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n let i2;\r\n while (i < n) {\r\n const row = [];\r\n i2 = i + numPerBlock * numPerRow;\r\n while (i < i2) {\r\n const block = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n block.push(data[i]);\r\n }\r\n row.push(block);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\r\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\r\n const xyz1 = Point3d.create();\r\n const numXYZ = xyz.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\r\n xyz[i] = xyz1.x;\r\n xyz[i + 1] = xyz1.y;\r\n xyz[i + 2] = xyz1.z;\r\n }\r\n }\r\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\r\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (dataA && dataB) {\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\r\n return false;\r\n } else { // different types\r\n const points = dataA instanceof Float64Array ? dataB as Point3d[] : dataA;\r\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\r\n if (numbers.length !== points.length * 3)\r\n return false;\r\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\r\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\r\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return simple average of all coordinates. (000 if empty array) */\r\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\r\n if (points instanceof IndexedXYZCollection) {\r\n result = Point3d.create(0, 0, 0, result);\r\n const p = Point3d.create();\r\n if (points.length > 0) {\r\n for (let i = 0; i < points.length; i++) {\r\n points.getPoint3dAtCheckedPointIndex(i, p);\r\n result.x += p.x; result.y += p.y; result.z += p.z;\r\n }\r\n result.scaleInPlace(1.0 / points.length);\r\n }\r\n return result;\r\n }\r\n const carrier = new Point3dArrayCarrier(points);\r\n return this.centroid(carrier);\r\n }\r\n\r\n /** Return the index of the point most distant from spacePoint */\r\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n for (let i = 0; i < points.length; i++) {\r\n d = spacePoint.distance(points[i]);\r\n if (d > dMax) {\r\n spacePoint.vectorTo(points[i], farVector);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\r\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n let vectorAB; // to be reused in loop !!!\r\n for (let i = 0; i < points.length; i++) {\r\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\r\n d = vectorAB.crossProductMagnitude(vector);\r\n if (d > dMax) {\r\n farVector.setFrom(vectorAB);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Return the index of the closest point in the array (full xyz) */\r\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\r\n let index = -1;\r\n let dMin = Number.MAX_VALUE;\r\n let d;\r\n const x0 = spacePoint.x;\r\n const y0 = spacePoint.y;\r\n const z0 = spacePoint.z;\r\n for (let i = 0; i < data.length; i++) {\r\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\r\n if (d < dMin) {\r\n index = i;\r\n dMin = d;\r\n }\r\n }\r\n return index;\r\n }\r\n /** return true iff all points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n let xyz;\r\n for (xyz of data) {\r\n if (Math.abs(plane.altitude(xyz)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Sum lengths of edges.\r\n * @param data points.\r\n */\r\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\r\n let sum = 0.0;\r\n\r\n if (Array.isArray(data)) {\r\n const n = selectOptionalClampedMin(data.length, maxPointsToUse, 1) - 1;\r\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\r\n if (addClosureEdge && n > 0)\r\n sum += data[0].distance(data[n]);\r\n\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = selectOptionalClampedMin(data.length, maxPointsToUse, 3);\r\n let i = 0;\r\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\r\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\r\n data[i + 4] - data[i + 1],\r\n data[i + 5] - data[i + 2]);\r\n }\r\n if (addClosureEdge && i >= 3) {\r\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\r\n data[1] - data[i + 1],\r\n data[2] - data[i + 2]);\r\n }\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * Count the number of points, but ...\r\n * * ignore trailing duplicates of point 0.\r\n * * return 0 if there are any duplicates within the remaining points.\r\n * @param points points to examine.\r\n */\r\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\r\n let n = points.length;\r\n // strip of (allow) trailing duplicates ...\r\n while (n > 1) {\r\n if (points[0].isAlmostEqual(points[n - 1], tolerance))\r\n n--;\r\n else\r\n break;\r\n }\r\n for (let i = 0; i + 1 < n; i++)\r\n if (points[i].isAlmostEqual(points[i + 1], tolerance))\r\n return 0;\r\n return n;\r\n }\r\n\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\r\n const result: Point3d[] = [];\r\n if (data.length === 0)\r\n return result;\r\n if (data instanceof Float64Array) {\r\n for (let i = 0; i + 2 < data.length; i += 3)\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n return result;\r\n }\r\n for (const p of data) {\r\n if (Array.isArray(p))\r\n result.push(Point3d.create(p[0], p[1], p[2]));\r\n else\r\n result.push(Point3d.create(p.x, p.y, p.z));\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return an array containing Point2d with xy parts of each Point3d\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\r\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\r\n }\r\n /**\r\n * clone points in the input array, inserting points within each edge to limit edge length.\r\n * @param points array of points\r\n * @param maxEdgeLength max length of an edge\r\n */\r\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\r\n if (points.length === 0)\r\n return [];\r\n const result = [points[0]];\r\n for (let i = 1; i < points.length; i++) {\r\n const a = points[i - 1].distance(points[i]);\r\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\r\n for (let k = 1; k < n; k++)\r\n result.push(points[i - 1].interpolate(k / n, points[i]));\r\n result.push(points[i]);\r\n\r\n }\r\n return result;\r\n }\r\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\r\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\r\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\r\n */\r\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\r\n // data is an array ... each member is either Point3d or [x,y,z]\r\n const result = [];\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result.push([p.x, p.y, p.z]);\r\n } else if (Array.isArray(p)) {\r\n const x = p.length > 0 ? p[0] : 0.0;\r\n const y = p.length > 1 ? p[1] : 0.0;\r\n const z = p.length > 2 ? p[2] : 0.0;\r\n result.push([x, y, z]);\r\n } else {\r\n const x = p.x !== undefined ? p.x : 0.0;\r\n const y = p.y !== undefined ? p.y : 0.0;\r\n const z = p.z !== undefined ? p.z : 0.0;\r\n result.push([x, y, z]);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\r\n */\r\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\r\n const result = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n } else if (Array.isArray(p)) {\r\n result[i++] = p.length > 0 ? p[0] : 0.0;\r\n result[i++] = p.length > 1 ? p[1] : 0.0;\r\n result[i++] = p.length > 2 ? p[2] : 0.0;\r\n } else {\r\n result[i++] = p.x !== undefined ? p.x : 0.0;\r\n result[i++] = p.y !== undefined ? p.y : 0.0;\r\n result[i++] = p.z !== undefined ? p.z : 0.0;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\r\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n\r\n /**\r\n * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].\r\n * * Extrapolation options when the projection is outside of the fraction range [0,1] are:\r\n * * false ==> return distance to closest endpoint\r\n * * true ==> return distance to extended line segment\r\n * * There is no index checking!\r\n */\r\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\r\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\r\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\r\n const uDotU = vectorU.dotProduct(vectorU);\r\n const uDotV = vectorU.dotProduct(vectorV);\r\n const fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\r\n if (fraction === undefined)\r\n return vectorV.magnitude(); // AC is degenerate; return ||B-A||\r\n if (!extrapolate) {\r\n if (fraction > 1.0)\r\n return points[indexB].distance(points[indexC]); // return ||B-C||\r\n if (fraction < 0.0)\r\n return vectorV.magnitude(); // return ||B-A||\r\n }\r\n // return distance to projection on (extended) segment\r\n const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\r\n // h2 should never be negative except for quirky tolerance...\r\n return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);\r\n }\r\n\r\n /**\r\n * Computes the hull of the XY projection of points.\r\n * @param points input points, z-coordinates ignored.\r\n * @param hullPoints (output) points on the convex hull (cloned from input points).\r\n * @param insidePoints (output) points not on the convex hull (cloned from input points).\r\n * @param addClosurePoint whether to append the first hull point to `hullPoints`.\r\n */\r\n public static computeConvexHullXY(\r\n points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false,\r\n ): void {\r\n hullPoints.length = 0;\r\n insidePoints.length = 0;\r\n let n = points.length;\r\n // get deep copy\r\n const xy1: Point3d[] = points.slice(0, n);\r\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\r\n if (n < 3) {\r\n for (const p of xy1)\r\n hullPoints.push(p);\r\n if (addClosurePoint && xy1.length > 0)\r\n hullPoints.push(xy1[0]);\r\n return;\r\n }\r\n hullPoints.push(xy1[0]); // this is sure to stay\r\n hullPoints.push(xy1[1]); // this one can be removed in loop.\r\n let numInside = 0;\r\n // first sweep creates upper hull\r\n for (let i = 2; i < n; i++) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n xy1[numInside++] = hullPoints[top];\r\n top--;\r\n hullPoints.pop();\r\n }\r\n hullPoints.push(candidate);\r\n }\r\n const i0 = hullPoints.length - 1;\r\n xy1.length = numInside;\r\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\r\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\r\n n = xy1.length;\r\n // xy1.back () is already on stack.\r\n hullPoints.push(xy1[n - 1]);\r\n for (let i = n - 1; i-- > 0;) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n insidePoints.push(hullPoints[top]);\r\n top--;\r\n hullPoints.pop();\r\n }\r\n if (i > 0) // don't replicate start\r\n hullPoints.push(candidate);\r\n }\r\n if (addClosurePoint)\r\n hullPoints.push(hullPoints[0]);\r\n }\r\n /**\r\n * Return (clones of) points in data[] with min and max x and y parts.\r\n * @param data array to examine.\r\n */\r\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\r\n if (data.length === 0)\r\n return undefined;\r\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\r\n let q;\r\n for (let i = 1; i < data.length; i++) {\r\n q = data[i];\r\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\r\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\r\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\r\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAA8B,MAAM,wBAAwB,CAAC;AAE1F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAO,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,IAAY,EAAE,IAAwB,EAAE,UAAkB;IAE1F,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC;QAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;YAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD;;;GAGG;AACH,MAAM,OAAO,WAAW;IACtB;;OAEG;IACI,MAAM,CAAC,UAAU,CAAC,IAAc;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC;YACT,OAAO,GAAG,CAAC;QACb,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACZ,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,6FAA6F;IACtF,MAAM,CAAC,YAAY,CAAC,KAAkE,EAAE,KAAkE;QAC/J,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAC/B,OAAO,KAAK,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBACnC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;oBACvB,OAAO,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IACD,qFAAqF;IAC9E,MAAM,CAAC,aAAa,CACzB,KAA0C,EAC1C,KAA0C,EAC1C,YAAoB,QAAQ,CAAC,mBAAmB;QAChD,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAC/B,OAAO,KAAK,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;oBAC3C,OAAO,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,2FAA2F;IACpF,MAAM,CAAC,GAAG,CAAC,IAA6B;QAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAAC,GAAG,IAAI,CAAC,CAAC;QAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,0GAA0G;IACnG,MAAM,CAAC,mBAAmB,CAAC,CAAS,EAAE,IAA0B;QACrE,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YAAC,CAAC;QAC7E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2DAA2D;IACpD,MAAM,CAAC,WAAW,CAAC,MAAgB;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,CAAC,GAAG,CAAC,CAAC;YACR,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,yDAAyD;IAClD,MAAM,CAAC,SAAS,CAAC,EAAU,EAAE,EAAU;QAC5C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,UAAU,CAAC,KAA8B,EAAE,KAA8B;QACrF,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,iBAAiB,CAAC,KAAmB,EAAE,KAAmB;QACtE,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,0BAA0B,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;QAC9E,IAAI,GAAG,KAAK,IAAI;YACd,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qDAAqD;IAC9C,MAAM,CAAC,MAAM,CAAC,MAA+B;QAClD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,MAAM;YACpB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uBAAuB;IAChB,MAAM,CAAC,MAAM,CAAC,MAAkB;QACrC,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,GAAG;gBACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yBAAyB;IAClB,MAAM,CAAC,MAAM,CAAC,MAAoB;QACvC,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,KAAK,MAAM,KAAK,IAAI,KAAK;oBACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,QAAQ,CAAC,MAAoB,EAAE,WAAmB;QAC9D,IAAI,WAAW,GAAG,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,OAAO,YAAY,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAe,CAAC;IACrF,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,QAAQ,CAAC,MAAoB,EAAE,SAAiB,EAAE,WAAmB;QACjF,IAAI,WAAW,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,OAAO,YAAY,CAAC,8BAA8B,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAiB,CAAC;IACrG,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,IAAI,CAAC,MAA4C;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,SAAS,GAAG,OAAO,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC7B,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAClB,SAAS,IAAI,SAAS,CAAC;oBACvB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBAClC,IAAI,WAAW,GAAG,CAAC;4BACjB,SAAS,IAAI,WAAW,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,MAAsB,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC;oBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,EAAE,CAAC;wBAClC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAoB,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC;oBAChC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAkB,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6HAA6H;IACtH,MAAM,CAAC,gCAAgC,CAAC,KAA2B,EAAE,OAAe,EAAE,OAAe;QAC1G,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAC3C,OAAO,MAAM,CAAC;QAChB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,OAAO,aAAa,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK,GAAG,CAAC;YAAC,aAAa,EAAE,CAAC;QAAC,CAAC;QAC5F,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,GAAG,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,KAAK,GAAG,CAAC;YAAC,aAAa,EAAE,CAAC;QAAC,CAAC;QAE5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAAc,EAAE,MAAgB;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;YAC/B,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,yBAAyB,CAAC,MAAgB,EAAE,MAAgB;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,4CAA4C;QAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;YACtE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,YAAY;gBACnE,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC;gBAC5D,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,GAAG,cAAc,CAAC;YAC5C,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,SAAS,CAAC;QAChE,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,+BAA+B,CAAC,IAA2B,EAAE,KAAa;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;YACjD,OAAO,SAAS,CAAC;QACnB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK;YACpB,CAAC,EAAE,CAAC;QACN,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;YACzB,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB,uEAAuE;IAChE,MAAM,CAAC,aAAa,CAAC,KAA2C,EAAE,KAA2C,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACpK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC3D,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC9C,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC,CAAE,kBAAkB;gBAC1B,MAAM,MAAM,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,OAAO,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAqB,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtC,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;oBACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC;wBAC9E,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,OAAO,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAAe;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,qCAAqC,CAAC,IAAa;QAC/D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,CAAC,CAAC;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChG,OAAO,CAAC,CAAC;YACX,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CAEF;AAED;;;GAGG;AACH,MAAM,OAAO,aAAa;IACxB,uEAAuE;IAChE,MAAM,CAAC,aAAa,CAAC,KAA4C,EAAE,KAA4C,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACtK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC3D,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC9C,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC,CAAE,kBAAkB;gBAC1B,MAAM,MAAM,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3E,MAAM,OAAO,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAqB,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtC,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;oBACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC;wBAC9E,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,OAAO,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,kBAAkB,CAAC,IAAc;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;OAMG;IACI,MAAM,CAAC,kCAAkC,CAAC,IAAyC,EAAE,OAAgC,EAAE,MAAqB;QACjJ,IAAI,MAA2C,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC;YACtD,MAAM,GAAG,IAAiB,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;gBAClC,OAAO,SAAS,CAAC;YACnB,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;gBACtC,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,IAAiC,CAAC;QAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS;YACjC,OAAO,SAAS,CAAC;QACnB,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;YACvC,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,CAAC,IAAe,EAAE,MAAqB;QACrE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;YACtC,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2CAA2C;IACpC,MAAM,CAAC,oBAAoB,CAAC,IAAkB;QACnD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,oCAAoC,CAAC,IAAkB,EAAE,MAAiB,EAAE,OAAiB,EACzG,iBAA2D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACO,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/C;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,SAAoB,EAAE,IAAkB;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,iGAAiG;IAC1F,MAAM,CAAC,aAAa,CAAC,KAA2C,EAAE,KAA2C,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACpK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC3D,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC9C,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC,CAAE,kBAAkB;gBAC1B,MAAM,MAAM,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,OAAO,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAqB,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtC,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;oBACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC;wBAC9E,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,OAAO,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,kDAAkD;QAClD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IACD,mFAAmF;IAC5E,MAAM,CAAC,cAAc,CAAC,IAA8B,EAAE,KAAmC,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAChJ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;oBAC1E,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;oBAC1F,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AAEH,MAAM,OAAO,YAAY;IACvB;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,CAAC,IAAe,EAAE,MAAqB;QACrE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;YACtC,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAAe,EAAE,MAAiB;QAChE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,KAAK,CAAS,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,wBAAwB,CAAC,OAAqB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAElI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,CAAC,OAAqB,EAAE,MAAiB;QACjE,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,CAAC,OAAqB,EAAE,MAAiB;QACjE,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,CAAC,OAAqB,EAAE,MAAiB;QACjE,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,MAAM,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/C;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,MAAiB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,MAAgB;QACvG,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,oCAAoC,CAAC,MAAiB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,MAAkB;QACvH,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,SAAS,CAAC,eAAe,CAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC3K,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC3K,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC3K,MAAM,CAAC,CAAC;IACZ,CAAC;IACD,0EAA0E;IACnE,MAAM,CAAC,2BAA2B,CAAC,IAA6B;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,2BAA2B,CAAC,IAAkB,EAAE,WAAmB;QAC/E,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,+CAA+C;YAC/C,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;YACrB,IAAI,EAAE,GAAG,CAAC;gBACR,EAAE,GAAG,CAAC,CAAC;YACT,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,8BAA8B,CAAC,IAAkB,EAAE,WAAmB,EAAE,SAAiB;QACrG,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;YACjC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjB,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;gBACrB,IAAI,EAAE,GAAG,CAAC;oBACR,EAAE,GAAG,CAAC,CAAC;gBACT,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,8FAA8F;IACvF,MAAM,CAAC,eAAe,CAAC,SAAoB,EAAE,GAAiB;QACnE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAChB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,iGAAiG;IAC1F,MAAM,CAAC,aAAa,CAAC,KAA2C,EAAE,KAA2C,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACpK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC3D,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAC/B,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;wBAC9C,OAAO,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC,CAAE,kBAAkB;gBAC1B,MAAM,MAAM,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,OAAO,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAqB,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtC,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;oBACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC;wBAC9E,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;wBAChF,OAAO,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,kDAAkD;QAClD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,uEAAuE;IAChE,MAAM,CAAC,QAAQ,CAAC,MAAwC,EAAE,MAAgB;QAC/E,IAAI,MAAM,YAAY,oBAAoB,EAAE,CAAC;YAC3C,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,iEAAiE;IAC1D,MAAM,CAAC,uBAAuB,CAAC,MAAiB,EAAE,UAAe,EAAE,SAAmB;QAC3F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,CAAC;QACN,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC1C,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,gIAAgI;IACzH,MAAM,CAAC,wCAAwC,CAAC,MAAiB,EAAE,UAAmB,EAAE,MAAgB,EAAE,SAAmB;QAClI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,CAAC;QACN,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,QAAQ,CAAC,CAAC,2BAA2B;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oEAAoE;IAC7D,MAAM,CAAC,iBAAiB,CAAC,IAAc,EAAE,UAAkB;QAChE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,CAAC;QACN,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,KAAK,GAAG,CAAC,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8EAA8E;IACvE,MAAM,CAAC,cAAc,CAAC,IAA8B,EAAE,KAAmC,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAChJ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC;YACR,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;oBAC3C,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;oBAC5E,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,cAAc,CAAC,IAA8B,EAAE,iBAA0B,KAAK,EAAE,cAAuB;QACnH,IAAI,GAAG,GAAG,GAAG,CAAC;QAEd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC;gBACzB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,CAAC;aAAM,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,kCAAkC;gBAClE,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACjD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EACzB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAC7C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EACrB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,CAAC,MAAiB,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAClG,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACtB,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;gBACnD,CAAC,EAAE,CAAC;;gBAEJ,MAAM;QACV,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC5B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;gBACnD,OAAO,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAA+B;QAC7D,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;gBAE9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,IAAc;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,MAAiB,EAAE,aAAqB;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mDAAmD;IAC3C,MAAM,CAAC,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,IAAc,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F;;;OAGG;IACI,MAAM,CAAC,yBAAyB,CAAC,IAAgC;QACtE,MAAM,SAAS,GAAG,IAAI,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9F,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,0BAA0B,CAAC,IAAgB;QACvD,gEAAgE;QAChE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,2BAA2B,CAAC,IAAgB;QACxD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,yBAAyB,CAAC,IAAgC;QACtE,MAAM,SAAS,GAAG,IAAI,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,gCAAgC,CAAC,MAAiB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,WAAoB;QACpI,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,QAAQ,KAAK,SAAS;YACxB,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,mCAAmC;QACjE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,QAAQ,GAAG,GAAG;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,iBAAiB;YACpE,IAAI,QAAQ,GAAG,GAAG;gBAChB,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,iBAAiB;QACjD,CAAC;QACD,sDAAsD;QACtD,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;QACpE,6DAA6D;QAC7D,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,mBAAmB,CAC/B,MAAiB,EAAE,UAAqB,EAAE,YAAuB,EAAE,kBAA2B,KAAK;QAEnG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACtB,gBAAgB;QAChB,MAAM,GAAG,GAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,GAAG;gBACjB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAChD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;QAC5D,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,iCAAiC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;gBACjG,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBACnC,GAAG,EAAE,CAAC;gBACN,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,4DAA4D;QACrF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACf,mCAAmC;QACnC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;YAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,OAAO,GAAG,GAAG,EAAE,IAAI,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;gBACjG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,GAAG,EAAE,CAAC;gBACN,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,wBAAwB;gBACjC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,eAAe;YACjB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,YAAY,CAAC,IAAe;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAClI,IAAI,CAAC,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module CartesianGeometry\n */\nimport { Geometry } from \"../Geometry\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { IndexedXYZCollection, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\nimport { Point2d } from \"./Point2dVector2d\";\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\nimport { Transform } from \"./Transform\";\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\n\n/**\n *\n * @param numA first candidate -- presumed 0 or positive\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\n */\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\n\n if (numB !== undefined) {\n const numC = numB * multiplyBy;\n if (numC >= 0 && numC <= numA)\n return numC;\n }\n return numA;\n}\n/**\n * The `NumberArray` class contains static methods that act on arrays of numbers.\n * @public\n */\nexport class NumberArray {\n /** return the sum of values in an array, The summation is done with correction terms which\n * improves last-bit numeric accuracy.\n */\n public static preciseSum(data: number[]): number {\n const n = data.length;\n if (n === 0)\n return 0.0;\n let sum = data[0];\n let c = 0.0;\n let y: number;\n let t: number;\n for (let i = 1; i < n; i++) {\n y = data[i] - c;\n t = sum + y;\n c = (t - sum) - y;\n sum = t;\n }\n return sum;\n }\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\n public static isExactEqual(dataA: any[] | Float64Array | Uint8Array | Uint32Array | undefined, dataB: any[] | Float64Array | Uint8Array | Uint32Array | undefined): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (dataA[i] !== dataB[i])\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /** Return true if arrays have identical counts and entries equal within tolerance */\n public static isAlmostEqual(\n dataA: number[] | Float64Array | undefined,\n dataB: number[] | Float64Array | undefined,\n tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\n public static sum(data: number[] | Float64Array): number {\n let sum = 0;\n for (const x of data) { sum += x; }\n return sum;\n }\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\n if (data) {\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\n }\n return false;\n }\n /** Return the max absolute value in a array of numbers. */\n public static maxAbsArray(values: number[]): number {\n const arrLen = values.length;\n if (arrLen === 0) {\n return 0.0;\n }\n let a = Math.abs(values[0]);\n for (let i = 1; i < arrLen; i++) {\n const b = Math.abs(values[i]);\n if (a < b) {\n a = b;\n }\n }\n return a;\n }\n /** return the max absolute value of a pair of numbers */\n public static maxAbsTwo(a1: number, a2: number): number {\n a1 = Math.abs(a1);\n a2 = Math.abs(a2);\n return (a1 > a2) ? a1 : a2;\n }\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n\n /** Return the max absolute difference between corresponding entries in two Float64Array\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n /**\n * Return an array with indicated start and end points, and maximum step size.\n * @param low first value in returned array\n * @param high last value in returned array\n * @param step max permitted step\n */\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\n if (low === high)\n return [low];\n const delta = high - low;\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\n const result = [];\n result.push(low);\n for (let i = 1; i < numInterval; i++) {\n result.push(low + (i / numInterval) * delta);\n }\n result.push(high);\n return result;\n }\n\n /** Copy numbers from variant sources to number[]. */\n public static create(source: number[] | Float64Array): number[] {\n const result: number[] = [];\n for (const q of source)\n result.push(q);\n return result;\n }\n\n /** Copy number[][]. */\n public static copy2d(source: number[][]): number[][] {\n const result: number[][] = [];\n for (const row of source) {\n const newRow = [];\n for (const entry of row)\n newRow.push(entry);\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy number[][][]. */\n public static copy3d(source: number[][][]): number[][][] {\n const result: number[][][] = [];\n for (const row of source) {\n const newRow = [];\n for (const block of row) {\n const newBlock = [];\n for (const entry of block)\n newBlock.push(entry);\n newRow.push(newBlock);\n }\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy numbers from Float64Array to number[][].\n * @param numPerBlock block size\n */\n public static unpack2d(source: Float64Array, numPerBlock: number): number[][] | undefined {\n if (numPerBlock < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock) as number[][];\n }\n\n /** Copy numbers from Float64Array to number[][][].\n * @param numPerRow row size\n * @param numPerBlock block size\n */\n public static unpack3d(source: Float64Array, numPerRow: number, numPerBlock: number): number[][][] | undefined {\n if (numPerBlock < 1 || numPerRow < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow) as number[][][];\n }\n\n /** Copy numbers from 1d/2d/3d array to Float64Array. */\n public static pack(source: number[] | number[][] | number[][][]): Float64Array {\n const numRows = source.length;\n let numPerRow = 0;\n let numPerBlock = 0;\n let numCoords = 0;\n if (numRows > 0) {\n numCoords = numRows;\n if (Array.isArray(source[0])) {\n numPerRow = source[0].length;\n if (numPerRow > 0) {\n numCoords *= numPerRow;\n if (Array.isArray(source[0][0])) {\n numPerBlock = source[0][0].length;\n if (numPerBlock > 0)\n numCoords *= numPerBlock;\n }\n }\n }\n }\n const result = new Float64Array(numCoords);\n if (numPerBlock > 0) {\n const src3d = source as number[][][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n for (let k = 0; k < numPerBlock; ++k)\n result[c++] = src3d[i][j][k];\n } else if (numPerRow > 0) {\n const src2d = source as number[][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n result[c++] = src2d[i][j];\n } else if (numRows > 0) {\n const src1d = source as number[];\n for (let i = 0, c = 0; i < numRows; ++i)\n result[c++] = src1d[i];\n }\n return result;\n }\n\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\n const result: number[] = [];\n if (knots === undefined || knots.length === 0)\n return result;\n let multiplicity0 = 1;\n const knot0 = knots[0];\n const knot1 = knots[knots.length - 1];\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\n let multiplicity1 = 1;\n const k1 = knots.length - 1;\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\n\n for (let k = 0; k < target0; k++)\n result.push(knot0);\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\n result.push(knots[k]);\n for (let k = 0; k < target1; k++)\n result.push(knot1);\n return result;\n }\n\n /** Compute the linear combination s of the numbers and scales.\n * @param data array of numbers d_i.\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\n */\n public static linearCombination(data: number[], scales: number[]): number {\n const numTerms = Math.min(data.length, scales.length);\n let sum = 0;\n for (let i = 0; i < numTerms; ++i)\n sum += scales[i] * data[i];\n return sum;\n }\n\n /** Compute the linear combination s of the colors and scales.\n * * The result is another color if the scales are in [0,1] and sum to 1.\n * @param colors array of colors c_i (rgba in first four bytes).\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\n */\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\n const numTerms = Math.min(colors.length, scales.length);\n const bytes = [0, 0, 0, 0];\n // compute a convex combination of each byte\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\n bytes[iByte] += fraction * colorComponent;\n }\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\n }\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\n }\n\n /**\n * Given an array of strictly increasing numbers, find the index of the largest number that is less than or equal\n * to `value`.\n * * Get an initial estimate by proportions of `value` and the first and last entries.\n * * Linear search from there for final value.\n * * For regularly spaced numbers (e.g., `data` is the `_facetStart` indices for a triangulated [[IndexedPolyface]]),\n * the proportional estimate will be immediately correct.\n * @param data the array of strictly increasing numbers\n * @param value the value to search for\n */\n public static searchStrictlyIncreasingNumbers(data: ReadonlyArray<number>, value: number): number | undefined {\n const lastQ = data.length - 1;\n if (lastQ <= 0 || value < 0 || value >= data[lastQ])\n return undefined;\n let q = Math.floor((value * lastQ) / data[lastQ]);\n while (data[q] > value)\n q--;\n while (data[q + 1] <= value)\n q++;\n return q;\n }\n}\n\n/**\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\n * @public\n */\nexport class Point2dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: Point2d[] | Float64Array | undefined, dataB: Point2d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point2d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 2)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[2 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[2 * iPoint + 1], tolerance))\n return false;\n }\n }\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\n return data.map((p: Point2d) => p.clone());\n }\n /**\n * Return the number of points when trailing points that match point 0 are excluded.\n * @param data array of XAndY points.\n */\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\n let n = data.length;\n if (n < 2)\n return n;\n const x0 = data[0].x;\n const y0 = data[0].y;\n while (n > 1) {\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\n return n;\n n--;\n }\n return n;\n }\n\n}\n\n/**\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\n * @public\n */\nexport class Vector3dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: Vector3d[] | Float64Array | undefined, dataB: Vector3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Vector3d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 3)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\n return false;\n }\n }\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Vector3d data[]\n * @param data source data\n */\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\n }\n}\n\n/**\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\n * @public\n */\nexport class Point4dArray {\n /**\n * Copy each weighted point and its corresponding weight into a packed buffer.\n * @param data array of weighted xyz\n * @param weights scalar weight array\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed weighted point array\n */\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array, result?: Float64Array): Float64Array | undefined {\n let points: Point3d[] | Float64Array | number[];\n if (Array.isArray(data) && data[0] instanceof Point3d) {\n points = data as Point3d[];\n if (points.length !== weights.length)\n return undefined;\n const numValues = 4 * points.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n for (let i = 0, k = 0; k < points.length; k++) {\n result[i++] = points[k].x;\n result[i++] = points[k].y;\n result[i++] = points[k].z;\n result[i++] = weights[k];\n }\n return result;\n }\n points = data as (Float64Array | number[]);\n const numPoints = weights.length;\n if (points.length !== 3 * numPoints)\n return undefined;\n const numValues1 = 4 * numPoints;\n if (!result || result.length < numValues1)\n result = new Float64Array(numValues1);\n for (let i = 0, k = 0; k < numPoints; k++) {\n const k0 = 3 * k;\n result[i++] = points[k0];\n result[i++] = points[k0 + 1];\n result[i++] = points[k0 + 2];\n result[i++] = weights[k];\n }\n return result;\n }\n\n /**\n * Copy 4d points into a packed buffer.\n * @param data array of xyzw\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\n const numValues = 4 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n result[i++] = p.w;\n }\n return result;\n }\n /** unpack from ... to array of Point4d */\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\n const result = [];\n for (let i = 0; i + 3 < data.length; i += 4) {\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\n }\n return result;\n }\n /**\n * Unpack packed 4D data to a Point3d array and an array of weights.\n * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].\n * @param data input 4D points (packed)\n * @param points output 3D data\n * @param weights output weights (w portion of input)\n * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.\n */\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\n pointFormatter: (x: number, y: number, z: number) => any = (x, y, z) => Point3d.create(x, y, z)) {\n points.length = 0;\n weights.length = 0;\n for (let i = 0; i + 3 < data.length; i += 4) {\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\n weights.push(data[i + 3]);\n }\n }\n private static _workPoint4d = Point4d.create();\n /**\n * Multiply (and replace) each block of 4 values as a Point4d.\n * @param transform transform to apply\n * @param xyzw array of x,y,z,w points.\n */\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\n const numXYZW = xyzw.length;\n const xyzw1 = Point4dArray._workPoint4d;\n for (let i = 0; i + 3 < numXYZW; i += 4) {\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\n xyzw[i] = xyzw1.x;\n xyzw[i + 1] = xyzw1.y;\n xyzw[i + 2] = xyzw1.z;\n xyzw[i + 3] = xyzw1.w;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point4d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 4)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3], tolerance))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n for (const xyzw of data) {\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 4) {\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n}\n/**\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\n * @public\n */\n\nexport class Point3dArray {\n /**\n * Copy 3d points into a packed buffer.\n * @param data array of xyz\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point3d[], result?: Float64Array): Float64Array {\n const numValues = 3 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Copy 3d points into a packed number array.\n * @param data array of xyz\n * @param result optional destination array.\n * @return packed number array\n */\n public static packToNumberArray(data: Point3d[], result?: number[]): number[] {\n const numValues = 3 * data.length;\n if (!result)\n result = Array<number>(numValues);\n result.length = numValues;\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Compute the 8 weights of trilinear mapping\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\n * @param weights preallocated array to receive weights.\n * @param u0 low u weight\n * @param u1 high u weight\n * @param v0 low v weight\n * @param v1 high v weight\n * @param w0 low w weight\n * @param w1 high w weight\n */\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\n\n weights[0] = u0 * v0 * w0;\n weights[1] = u1 * v0 * w0;\n weights[2] = u0 * v1 * w0;\n weights[3] = u1 * v1 * w0;\n weights[4] = u0 * v0 * w1;\n weights[5] = u1 * v0 * w1;\n weights[6] = u0 * v1 * w1;\n weights[7] = u1 * v1 * w1;\n }\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].x;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].y;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].z;\n return sum;\n }\n\n private static _weightUVW = new Float64Array(8);\n private static _weightDU = new Float64Array(8);\n private static _weightDV = new Float64Array(8);\n private static _weightDW = new Float64Array(8);\n /**\n * Compute a point by trilinear mapping.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result point\n */\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\n if (!result) result = Point3d.create(0, 0, 0);\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n let a;\n for (let i = 0; i < 8; i++) {\n a = this._weightUVW[i];\n result.x += a * points[i].x;\n result.y += a * points[i].y;\n result.z += a * points[i].z;\n }\n return result;\n }\n /**\n * Compute a point and derivatives wrt uvw by trilinear mapping.\n * * evaluated point is the point part of the transform\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result transform\n */\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\n return Transform.createRowValues(\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\n result);\n }\n /** unpack from a number array or Float64Array to an array of `Point3d` */\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\n const result = [];\n for (let i = 0; i + 2 < data.length; i += 3) {\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n }\n return result;\n }\n\n /**\n * Return a 2-dimensional array containing all the values of `data` in arrays of numPerBlock\n * @param data simple array of numbers.\n * @param numPerBlock number of values in each block at first level down.\n */\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n while (i < n) {\n // there is at least one more value for a block\n const row = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n row.push(data[i]);\n }\n result.push(row);\n }\n return result;\n }\n\n /**\n * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.\n * @param data simple array of numbers\n * @param numPerBlock number of values in each block\n * @param numPerRow number of blocks per row\n */\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n let i2;\n while (i < n) {\n const row = [];\n i2 = i + numPerBlock * numPerRow;\n while (i < i2) {\n const block = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n block.push(data[i]);\n }\n row.push(block);\n }\n result.push(row);\n }\n return result;\n }\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\n const xyz1 = Point3d.create();\n const numXYZ = xyz.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\n xyz[i] = xyz1.x;\n xyz[i + 1] = xyz1.y;\n xyz[i + 2] = xyz1.z;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point3d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 3)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return simple average of all coordinates. (000 if empty array) */\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\n if (points instanceof IndexedXYZCollection) {\n result = Point3d.create(0, 0, 0, result);\n const p = Point3d.create();\n if (points.length > 0) {\n for (let i = 0; i < points.length; i++) {\n points.getPoint3dAtCheckedPointIndex(i, p);\n result.x += p.x; result.y += p.y; result.z += p.z;\n }\n result.scaleInPlace(1.0 / points.length);\n }\n return result;\n }\n const carrier = new Point3dArrayCarrier(points);\n return this.centroid(carrier);\n }\n\n /** Return the index of the point most distant from spacePoint */\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n for (let i = 0; i < points.length; i++) {\n d = spacePoint.distance(points[i]);\n if (d > dMax) {\n spacePoint.vectorTo(points[i], farVector);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n let vectorAB; // to be reused in loop !!!\n for (let i = 0; i < points.length; i++) {\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\n d = vectorAB.crossProductMagnitude(vector);\n if (d > dMax) {\n farVector.setFrom(vectorAB);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n\n /** Return the index of the closest point in the array (full xyz) */\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\n let index = -1;\n let dMin = Number.MAX_VALUE;\n let d;\n const x0 = spacePoint.x;\n const y0 = spacePoint.y;\n const z0 = spacePoint.z;\n for (let i = 0; i < data.length; i++) {\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\n if (d < dMin) {\n index = i;\n dMin = d;\n }\n }\n return index;\n }\n /** return true iff all points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n let xyz;\n for (xyz of data) {\n if (Math.abs(plane.altitude(xyz)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n /**\n * Sum lengths of edges.\n * @param data points.\n */\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\n let sum = 0.0;\n\n if (Array.isArray(data)) {\n const n = selectOptionalClampedMin(data.length, maxPointsToUse, 1) - 1;\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\n if (addClosureEdge && n > 0)\n sum += data[0].distance(data[n]);\n\n } else if (data instanceof Float64Array) {\n const numXYZ = selectOptionalClampedMin(data.length, maxPointsToUse, 3);\n let i = 0;\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\n data[i + 4] - data[i + 1],\n data[i + 5] - data[i + 2]);\n }\n if (addClosureEdge && i >= 3) {\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\n data[1] - data[i + 1],\n data[2] - data[i + 2]);\n }\n }\n return sum;\n }\n\n /**\n * Count the number of points, but ...\n * * ignore trailing duplicates of point 0.\n * * return 0 if there are any duplicates within the remaining points.\n * @param points points to examine.\n */\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\n let n = points.length;\n // strip of (allow) trailing duplicates ...\n while (n > 1) {\n if (points[0].isAlmostEqual(points[n - 1], tolerance))\n n--;\n else\n break;\n }\n for (let i = 0; i + 1 < n; i++)\n if (points[i].isAlmostEqual(points[i + 1], tolerance))\n return 0;\n return n;\n }\n\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\n const result: Point3d[] = [];\n if (data.length === 0)\n return result;\n if (data instanceof Float64Array) {\n for (let i = 0; i + 2 < data.length; i += 3)\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n return result;\n }\n for (const p of data) {\n if (Array.isArray(p))\n result.push(Point3d.create(p[0], p[1], p[2]));\n else\n result.push(Point3d.create(p.x, p.y, p.z));\n }\n return result;\n }\n /**\n * Return an array containing Point2d with xy parts of each Point3d\n * @param data source data\n */\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\n }\n /**\n * clone points in the input array, inserting points within each edge to limit edge length.\n * @param points array of points\n * @param maxEdgeLength max length of an edge\n */\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\n if (points.length === 0)\n return [];\n const result = [points[0]];\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1].distance(points[i]);\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\n for (let k = 1; k < n; k++)\n result.push(points[i - 1].interpolate(k / n, points[i]));\n result.push(points[i]);\n\n }\n return result;\n }\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\n */\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\n // data is an array ... each member is either Point3d or [x,y,z]\n const result = [];\n for (const p of data) {\n if (p instanceof Point3d) {\n result.push([p.x, p.y, p.z]);\n } else if (Array.isArray(p)) {\n const x = p.length > 0 ? p[0] : 0.0;\n const y = p.length > 1 ? p[1] : 0.0;\n const z = p.length > 2 ? p[2] : 0.0;\n result.push([x, y, z]);\n } else {\n const x = p.x !== undefined ? p.x : 0.0;\n const y = p.y !== undefined ? p.y : 0.0;\n const z = p.z !== undefined ? p.z : 0.0;\n result.push([x, y, z]);\n }\n }\n return result;\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\n */\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\n const result = new Float64Array(data.length * 3);\n let i = 0;\n for (const p of data) {\n if (p instanceof Point3d) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n } else if (Array.isArray(p)) {\n result[i++] = p.length > 0 ? p[0] : 0.0;\n result[i++] = p.length > 1 ? p[1] : 0.0;\n result[i++] = p.length > 2 ? p[2] : 0.0;\n } else {\n result[i++] = p.x !== undefined ? p.x : 0.0;\n result[i++] = p.y !== undefined ? p.y : 0.0;\n result[i++] = p.z !== undefined ? p.z : 0.0;\n }\n }\n return result;\n }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n\n /**\n * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].\n * * Extrapolation options when the projection is outside of the fraction range [0,1] are:\n * * false ==> return distance to closest endpoint\n * * true ==> return distance to extended line segment\n * * There is no index checking!\n */\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\n const uDotU = vectorU.dotProduct(vectorU);\n const uDotV = vectorU.dotProduct(vectorV);\n const fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\n if (fraction === undefined)\n return vectorV.magnitude(); // AC is degenerate; return ||B-A||\n if (!extrapolate) {\n if (fraction > 1.0)\n return points[indexB].distance(points[indexC]); // return ||B-C||\n if (fraction < 0.0)\n return vectorV.magnitude(); // return ||B-A||\n }\n // return distance to projection on (extended) segment\n const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\n // h2 should never be negative except for quirky tolerance...\n return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);\n }\n\n /**\n * Computes the hull of the XY projection of points.\n * @param points input points, z-coordinates ignored.\n * @param hullPoints (output) points on the convex hull (cloned from input points).\n * @param insidePoints (output) points not on the convex hull (cloned from input points).\n * @param addClosurePoint whether to append the first hull point to `hullPoints`.\n */\n public static computeConvexHullXY(\n points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false,\n ): void {\n hullPoints.length = 0;\n insidePoints.length = 0;\n let n = points.length;\n // get deep copy\n const xy1: Point3d[] = points.slice(0, n);\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n if (n < 3) {\n for (const p of xy1)\n hullPoints.push(p);\n if (addClosurePoint && xy1.length > 0)\n hullPoints.push(xy1[0]);\n return;\n }\n hullPoints.push(xy1[0]); // this is sure to stay\n hullPoints.push(xy1[1]); // this one can be removed in loop.\n let numInside = 0;\n // first sweep creates upper hull\n for (let i = 2; i < n; i++) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n xy1[numInside++] = hullPoints[top];\n top--;\n hullPoints.pop();\n }\n hullPoints.push(candidate);\n }\n const i0 = hullPoints.length - 1;\n xy1.length = numInside;\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n n = xy1.length;\n // xy1.back () is already on stack.\n hullPoints.push(xy1[n - 1]);\n for (let i = n - 1; i-- > 0;) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n insidePoints.push(hullPoints[top]);\n top--;\n hullPoints.pop();\n }\n if (i > 0) // don't replicate start\n hullPoints.push(candidate);\n }\n if (addClosurePoint)\n hullPoints.push(hullPoints[0]);\n }\n /**\n * Return (clones of) points in data[] with min and max x and y parts.\n * @param data array to examine.\n */\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\n if (data.length === 0)\n return undefined;\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\n let q;\n for (let i = 1; i < data.length; i++) {\n q = data[i];\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\n }\n return result;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PointStreaming.js","sourceRoot":"","sources":["../../../src/geometry3d/PointStreaming.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\r\nimport { IndexedXYZCollection, LineStringDataVariant, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\r\nimport { Point3d } from \"./Point3dVector3d\";\r\nimport { Range3d } from \"./Range\";\r\nimport { Transform } from \"./Transform\";\r\n\r\n//\r\n// remarks: point array variants . . .\r\n// * [[x,y,z], ...]\r\n// * [[Point3d, Point3d]\r\n// * [GrowableXYZArray, ..]\r\n//\r\n/**\r\n * \"no-op\" base class for stream handlers\r\n * @internal\r\n */\r\nexport class PointStreamXYZHandlerBase {\r\n public startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void { }\r\n public handleXYZ(_x: number, _y: number, _z: number): void { }\r\n public endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void { }\r\n}\r\n/** Base class for handling points in pairs.\r\n * * Callers implement handleXYZXYZ to receive point pairs.\r\n * * Callers may implement startChain and endChain.\r\n * * Beware that if startChain is implemented it must call super.startChain () to reset internal x0, y0,z0 to undefined.\r\n * * If that is not done, a point pair will appear from the end of previous chain to start of new chain.\r\n * * This (intermediate base) class does NOT override startChain\r\n */\r\nexport class PointStreamXYZXYZHandlerBase extends PointStreamXYZHandlerBase {\r\n private _x0?: number;\r\n private _y0?: number;\r\n private _z0?: number;\r\n public override handleXYZ(x: number, y: number, z: number): void {\r\n if (this._x0 !== undefined)\r\n this.handleXYZXYZ(this._x0, this._y0!, this._z0!, x, y, z);\r\n this._x0 = x;\r\n this._y0 = y;\r\n this._z0 = z;\r\n }\r\n public override startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\r\n this._x0 = this._y0 = this._z0 = undefined;\r\n }\r\n /**\r\n * Handler function called successively for each point0, point1 pair. Concrete class should implement this.\r\n * @param _x0 x coordinate at point 0\r\n * @param _y0 y coordinate of point 0\r\n * @param _z0 z coordinate of point 0\r\n * @param _x1 x coordinate of point 1\r\n * @param _y1 y coordinate of point 1\r\n * @param _z1 z coordinate of point 1\r\n */\r\n public handleXYZXYZ(_x0: number, _y0: number, _z0: number, _x1: number, _y1: number, _z1: number): void { }\r\n}\r\n/**\r\n * Concrete class to handle startChain, handleXYZ and endChain calls and return a (one-level deep array of\r\n * GrowableXYZArray\r\n */\r\nexport class PointStreamGrowableXYZArrayCollector extends PointStreamXYZHandlerBase {\r\n private _pointArrays?: GrowableXYZArray[];\r\n private _currentData?: GrowableXYZArray;\r\n public override startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\r\n this._currentData = undefined;\r\n }\r\n public override handleXYZ(x: number, y: number, z: number): void {\r\n if (!this._currentData)\r\n this._currentData = new GrowableXYZArray();\r\n this._currentData.pushXYZ(x, y, z);\r\n }\r\n public override endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\r\n if (this._currentData !== undefined) {\r\n if (this._pointArrays === undefined)\r\n this._pointArrays = [];\r\n this._pointArrays.push(this._currentData);\r\n this._currentData = undefined;\r\n }\r\n }\r\n /** Return MultiLineStringDataVariant as an array of GrowableXYZArray */\r\n public claimArrayOfGrowableXYZArray(): GrowableXYZArray[] | undefined {\r\n const result = this._pointArrays;\r\n this._pointArrays = undefined;\r\n return result;\r\n }\r\n}\r\n/**\r\n * PointStream handler to collect the range of points.\r\n */\r\nexport class PointStreamRangeCollector extends PointStreamXYZHandlerBase {\r\n private _range?: Range3d;\r\n private _transform?: Transform;\r\n\r\n /**\r\n * Constructor.\r\n * @param transform optional Transform to be applied to each point before expanding the range in [[handleXYZ]].\r\n * @param range optional existing range to expand and return in [[claimResult]].\r\n */\r\n public constructor(transform?: Transform, range?: Range3d) {\r\n super();\r\n if (transform)\r\n this._transform = transform;\r\n if (range)\r\n this._range = range;\r\n }\r\n\r\n public override handleXYZ(x: number, y: number, z: number): void {\r\n if (!this._range)\r\n this._range = Range3d.createNull();\r\n if (this._transform)\r\n this._range.extendTransformedXYZ(this._transform, x, y, z);\r\n else\r\n this._range.extendXYZ(x, y, z);\r\n }\r\n\r\n public claimResult(): Range3d {\r\n const range = this._range;\r\n this._range = undefined;\r\n if (!range)\r\n return Range3d.createNull();\r\n return range;\r\n }\r\n}\r\n\r\nexport class PointStringDeepXYZArrayCollector {\r\n // The 0 entry in this stack \"should\" always end up as a single array.\r\n // Hypothetically some caller might have do start-end that put multiple things\r\n // there. Hence the 0 entry (not the array itself) is the collected result.\r\n private _resultStack: any[];\r\n private _xyzFunction: (x: number, y: number, z: number) => any;\r\n /**\r\n *\r\n * @param xyzFunction function to map (x,y,z) to the leaf object type in the arrays.\r\n */\r\n public constructor(xyzFunction: (x: number, y: number, z: number) => any) {\r\n this._xyzFunction = xyzFunction;\r\n this._resultStack = [];\r\n // create the [0] placeholder.\r\n this._resultStack.push([]);\r\n }\r\n\r\n public startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\r\n this._resultStack.push([]);\r\n }\r\n\r\n public handleXYZ(x: number, y: number, z: number): void {\r\n this._resultStack[this._resultStack.length - 1].push(this._xyzFunction(x, y, z));\r\n }\r\n public endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\r\n const q = this._resultStack[this._resultStack.length - 1];\r\n this._resultStack.pop();\r\n this._resultStack[this._resultStack.length - 1].push(q);\r\n }\r\n\r\n public claimResult(): any[] {\r\n const r = this._resultStack[0];\r\n if (r.length === 1)\r\n return r[0];\r\n return r;\r\n }\r\n}\r\n/**\r\n * class for converting variant point data into more specific forms.\r\n * @internal\r\n */\r\nexport class VariantPointDataStream {\r\n private static _workPoint?: Point3d;\r\n /** Invoke a callback with each x,y,z from an array of points in variant forms.\r\n * @param startChainCallback called to announce the beginning of points (or recursion)\r\n * @param pointCallback (index, x,y,z) = function to receive point coordinates one by one\r\n * @param endChainCallback called to announce the end of handling of an array.\r\n */\r\n public static streamXYZ(data: MultiLineStringDataVariant, handler: PointStreamXYZHandlerBase) {\r\n let numPoint = 0;\r\n if (Array.isArray(data)) {\r\n // If the first entry is a point, expect the entire array to be points.\r\n // otherwise recurse to each member of this array.\r\n if (data.length > 0 && Point3d.isAnyImmediatePointType(data[0])) {\r\n handler.startChain(data, true);\r\n for (const p of data) {\r\n const x = Point3d.accessX(p);\r\n const y = Point3d.accessY(p);\r\n const z = Point3d.accessZ(p, 0) as number;\r\n if (x !== undefined && y !== undefined)\r\n handler.handleXYZ(x, y, z);\r\n numPoint++;\r\n }\r\n handler.endChain(data, true);\r\n } else {\r\n // This is an array that does not immediately have points.\r\n handler.startChain(data, false);\r\n for (const child of data) {\r\n numPoint += this.streamXYZ((child as unknown) as LineStringDataVariant, handler);\r\n }\r\n handler.endChain(data, false);\r\n }\r\n } else if (data instanceof IndexedXYZCollection) {\r\n handler.startChain(data, true);\r\n const q = VariantPointDataStream._workPoint = Point3d.create(0, 0, 0, VariantPointDataStream._workPoint);\r\n for (let i = 0; i < data.length; i++) {\r\n data.getPoint3dAtCheckedPointIndex(i, q);\r\n numPoint++;\r\n handler.handleXYZ(q.x, q.y, q.z);\r\n }\r\n handler.endChain(data, true);\r\n }\r\n return numPoint;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"PointStreaming.js","sourceRoot":"","sources":["../../../src/geometry3d/PointStreaming.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module CartesianGeometry\n */\n\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\nimport { IndexedXYZCollection, LineStringDataVariant, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Point3d } from \"./Point3dVector3d\";\nimport { Range3d } from \"./Range\";\nimport { Transform } from \"./Transform\";\n\n//\n// remarks: point array variants . . .\n// * [[x,y,z], ...]\n// * [[Point3d, Point3d]\n// * [GrowableXYZArray, ..]\n//\n/**\n * \"no-op\" base class for stream handlers\n * @internal\n */\nexport class PointStreamXYZHandlerBase {\n public startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void { }\n public handleXYZ(_x: number, _y: number, _z: number): void { }\n public endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void { }\n}\n/** Base class for handling points in pairs.\n * * Callers implement handleXYZXYZ to receive point pairs.\n * * Callers may implement startChain and endChain.\n * * Beware that if startChain is implemented it must call super.startChain () to reset internal x0, y0,z0 to undefined.\n * * If that is not done, a point pair will appear from the end of previous chain to start of new chain.\n * * This (intermediate base) class does NOT override startChain\n */\nexport class PointStreamXYZXYZHandlerBase extends PointStreamXYZHandlerBase {\n private _x0?: number;\n private _y0?: number;\n private _z0?: number;\n public override handleXYZ(x: number, y: number, z: number): void {\n if (this._x0 !== undefined)\n this.handleXYZXYZ(this._x0, this._y0!, this._z0!, x, y, z);\n this._x0 = x;\n this._y0 = y;\n this._z0 = z;\n }\n public override startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\n this._x0 = this._y0 = this._z0 = undefined;\n }\n /**\n * Handler function called successively for each point0, point1 pair. Concrete class should implement this.\n * @param _x0 x coordinate at point 0\n * @param _y0 y coordinate of point 0\n * @param _z0 z coordinate of point 0\n * @param _x1 x coordinate of point 1\n * @param _y1 y coordinate of point 1\n * @param _z1 z coordinate of point 1\n */\n public handleXYZXYZ(_x0: number, _y0: number, _z0: number, _x1: number, _y1: number, _z1: number): void { }\n}\n/**\n * Concrete class to handle startChain, handleXYZ and endChain calls and return a (one-level deep array of\n * GrowableXYZArray\n */\nexport class PointStreamGrowableXYZArrayCollector extends PointStreamXYZHandlerBase {\n private _pointArrays?: GrowableXYZArray[];\n private _currentData?: GrowableXYZArray;\n public override startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\n this._currentData = undefined;\n }\n public override handleXYZ(x: number, y: number, z: number): void {\n if (!this._currentData)\n this._currentData = new GrowableXYZArray();\n this._currentData.pushXYZ(x, y, z);\n }\n public override endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\n if (this._currentData !== undefined) {\n if (this._pointArrays === undefined)\n this._pointArrays = [];\n this._pointArrays.push(this._currentData);\n this._currentData = undefined;\n }\n }\n /** Return MultiLineStringDataVariant as an array of GrowableXYZArray */\n public claimArrayOfGrowableXYZArray(): GrowableXYZArray[] | undefined {\n const result = this._pointArrays;\n this._pointArrays = undefined;\n return result;\n }\n}\n/**\n * PointStream handler to collect the range of points.\n */\nexport class PointStreamRangeCollector extends PointStreamXYZHandlerBase {\n private _range?: Range3d;\n private _transform?: Transform;\n\n /**\n * Constructor.\n * @param transform optional Transform to be applied to each point before expanding the range in [[handleXYZ]].\n * @param range optional existing range to expand and return in [[claimResult]].\n */\n public constructor(transform?: Transform, range?: Range3d) {\n super();\n if (transform)\n this._transform = transform;\n if (range)\n this._range = range;\n }\n\n public override handleXYZ(x: number, y: number, z: number): void {\n if (!this._range)\n this._range = Range3d.createNull();\n if (this._transform)\n this._range.extendTransformedXYZ(this._transform, x, y, z);\n else\n this._range.extendXYZ(x, y, z);\n }\n\n public claimResult(): Range3d {\n const range = this._range;\n this._range = undefined;\n if (!range)\n return Range3d.createNull();\n return range;\n }\n}\n\nexport class PointStringDeepXYZArrayCollector {\n // The 0 entry in this stack \"should\" always end up as a single array.\n // Hypothetically some caller might have do start-end that put multiple things\n // there. Hence the 0 entry (not the array itself) is the collected result.\n private _resultStack: any[];\n private _xyzFunction: (x: number, y: number, z: number) => any;\n /**\n *\n * @param xyzFunction function to map (x,y,z) to the leaf object type in the arrays.\n */\n public constructor(xyzFunction: (x: number, y: number, z: number) => any) {\n this._xyzFunction = xyzFunction;\n this._resultStack = [];\n // create the [0] placeholder.\n this._resultStack.push([]);\n }\n\n public startChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\n this._resultStack.push([]);\n }\n\n public handleXYZ(x: number, y: number, z: number): void {\n this._resultStack[this._resultStack.length - 1].push(this._xyzFunction(x, y, z));\n }\n public endChain(_chainData: MultiLineStringDataVariant, _isLeaf: boolean): void {\n const q = this._resultStack[this._resultStack.length - 1];\n this._resultStack.pop();\n this._resultStack[this._resultStack.length - 1].push(q);\n }\n\n public claimResult(): any[] {\n const r = this._resultStack[0];\n if (r.length === 1)\n return r[0];\n return r;\n }\n}\n/**\n * class for converting variant point data into more specific forms.\n * @internal\n */\nexport class VariantPointDataStream {\n private static _workPoint?: Point3d;\n /** Invoke a callback with each x,y,z from an array of points in variant forms.\n * @param startChainCallback called to announce the beginning of points (or recursion)\n * @param pointCallback (index, x,y,z) = function to receive point coordinates one by one\n * @param endChainCallback called to announce the end of handling of an array.\n */\n public static streamXYZ(data: MultiLineStringDataVariant, handler: PointStreamXYZHandlerBase) {\n let numPoint = 0;\n if (Array.isArray(data)) {\n // If the first entry is a point, expect the entire array to be points.\n // otherwise recurse to each member of this array.\n if (data.length > 0 && Point3d.isAnyImmediatePointType(data[0])) {\n handler.startChain(data, true);\n for (const p of data) {\n const x = Point3d.accessX(p);\n const y = Point3d.accessY(p);\n const z = Point3d.accessZ(p, 0) as number;\n if (x !== undefined && y !== undefined)\n handler.handleXYZ(x, y, z);\n numPoint++;\n }\n handler.endChain(data, true);\n } else {\n // This is an array that does not immediately have points.\n handler.startChain(data, false);\n for (const child of data) {\n numPoint += this.streamXYZ((child as unknown) as LineStringDataVariant, handler);\n }\n handler.endChain(data, false);\n }\n } else if (data instanceof IndexedXYZCollection) {\n handler.startChain(data, true);\n const q = VariantPointDataStream._workPoint = Point3d.create(0, 0, 0, VariantPointDataStream._workPoint);\n for (let i = 0; i < data.length; i++) {\n data.getPoint3dAtCheckedPointIndex(i, q);\n numPoint++;\n handler.handleXYZ(q.x, q.y, q.z);\n }\n handler.endChain(data, true);\n }\n return numPoint;\n }\n\n}\n"]}