paperjs-offset 2.0.0 → 2.1.0

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.
package/README.md CHANGED
@@ -341,7 +341,7 @@ npm run release:major
341
341
  npm run release:ship
342
342
  ```
343
343
 
344
- `release:ship` 要求当前提交带有匹配当前版本号的 tag,会先检查 `npm whoami` 和 `gh auth status`,再重新运行 `release:check`,然后 `git push origin HEAD --follow-tags`、`npm publish`,最后通过 GitHub CLI 执行 `gh release create --generate-notes`。如果 npm 发布需要 2FA,可以运行 `npm run release:ship -- --otp=123456`。
344
+ `release:ship` 要求当前提交带有匹配当前版本号的 tag,会先检查 `npm whoami` 和 `gh auth status`,再重新运行 `release:check`,然后显式推送当前分支和版本 tag、用官方 npm registry 执行 `npm publish`,最后通过 GitHub CLI 执行 `gh release create --generate-notes`。如果 npm 发布需要 2FA,可以运行 `npm run release:ship -- --otp=123456`。
345
345
 
346
346
  `release:check` 会运行 typecheck、测试、`npm audit` 和 `npm pack --dry-run --ignore-scripts`。`npm test` 已经先完成构建,因此 pack 校验不依赖 npm lifecycle。直接执行 `npm publish` 时,`prepublishOnly` 也会运行同一套 release check。
347
347
 
@@ -688,7 +688,7 @@ After verifying the version commit and tag, ship the release:
688
688
  npm run release:ship
689
689
  ```
690
690
 
691
- `release:ship` requires the current commit to have the tag matching the current package version. It checks `npm whoami` and `gh auth status`, reruns `release:check`, then runs `git push origin HEAD --follow-tags`, `npm publish`, and `gh release create --generate-notes` through the GitHub CLI. If npm publish requires 2FA, run `npm run release:ship -- --otp=123456`.
691
+ `release:ship` requires the current commit to have the tag matching the current package version. It checks `npm whoami` and `gh auth status`, reruns `release:check`, explicitly pushes the current branch and version tag, publishes to the official npm registry, and runs `gh release create --generate-notes` through the GitHub CLI. If npm publish requires 2FA, run `npm run release:ship -- --otp=123456`.
692
692
 
693
693
  `release:check` runs typecheck, tests, `npm audit`, and `npm pack --dry-run --ignore-scripts`. `npm test` builds first, so the pack check does not depend on npm lifecycle scripts. Direct `npm publish` also runs the same release check through `prepublishOnly`.
694
694
 
package/dist/index.cjs CHANGED
@@ -554,6 +554,72 @@ function getNonSelfIntersectionPath(path) {
554
554
  }
555
555
  return path;
556
556
  }
557
+ function offsetCompoundChild(child, parent, offset, join, limit, strategy) {
558
+ if (child.segments.length <= 1) {
559
+ return null;
560
+ }
561
+ if (!isSameDirection(child, parent)) {
562
+ child.reverse();
563
+ }
564
+ var childOffset = offsetSimpleShape(child, offset, join, limit, strategy);
565
+ childOffset = normalize(childOffset);
566
+ if (childOffset.clockwise !== child.clockwise) {
567
+ childOffset.reverse();
568
+ }
569
+ if (childOffset instanceof paper.CompoundPath) {
570
+ childOffset.applyMatrix = true;
571
+ return childOffset.children;
572
+ }
573
+ return childOffset;
574
+ }
575
+ function offsetCompoundShape(path, offset, join, limit, strategy) {
576
+ var children = path.children.filter(function (child) { return child.segments.length > 1; });
577
+ var outers = children.filter(function (child) { return child.clockwise; });
578
+ var holes = children.filter(function (child) { return !child.clockwise; });
579
+ if (outers.length === 0 || holes.length === 0) {
580
+ var offsetParts = children.map(function (child) { return offsetCompoundChild(child, path, offset, join, limit, strategy); });
581
+ return new paper.CompoundPath({ children: offsetParts.flat().filter(function (child) { return !!child; }), insert: false });
582
+ }
583
+ var pieces = outers.map(function (outer) {
584
+ var outerOffset = offsetCompoundChild(outer, path, offset, join, limit, strategy);
585
+ var result = outerOffset instanceof Array
586
+ ? new paper.CompoundPath({ children: outerOffset, insert: false })
587
+ : outerOffset;
588
+ holes.forEach(function (hole) {
589
+ if (!outer.contains(hole.bounds.center)) {
590
+ return;
591
+ }
592
+ var holeOffset = offsetCompoundChild(hole, path, offset, join, limit, strategy);
593
+ if (!holeOffset) {
594
+ return;
595
+ }
596
+ var holePath = holeOffset instanceof Array
597
+ ? new paper.CompoundPath({ children: holeOffset, insert: false })
598
+ : holeOffset;
599
+ var next = result.subtract(holePath, { insert: false });
600
+ result.remove();
601
+ holePath.remove();
602
+ result = next;
603
+ });
604
+ return result;
605
+ });
606
+ if (pieces.length === 1) {
607
+ return pieces[0];
608
+ }
609
+ return pieces.slice(1).reduce(function (result, piece) {
610
+ var next = result.unite(piece, { insert: false });
611
+ result.remove();
612
+ piece.remove();
613
+ return next;
614
+ }, pieces[0]);
615
+ }
616
+ function hasCompoundHoles(path) {
617
+ if (!(path instanceof paper.CompoundPath)) {
618
+ return false;
619
+ }
620
+ var children = path.children;
621
+ return children.some(function (child) { return child.clockwise; }) && children.some(function (child) { return !child.clockwise; });
622
+ }
557
623
  function withoutAdaptiveFallback(strategy) {
558
624
  return {
559
625
  algorithm: 'robust',
@@ -609,37 +675,17 @@ function offsetPathWithStrategy(path, offset, join, limit, strategy) {
609
675
  return offsetPathAdaptive(path, offset, join, limit, strategy);
610
676
  }
611
677
  var nonSIPath = getNonSelfIntersectionPath(path);
678
+ var shouldNormalizeResult = !hasCompoundHoles(nonSIPath);
612
679
  var result = nonSIPath;
613
680
  if (nonSIPath instanceof paper.Path) {
614
681
  result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);
615
682
  }
616
683
  else {
617
- var offsetParts = nonSIPath.children.map(function (c) {
618
- if (c.segments.length > 1) {
619
- if (!isSameDirection(c, path)) {
620
- c.reverse();
621
- }
622
- var offsetPath_1 = offsetSimpleShape(c, offset, join, limit, strategy);
623
- offsetPath_1 = normalize(offsetPath_1);
624
- if (offsetPath_1.clockwise !== c.clockwise) {
625
- offsetPath_1.reverse();
626
- }
627
- if (offsetPath_1 instanceof paper.CompoundPath) {
628
- offsetPath_1.applyMatrix = true;
629
- return offsetPath_1.children;
630
- }
631
- else {
632
- return offsetPath_1;
633
- }
634
- }
635
- else {
636
- return null;
637
- }
638
- });
639
- var children = offsetParts.flat().filter(function (c) { return !!c; });
640
- result = new paper.CompoundPath({ children: children, insert: false });
684
+ result = offsetCompoundShape(nonSIPath, offset, join, limit, strategy);
685
+ }
686
+ if (shouldNormalizeResult) {
687
+ result = normalize(result);
641
688
  }
642
- result = normalize(result);
643
689
  result.copyAttributes(nonSIPath, false);
644
690
  result.remove();
645
691
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../.build/lib/offset_core.js","../.build/lib/index.js"],"sourcesContent":["import paper from 'paper';\nvar MAX_RECURSION_TIME = 20;\nvar STRATEGIES = [\n {\n algorithm: 'adaptive',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: true,\n },\n {\n algorithm: 'robust',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: false,\n },\n {\n algorithm: 'split',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n {\n algorithm: 'legacy',\n splitSelfIntersectingCurves: false,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n];\nfunction getStrategy(algorithm) {\n if (algorithm === 'auto') {\n return STRATEGIES[0];\n }\n return STRATEGIES.filter(function (strategy) { return strategy.algorithm === algorithm; })[0] || STRATEGIES[0];\n}\n/**\n * Offset the start/terminal segment of a bezier curve\n * @param segment segment to offset\n * @param curve curve to offset\n * @param handleNormal the normal of the the line formed of two handles\n * @param offset offset value\n */\nfunction offsetSegment(segment, curve, handleNormal, offset) {\n var isFirst = segment.curve === curve;\n // get offset vector\n var offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);\n // get offset point\n var point = segment.point.add(offsetVector);\n var newSegment = new paper.Segment(point);\n // handleOut for start segment & handleIn for terminal segment\n var handle = (isFirst ? 'handleOut' : 'handleIn');\n newSegment[handle] = segment[handle].add(handleNormal.subtract(offsetVector).divide(2));\n return newSegment;\n}\n/**\n * Adaptive offset a curve by repeatly apply the approximation proposed by Tiller and Hanson.\n * @param curve curve to offset\n * @param offset offset value\n */\nfunction adaptiveOffsetCurve(curve, offset, strategy, recursionTime) {\n if (recursionTime === void 0) { recursionTime = 0; }\n var hNormal = (new paper.Curve(curve.segment1.handleOut.add(curve.segment1.point), new paper.Point(0, 0), new paper.Point(0, 0), curve.segment2.handleIn.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);\n var segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);\n var segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);\n if (recursionTime > MAX_RECURSION_TIME) {\n return [segment1, segment2];\n }\n // divide && re-offset\n var offsetCurve = new paper.Curve(segment1, segment2);\n var offsetCurveIntersections = offsetCurve.getIntersections(offsetCurve);\n var threshold = Math.min(Math.abs(offset) / 10, 1);\n var midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));\n var needsSplit = strategy.splitSelfIntersectingCurves\n ? offsetCurveIntersections.length > 0 || Math.abs(midOffset - Math.abs(offset)) > threshold\n : offsetCurveIntersections.length === 0 && Math.abs(midOffset - Math.abs(offset)) > threshold;\n if (needsSplit) {\n var subCurve = curve.divideAtTime(0.5);\n if (subCurve != null) {\n return adaptiveOffsetCurve(curve, offset, strategy, recursionTime + 1)\n .concat(adaptiveOffsetCurve(subCurve, offset, strategy, recursionTime + 1));\n }\n }\n return [segment1, segment2];\n}\n/**\n * Create a round join segment between two adjacent segments.\n */\nfunction makeRoundJoin(segment1, segment2, originPoint, radius) {\n var through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))\n .normalize(Math.abs(radius)).add(originPoint);\n var arc = new paper.Path.Arc({ from: segment1.point, to: segment2.point, through: through, insert: false });\n segment1.handleOut = arc.firstSegment.handleOut;\n segment2.handleIn = arc.lastSegment.handleIn;\n return arc.segments.length === 3 ? arc.segments[1] : null;\n}\nfunction det(p1, p2) {\n return p1.x * p2.y - p1.y * p2.x;\n}\n/**\n * Get the intersection point of point based lines\n */\nfunction getPointLineIntersections(p1, p2, p3, p4) {\n var l1 = p1.subtract(p2);\n var l2 = p3.subtract(p4);\n var dl1 = det(p1, p2);\n var dl2 = det(p3, p4);\n return new paper.Point(dl1 * l2.x - l1.x * dl2, dl1 * l2.y - l1.y * dl2).divide(det(l1, l2));\n}\n/**\n * Connect two adjacent bezier curve, each curve is represented by two segments,\n * create different types of joins or simply removal redundant segment.\n */\nfunction isOutsideJoin(origin, offset) {\n var _a;\n var previousCurve = (_a = origin.previous) === null || _a === void 0 ? void 0 : _a.curve;\n var nextCurve = origin.curve;\n if (!previousCurve || !nextCurve) {\n return true;\n }\n var tangentIn = previousCurve.getTangentAtTime(1);\n var tangentOut = nextCurve.getTangentAtTime(0);\n var turn = det(tangentIn, tangentOut);\n return Math.abs(turn) < 1e-9 || turn * offset > 0;\n}\nfunction connectAdjacentBezier(segments1, segments2, origin, joinType, offset, limit, closed, strategy) {\n var curve1 = new paper.Curve(segments1[0], segments1[1]);\n var curve2 = new paper.Curve(segments2[0], segments2[1]);\n var intersection = curve1.getIntersections(curve2);\n var distance = segments1[1].point.getDistance(segments2[0].point);\n var shouldJoin = !closed || !strategy.guardInsideJoins || isOutsideJoin(origin, offset);\n if (origin.isSmooth()) {\n segments2[0].handleOut = segments2[0].handleOut.project(origin.handleOut);\n segments2[0].handleIn = segments1[1].handleIn.project(origin.handleIn);\n segments2[0].point = segments1[1].point.add(segments2[0].point).divide(2);\n segments1.pop();\n }\n else {\n if (intersection.length === 0) {\n if (distance > Math.abs(offset) * 0.1) {\n // connect\n switch (joinType) {\n case 'miter':\n if (shouldJoin) {\n var join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)), curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));\n // prevent sharp angle\n var joinOffset = Math.max(join.getDistance(curve1.point2), join.getDistance(curve2.point1));\n if (joinOffset < Math.abs(offset) * limit) {\n segments1.push(new paper.Segment(join));\n }\n }\n break;\n case 'round':\n if (shouldJoin) {\n var mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);\n if (mid) {\n segments1.push(mid);\n }\n }\n break;\n default: break;\n }\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n else {\n var second1 = curve1.divideAt(intersection[0]);\n if (second1) {\n var join = second1.segment1;\n var second2 = curve2.divideAt(curve2.getIntersections(curve1)[0]);\n join.handleOut = second2 ? second2.segment1.handleOut : segments2[0].handleOut;\n segments1.pop();\n segments2[0] = join;\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n }\n}\n/**\n * Connect all the segments together.\n */\nfunction connectBeziers(rawSegments, join, source, offset, limit, strategy) {\n var originSegments = source.segments;\n var first = rawSegments[0].slice();\n for (var i = 0; i < rawSegments.length - 1; ++i) {\n connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit, source.closed, strategy);\n }\n if (source.closed) {\n connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit, source.closed, strategy);\n rawSegments[0][0] = first[0];\n }\n return rawSegments;\n}\nfunction reduceSingleChildCompoundPath(path) {\n if (path.children.length === 1) {\n path = path.children[0];\n path.remove(); // remove from parent, this is critical, or the style attributes will be ignored\n }\n return path;\n}\n/** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */\nfunction normalize(path, areaThreshold) {\n if (areaThreshold === void 0) { areaThreshold = 0.01; }\n if (path.closed) {\n var ignoreArea_1 = Math.abs(path.area * areaThreshold);\n if (!path.clockwise) {\n path.reverse();\n }\n path = path.unite(path, { insert: false });\n path = path.resolveCrossings();\n if (path instanceof paper.CompoundPath) {\n path.children.filter(function (c) { return Math.abs(c.area) < ignoreArea_1; }).forEach(function (c) { return c.remove(); });\n if (path.children.length === 1) {\n return reduceSingleChildCompoundPath(path);\n }\n }\n }\n return path;\n}\nfunction cleanupStrokeOutline(path, offset, strategy) {\n var result = normalize(path);\n if (strategy.simplifySelfIntersectingStroke && countSelfIntersections(result) > 0) {\n var simplified = result.clone({ insert: false });\n simplified.simplify(Math.max(Math.min(Math.abs(offset) * 0.02, 0.5), 0.1));\n result = normalize(simplified);\n }\n return result;\n}\nfunction isSameDirection(partialPath, fullPath) {\n var offset1 = partialPath.segments[0].location.offset;\n var offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;\n var sampleOffset = (offset1 + offset2) / 3;\n var originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;\n var originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;\n return originOffset1 < originOffset2;\n}\n/** Remove self intersection when offset is negative by point direction dectection. */\nfunction removeIntersection(path) {\n if (path.closed) {\n var newPath = path.unite(path, { insert: false });\n if (newPath instanceof paper.CompoundPath) {\n newPath.children.filter(function (c) {\n if (c.segments.length > 1) {\n return !isSameDirection(c, path);\n }\n else {\n return true;\n }\n }).forEach(function (c) { return c.remove(); });\n return reduceSingleChildCompoundPath(newPath);\n }\n }\n return path;\n}\nfunction getSegments(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children.map(function (c) { return c.segments; }).flat();\n }\n else {\n return path.segments;\n }\n}\n/**\n * Remove impossible segments in negative offset condition.\n */\nfunction removeOutsiders(newPath, path) {\n var segments = getSegments(newPath).slice();\n segments.forEach(function (segment) {\n if (!path.contains(segment.point)) {\n segment.remove();\n }\n });\n}\nfunction preparePath(path, offset) {\n var source = path.clone({ insert: false });\n source.reduce({});\n if (path.closed && !path.clockwise) {\n source.reverse();\n offset = -offset;\n }\n return [source, offset];\n}\nfunction offsetSimpleShape(path, offset, join, limit, strategy) {\n var _a;\n var source;\n _a = preparePath(path, offset), source = _a[0], offset = _a[1];\n var curves = source.curves.slice();\n var offsetCurves = curves.map(function (curve) { return adaptiveOffsetCurve(curve, offset, strategy); }).flat();\n var raws = [];\n for (var i = 0; i < offsetCurves.length; i += 2) {\n raws.push(offsetCurves.slice(i, i + 2));\n }\n var segments = connectBeziers(raws, join, source, offset, limit, strategy).flat();\n var newPath = removeIntersection(new paper.Path({ segments: segments, insert: false, closed: path.closed }));\n newPath.reduce({});\n if (source.closed && ((source.clockwise && offset < 0) || (!source.clockwise && offset > 0))) {\n removeOutsiders(newPath, path);\n }\n // recovery path\n if (source.clockwise !== path.clockwise) {\n newPath.reverse();\n }\n return normalize(newPath);\n}\nfunction makeRoundCap(from, to, offset) {\n var origin = from.point.add(to.point).divide(2);\n var normal = to.point.subtract(from.point).rotate(-90, new paper.Point(0, 0)).normalize(offset);\n var through = origin.add(normal);\n var arc = new paper.Path.Arc({ from: from.point, to: to.point, through: through, insert: false });\n return arc.segments;\n}\nfunction connectSide(outer, inner, offset, cap) {\n if (outer instanceof paper.CompoundPath) {\n var cs = outer.children.map(function (c) { return ({ c: c, a: Math.abs(c.area) }); });\n cs = cs.sort(function (c1, c2) { return c2.a - c1.a; });\n outer = cs[0].c;\n }\n var oSegments = outer.segments.slice();\n var iSegments = inner.segments.slice();\n switch (cap) {\n case 'round':\n var heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);\n var tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);\n var result = new paper.Path({ segments: heads.concat(oSegments, tails, iSegments), closed: true, insert: false });\n result.reduce({});\n return result;\n default: return new paper.Path({ segments: oSegments.concat(iSegments), closed: true, insert: false });\n }\n}\nfunction offsetSimpleStroke(path, offset, join, cap, limit, strategy) {\n offset = path.closed && !path.clockwise ? -offset : offset;\n var positiveOffset = offsetSimpleShape(path, offset, join, limit, strategy);\n var negativeOffset = offsetSimpleShape(path, -offset, join, limit, strategy);\n if (path.closed) {\n return cleanupStrokeOutline(positiveOffset.subtract(negativeOffset, { insert: false }), offset, strategy);\n }\n else {\n var inner = negativeOffset;\n var holes = new Array();\n if (negativeOffset instanceof paper.CompoundPath) {\n holes = negativeOffset.children.filter(function (c) { return c.closed; });\n holes.forEach(function (h) { return h.remove(); });\n inner = negativeOffset.children[0];\n }\n inner.reverse();\n var final = connectSide(positiveOffset, inner, offset, cap);\n if (holes.length > 0) {\n for (var _i = 0, holes_1 = holes; _i < holes_1.length; _i++) {\n var hole = holes_1[_i];\n final = final.subtract(hole, { insert: false });\n }\n }\n return cleanupStrokeOutline(final, offset, strategy);\n }\n}\nfunction getChildPaths(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children;\n }\n return [path];\n}\nfunction finiteNumber(value) {\n return Number.isFinite(value);\n}\nfunction countSelfIntersections(path) {\n if (!path.closed) {\n return 0;\n }\n try {\n var children_1 = getChildPaths(path);\n var count_1 = 0;\n children_1.forEach(function (child, index) {\n count_1 += child.getIntersections(child).length;\n for (var i = index + 1; i < children_1.length; i += 1) {\n count_1 += child.getIntersections(children_1[i]).length;\n }\n });\n return count_1;\n }\n catch (error) {\n return 0;\n }\n}\nfunction samplePoints(path, maxPerChild) {\n if (maxPerChild === void 0) { maxPerChild = 16; }\n var points = [];\n getChildPaths(path).forEach(function (child) {\n if (!child.length || child.segments.length === 0) {\n return;\n }\n var count = Math.min(maxPerChild, Math.max(4, Math.ceil(child.length / 30)));\n for (var i = 0; i < count; i += 1) {\n var ratio = child.closed ? i / count : i / Math.max(count - 1, 1);\n var point = child.getPointAt(child.length * ratio);\n if (point) {\n points.push(point);\n }\n }\n });\n return points;\n}\nfunction containsPoint(path, point) {\n try {\n return path.contains(point);\n }\n catch (error) {\n return false;\n }\n}\nfunction distanceToPath(path, point) {\n try {\n var nearest = path.getNearestPoint(point);\n return nearest ? nearest.getDistance(point) : Number.POSITIVE_INFINITY;\n }\n catch (error) {\n return Number.POSITIVE_INFINITY;\n }\n}\nfunction addWarning(warnings, warning) {\n if (warnings.indexOf(warning) === -1) {\n warnings.push(warning);\n }\n}\nexport function analyzeOffsetQuality(source, result, offset, options) {\n if (options === void 0) { options = {}; }\n var warnings = new Array();\n var expectedClosed = options.stroke ? true : source.closed;\n var segmentCount = getSegments(result).length;\n var area = Math.abs(result.area || 0);\n var absOffset = Math.abs(offset);\n var score = segmentCount * 0.01;\n var containmentErrors = 0;\n var distanceErrors = 0;\n var bounds = result.bounds;\n if (segmentCount === 0) {\n score += 100000;\n addWarning(warnings, 'empty-result');\n }\n if (!bounds || !finiteNumber(bounds.x) || !finiteNumber(bounds.y) || !finiteNumber(bounds.width) || !finiteNumber(bounds.height)) {\n score += 100000;\n addWarning(warnings, 'non-finite-bounds');\n }\n if (result.closed !== expectedClosed) {\n score += 50000;\n addWarning(warnings, 'unexpected-closed-state');\n }\n var selfIntersections = countSelfIntersections(result);\n if (selfIntersections > 0) {\n score += selfIntersections * 1000;\n addWarning(warnings, 'self-intersection');\n }\n if (source.closed && result.closed && !options.stroke) {\n var sourceArea = Math.abs(source.area || 0);\n if (sourceArea > 0 && offset > 0 && area < sourceArea * 0.95) {\n score += ((sourceArea - area) / sourceArea) * 2000;\n addWarning(warnings, 'positive-offset-area-shrank');\n }\n if (sourceArea > 0 && offset < 0 && area > sourceArea * 1.05) {\n score += ((area - sourceArea) / sourceArea) * 2000;\n addWarning(warnings, 'negative-offset-area-grew');\n }\n if (sourceArea > 0 && offset < 0) {\n var areaRatio = area / sourceArea;\n if (areaRatio < 0.25) {\n score += (0.25 - areaRatio) * 4000;\n addWarning(warnings, 'negative-offset-collapse');\n }\n }\n if (sourceArea > 0 && offset > 0) {\n var sourceBounds = source.bounds;\n var centerShift = result.bounds.center.getDistance(sourceBounds.center);\n var centerTolerance = Math.max(absOffset * 1.15, Math.min(sourceBounds.width, sourceBounds.height) * 0.08);\n if (centerShift > centerTolerance) {\n score += (centerShift - centerTolerance) * 80;\n addWarning(warnings, 'offset-center-shift');\n }\n }\n var containmentTolerance_1 = Math.max(absOffset * 0.08, 0.5);\n var containmentSamples = offset >= 0 ? samplePoints(source) : samplePoints(result);\n containmentSamples.forEach(function (point) {\n var container = offset >= 0 ? result : source;\n if (!containsPoint(container, point) && distanceToPath(container, point) > containmentTolerance_1) {\n containmentErrors += 1;\n }\n });\n if (containmentErrors > 0) {\n score += containmentErrors * 150;\n addWarning(warnings, offset >= 0 ? 'source-outside-positive-offset' : 'negative-offset-outside-source');\n }\n }\n if (absOffset > 0.001) {\n var distanceTolerance_1 = Math.max(absOffset * 0.18, 0.75);\n samplePoints(result).forEach(function (point) {\n var distance = distanceToPath(source, point);\n if (finiteNumber(distance) && distance < distanceTolerance_1) {\n distanceErrors += 1;\n }\n });\n if (distanceErrors > 0) {\n score += distanceErrors * 35;\n addWarning(warnings, 'offset-distance-collapse');\n }\n }\n return {\n score: score,\n warnings: warnings,\n selfIntersections: selfIntersections,\n containmentErrors: containmentErrors,\n distanceErrors: distanceErrors,\n segmentCount: segmentCount,\n area: area,\n };\n}\nfunction pickBestResult(source, offset, stroke, makeResult) {\n var bestResult = null;\n var bestQuality = null;\n var firstError = null;\n STRATEGIES.forEach(function (strategy) {\n try {\n var result = makeResult(strategy);\n var quality = analyzeOffsetQuality(source, result, offset, { stroke: stroke });\n quality.algorithm = strategy.algorithm;\n if (!bestQuality || quality.score < bestQuality.score) {\n bestResult = result;\n bestQuality = quality;\n }\n }\n catch (error) {\n if (!firstError && error instanceof Error) {\n firstError = error;\n }\n }\n });\n if (!bestResult) {\n throw firstError || new Error('Unable to offset path with any algorithm');\n }\n return bestResult;\n}\nfunction getNonSelfIntersectionPath(path) {\n if (path.closed) {\n return path.unite(path, { insert: false });\n }\n return path;\n}\nfunction withoutAdaptiveFallback(strategy) {\n return {\n algorithm: 'robust',\n splitSelfIntersectingCurves: strategy.splitSelfIntersectingCurves,\n guardInsideJoins: strategy.guardInsideJoins,\n simplifySelfIntersectingStroke: strategy.simplifySelfIntersectingStroke,\n adaptiveFallback: false,\n };\n}\nfunction addAdaptiveCandidate(candidates, makeResult) {\n try {\n candidates.push(makeResult());\n }\n catch (error) {\n // Keep adaptive mode opportunistic: a failed fallback should not hide valid strict results.\n }\n}\nfunction pickBestCandidate(source, offset, stroke, candidates) {\n var bestResult = candidates[0];\n var bestQuality = analyzeOffsetQuality(source, bestResult, offset, { stroke: stroke });\n for (var i = 1; i < candidates.length; i += 1) {\n var quality = analyzeOffsetQuality(source, candidates[i], offset, { stroke: stroke });\n if (quality.score < bestQuality.score) {\n bestResult = candidates[i];\n bestQuality = quality;\n }\n }\n return bestResult;\n}\nfunction offsetPathAdaptive(path, offset, join, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, 'round', limit, baseStrategy); });\n }\n if (path.closed && offset < 0) {\n [0.8, 0.65, 0.5, 0.35, 0.25].forEach(function (factor) {\n var fallbackOffset = offset * factor;\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, 'round', limit, baseStrategy); });\n }\n });\n }\n if (candidates.length === 0) {\n return offsetPathWithStrategy(path, offset, join, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, false, candidates);\n}\nfunction offsetPathWithStrategy(path, offset, join, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetPathAdaptive(path, offset, join, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);\n }\n else {\n var offsetParts = nonSIPath.children.map(function (c) {\n if (c.segments.length > 1) {\n if (!isSameDirection(c, path)) {\n c.reverse();\n }\n var offsetPath_1 = offsetSimpleShape(c, offset, join, limit, strategy);\n offsetPath_1 = normalize(offsetPath_1);\n if (offsetPath_1.clockwise !== c.clockwise) {\n offsetPath_1.reverse();\n }\n if (offsetPath_1 instanceof paper.CompoundPath) {\n offsetPath_1.applyMatrix = true;\n return offsetPath_1.children;\n }\n else {\n return offsetPath_1;\n }\n }\n else {\n return null;\n }\n });\n var children = offsetParts.flat().filter(function (c) { return !!c; });\n result = new paper.CompoundPath({ children: children, insert: false });\n }\n result = normalize(result);\n result.copyAttributes(nonSIPath, false);\n result.remove();\n return result;\n}\nexport function offsetPath(path, offset, join, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, false, function (strategy) { return offsetPathWithStrategy(path, offset, join, limit, strategy); });\n }\n return offsetPathWithStrategy(path, offset, join, limit, getStrategy(algorithm));\n}\nfunction offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetStrokeAdaptive(path, offset, join, cap, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit, strategy);\n }\n else {\n var children = nonSIPath.children.flatMap(function (c) {\n return offsetSimpleStroke(c, offset, join, cap, limit, strategy);\n });\n result = children.reduce(function (c1, c2) { return c1.unite(c2, { insert: false }); });\n }\n result.strokeWidth = 0;\n result.fillColor = nonSIPath.strokeColor;\n result.shadowBlur = nonSIPath.shadowBlur;\n result.shadowColor = nonSIPath.shadowColor;\n result.shadowOffset = nonSIPath.shadowOffset;\n return result;\n}\nfunction offsetStrokeAdaptive(path, offset, join, cap, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', cap, limit, baseStrategy); });\n }\n if (cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, 'round', limit, baseStrategy); });\n }\n if (join !== 'round' && cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', 'round', limit, baseStrategy); });\n }\n if (candidates.length === 0) {\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, true, candidates);\n}\nexport function offsetStroke(path, offset, join, cap, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, true, function (strategy) { return offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy); });\n }\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, getStrategy(algorithm));\n}\n//# sourceMappingURL=offset_core.js.map","import paper from 'paper';\nimport { analyzeOffsetQuality, offsetPath as createOffsetPath, offsetStroke as createOffsetStroke } from './offset_core';\nfunction resolveOptions(options) {\n var _a, _b, _c, _d;\n return {\n join: (_a = options === null || options === void 0 ? void 0 : options.join) !== null && _a !== void 0 ? _a : 'miter',\n cap: (_b = options === null || options === void 0 ? void 0 : options.cap) !== null && _b !== void 0 ? _b : 'butt',\n limit: (_c = options === null || options === void 0 ? void 0 : options.limit) !== null && _c !== void 0 ? _c : 10,\n algorithm: (_d = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _d !== void 0 ? _d : 'auto',\n };\n}\nfunction insertResult(source, result, options) {\n if (!options || options.insert !== false) {\n (source.parent || paper.project.activeLayer).addChild(result);\n }\n}\nexport function offset(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetPath(path, distance, resolvedOptions.join, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function offsetStroke(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetStroke(path, distance, resolvedOptions.join, resolvedOptions.cap, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function analyze(source, result, distance, options) {\n return analyzeOffsetQuality(source, result, distance, options || {});\n}\nvar PaperOffset = /** @class */ (function () {\n function PaperOffset() {\n }\n PaperOffset.offset = function (path, distance, options) {\n return offset(path, distance, options);\n };\n PaperOffset.offsetStroke = function (path, distance, options) {\n return offsetStroke(path, distance, options);\n };\n PaperOffset.analyze = function (source, result, distance, options) {\n return analyze(source, result, distance, options);\n };\n return PaperOffset;\n}());\nexport { PaperOffset };\n/**\n * @deprecated EXTEND existing paper module is not recommend anymore\n */\nexport default function ExtendPaperJs(paperNs) {\n paperNs.Path.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.Path.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n}\nexport { ExtendPaperJs as extendPaperJs };\n//# sourceMappingURL=index.js.map"],"names":["offsetStroke","createOffsetPath","createOffsetStroke"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../.build/lib/offset_core.js","../.build/lib/index.js"],"sourcesContent":["import paper from 'paper';\nvar MAX_RECURSION_TIME = 20;\nvar STRATEGIES = [\n {\n algorithm: 'adaptive',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: true,\n },\n {\n algorithm: 'robust',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: false,\n },\n {\n algorithm: 'split',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n {\n algorithm: 'legacy',\n splitSelfIntersectingCurves: false,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n];\nfunction getStrategy(algorithm) {\n if (algorithm === 'auto') {\n return STRATEGIES[0];\n }\n return STRATEGIES.filter(function (strategy) { return strategy.algorithm === algorithm; })[0] || STRATEGIES[0];\n}\n/**\n * Offset the start/terminal segment of a bezier curve\n * @param segment segment to offset\n * @param curve curve to offset\n * @param handleNormal the normal of the the line formed of two handles\n * @param offset offset value\n */\nfunction offsetSegment(segment, curve, handleNormal, offset) {\n var isFirst = segment.curve === curve;\n // get offset vector\n var offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);\n // get offset point\n var point = segment.point.add(offsetVector);\n var newSegment = new paper.Segment(point);\n // handleOut for start segment & handleIn for terminal segment\n var handle = (isFirst ? 'handleOut' : 'handleIn');\n newSegment[handle] = segment[handle].add(handleNormal.subtract(offsetVector).divide(2));\n return newSegment;\n}\n/**\n * Adaptive offset a curve by repeatly apply the approximation proposed by Tiller and Hanson.\n * @param curve curve to offset\n * @param offset offset value\n */\nfunction adaptiveOffsetCurve(curve, offset, strategy, recursionTime) {\n if (recursionTime === void 0) { recursionTime = 0; }\n var hNormal = (new paper.Curve(curve.segment1.handleOut.add(curve.segment1.point), new paper.Point(0, 0), new paper.Point(0, 0), curve.segment2.handleIn.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);\n var segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);\n var segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);\n if (recursionTime > MAX_RECURSION_TIME) {\n return [segment1, segment2];\n }\n // divide && re-offset\n var offsetCurve = new paper.Curve(segment1, segment2);\n var offsetCurveIntersections = offsetCurve.getIntersections(offsetCurve);\n var threshold = Math.min(Math.abs(offset) / 10, 1);\n var midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));\n var needsSplit = strategy.splitSelfIntersectingCurves\n ? offsetCurveIntersections.length > 0 || Math.abs(midOffset - Math.abs(offset)) > threshold\n : offsetCurveIntersections.length === 0 && Math.abs(midOffset - Math.abs(offset)) > threshold;\n if (needsSplit) {\n var subCurve = curve.divideAtTime(0.5);\n if (subCurve != null) {\n return adaptiveOffsetCurve(curve, offset, strategy, recursionTime + 1)\n .concat(adaptiveOffsetCurve(subCurve, offset, strategy, recursionTime + 1));\n }\n }\n return [segment1, segment2];\n}\n/**\n * Create a round join segment between two adjacent segments.\n */\nfunction makeRoundJoin(segment1, segment2, originPoint, radius) {\n var through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))\n .normalize(Math.abs(radius)).add(originPoint);\n var arc = new paper.Path.Arc({ from: segment1.point, to: segment2.point, through: through, insert: false });\n segment1.handleOut = arc.firstSegment.handleOut;\n segment2.handleIn = arc.lastSegment.handleIn;\n return arc.segments.length === 3 ? arc.segments[1] : null;\n}\nfunction det(p1, p2) {\n return p1.x * p2.y - p1.y * p2.x;\n}\n/**\n * Get the intersection point of point based lines\n */\nfunction getPointLineIntersections(p1, p2, p3, p4) {\n var l1 = p1.subtract(p2);\n var l2 = p3.subtract(p4);\n var dl1 = det(p1, p2);\n var dl2 = det(p3, p4);\n return new paper.Point(dl1 * l2.x - l1.x * dl2, dl1 * l2.y - l1.y * dl2).divide(det(l1, l2));\n}\n/**\n * Connect two adjacent bezier curve, each curve is represented by two segments,\n * create different types of joins or simply removal redundant segment.\n */\nfunction isOutsideJoin(origin, offset) {\n var _a;\n var previousCurve = (_a = origin.previous) === null || _a === void 0 ? void 0 : _a.curve;\n var nextCurve = origin.curve;\n if (!previousCurve || !nextCurve) {\n return true;\n }\n var tangentIn = previousCurve.getTangentAtTime(1);\n var tangentOut = nextCurve.getTangentAtTime(0);\n var turn = det(tangentIn, tangentOut);\n return Math.abs(turn) < 1e-9 || turn * offset > 0;\n}\nfunction connectAdjacentBezier(segments1, segments2, origin, joinType, offset, limit, closed, strategy) {\n var curve1 = new paper.Curve(segments1[0], segments1[1]);\n var curve2 = new paper.Curve(segments2[0], segments2[1]);\n var intersection = curve1.getIntersections(curve2);\n var distance = segments1[1].point.getDistance(segments2[0].point);\n var shouldJoin = !closed || !strategy.guardInsideJoins || isOutsideJoin(origin, offset);\n if (origin.isSmooth()) {\n segments2[0].handleOut = segments2[0].handleOut.project(origin.handleOut);\n segments2[0].handleIn = segments1[1].handleIn.project(origin.handleIn);\n segments2[0].point = segments1[1].point.add(segments2[0].point).divide(2);\n segments1.pop();\n }\n else {\n if (intersection.length === 0) {\n if (distance > Math.abs(offset) * 0.1) {\n // connect\n switch (joinType) {\n case 'miter':\n if (shouldJoin) {\n var join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)), curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));\n // prevent sharp angle\n var joinOffset = Math.max(join.getDistance(curve1.point2), join.getDistance(curve2.point1));\n if (joinOffset < Math.abs(offset) * limit) {\n segments1.push(new paper.Segment(join));\n }\n }\n break;\n case 'round':\n if (shouldJoin) {\n var mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);\n if (mid) {\n segments1.push(mid);\n }\n }\n break;\n default: break;\n }\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n else {\n var second1 = curve1.divideAt(intersection[0]);\n if (second1) {\n var join = second1.segment1;\n var second2 = curve2.divideAt(curve2.getIntersections(curve1)[0]);\n join.handleOut = second2 ? second2.segment1.handleOut : segments2[0].handleOut;\n segments1.pop();\n segments2[0] = join;\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n }\n}\n/**\n * Connect all the segments together.\n */\nfunction connectBeziers(rawSegments, join, source, offset, limit, strategy) {\n var originSegments = source.segments;\n var first = rawSegments[0].slice();\n for (var i = 0; i < rawSegments.length - 1; ++i) {\n connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit, source.closed, strategy);\n }\n if (source.closed) {\n connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit, source.closed, strategy);\n rawSegments[0][0] = first[0];\n }\n return rawSegments;\n}\nfunction reduceSingleChildCompoundPath(path) {\n if (path.children.length === 1) {\n path = path.children[0];\n path.remove(); // remove from parent, this is critical, or the style attributes will be ignored\n }\n return path;\n}\n/** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */\nfunction normalize(path, areaThreshold) {\n if (areaThreshold === void 0) { areaThreshold = 0.01; }\n if (path.closed) {\n var ignoreArea_1 = Math.abs(path.area * areaThreshold);\n if (!path.clockwise) {\n path.reverse();\n }\n path = path.unite(path, { insert: false });\n path = path.resolveCrossings();\n if (path instanceof paper.CompoundPath) {\n path.children.filter(function (c) { return Math.abs(c.area) < ignoreArea_1; }).forEach(function (c) { return c.remove(); });\n if (path.children.length === 1) {\n return reduceSingleChildCompoundPath(path);\n }\n }\n }\n return path;\n}\nfunction cleanupStrokeOutline(path, offset, strategy) {\n var result = normalize(path);\n if (strategy.simplifySelfIntersectingStroke && countSelfIntersections(result) > 0) {\n var simplified = result.clone({ insert: false });\n simplified.simplify(Math.max(Math.min(Math.abs(offset) * 0.02, 0.5), 0.1));\n result = normalize(simplified);\n }\n return result;\n}\nfunction isSameDirection(partialPath, fullPath) {\n var offset1 = partialPath.segments[0].location.offset;\n var offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;\n var sampleOffset = (offset1 + offset2) / 3;\n var originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;\n var originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;\n return originOffset1 < originOffset2;\n}\n/** Remove self intersection when offset is negative by point direction dectection. */\nfunction removeIntersection(path) {\n if (path.closed) {\n var newPath = path.unite(path, { insert: false });\n if (newPath instanceof paper.CompoundPath) {\n newPath.children.filter(function (c) {\n if (c.segments.length > 1) {\n return !isSameDirection(c, path);\n }\n else {\n return true;\n }\n }).forEach(function (c) { return c.remove(); });\n return reduceSingleChildCompoundPath(newPath);\n }\n }\n return path;\n}\nfunction getSegments(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children.map(function (c) { return c.segments; }).flat();\n }\n else {\n return path.segments;\n }\n}\n/**\n * Remove impossible segments in negative offset condition.\n */\nfunction removeOutsiders(newPath, path) {\n var segments = getSegments(newPath).slice();\n segments.forEach(function (segment) {\n if (!path.contains(segment.point)) {\n segment.remove();\n }\n });\n}\nfunction preparePath(path, offset) {\n var source = path.clone({ insert: false });\n source.reduce({});\n if (path.closed && !path.clockwise) {\n source.reverse();\n offset = -offset;\n }\n return [source, offset];\n}\nfunction offsetSimpleShape(path, offset, join, limit, strategy) {\n var _a;\n var source;\n _a = preparePath(path, offset), source = _a[0], offset = _a[1];\n var curves = source.curves.slice();\n var offsetCurves = curves.map(function (curve) { return adaptiveOffsetCurve(curve, offset, strategy); }).flat();\n var raws = [];\n for (var i = 0; i < offsetCurves.length; i += 2) {\n raws.push(offsetCurves.slice(i, i + 2));\n }\n var segments = connectBeziers(raws, join, source, offset, limit, strategy).flat();\n var newPath = removeIntersection(new paper.Path({ segments: segments, insert: false, closed: path.closed }));\n newPath.reduce({});\n if (source.closed && ((source.clockwise && offset < 0) || (!source.clockwise && offset > 0))) {\n removeOutsiders(newPath, path);\n }\n // recovery path\n if (source.clockwise !== path.clockwise) {\n newPath.reverse();\n }\n return normalize(newPath);\n}\nfunction makeRoundCap(from, to, offset) {\n var origin = from.point.add(to.point).divide(2);\n var normal = to.point.subtract(from.point).rotate(-90, new paper.Point(0, 0)).normalize(offset);\n var through = origin.add(normal);\n var arc = new paper.Path.Arc({ from: from.point, to: to.point, through: through, insert: false });\n return arc.segments;\n}\nfunction connectSide(outer, inner, offset, cap) {\n if (outer instanceof paper.CompoundPath) {\n var cs = outer.children.map(function (c) { return ({ c: c, a: Math.abs(c.area) }); });\n cs = cs.sort(function (c1, c2) { return c2.a - c1.a; });\n outer = cs[0].c;\n }\n var oSegments = outer.segments.slice();\n var iSegments = inner.segments.slice();\n switch (cap) {\n case 'round':\n var heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);\n var tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);\n var result = new paper.Path({ segments: heads.concat(oSegments, tails, iSegments), closed: true, insert: false });\n result.reduce({});\n return result;\n default: return new paper.Path({ segments: oSegments.concat(iSegments), closed: true, insert: false });\n }\n}\nfunction offsetSimpleStroke(path, offset, join, cap, limit, strategy) {\n offset = path.closed && !path.clockwise ? -offset : offset;\n var positiveOffset = offsetSimpleShape(path, offset, join, limit, strategy);\n var negativeOffset = offsetSimpleShape(path, -offset, join, limit, strategy);\n if (path.closed) {\n return cleanupStrokeOutline(positiveOffset.subtract(negativeOffset, { insert: false }), offset, strategy);\n }\n else {\n var inner = negativeOffset;\n var holes = new Array();\n if (negativeOffset instanceof paper.CompoundPath) {\n holes = negativeOffset.children.filter(function (c) { return c.closed; });\n holes.forEach(function (h) { return h.remove(); });\n inner = negativeOffset.children[0];\n }\n inner.reverse();\n var final = connectSide(positiveOffset, inner, offset, cap);\n if (holes.length > 0) {\n for (var _i = 0, holes_1 = holes; _i < holes_1.length; _i++) {\n var hole = holes_1[_i];\n final = final.subtract(hole, { insert: false });\n }\n }\n return cleanupStrokeOutline(final, offset, strategy);\n }\n}\nfunction getChildPaths(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children;\n }\n return [path];\n}\nfunction finiteNumber(value) {\n return Number.isFinite(value);\n}\nfunction countSelfIntersections(path) {\n if (!path.closed) {\n return 0;\n }\n try {\n var children_1 = getChildPaths(path);\n var count_1 = 0;\n children_1.forEach(function (child, index) {\n count_1 += child.getIntersections(child).length;\n for (var i = index + 1; i < children_1.length; i += 1) {\n count_1 += child.getIntersections(children_1[i]).length;\n }\n });\n return count_1;\n }\n catch (error) {\n return 0;\n }\n}\nfunction samplePoints(path, maxPerChild) {\n if (maxPerChild === void 0) { maxPerChild = 16; }\n var points = [];\n getChildPaths(path).forEach(function (child) {\n if (!child.length || child.segments.length === 0) {\n return;\n }\n var count = Math.min(maxPerChild, Math.max(4, Math.ceil(child.length / 30)));\n for (var i = 0; i < count; i += 1) {\n var ratio = child.closed ? i / count : i / Math.max(count - 1, 1);\n var point = child.getPointAt(child.length * ratio);\n if (point) {\n points.push(point);\n }\n }\n });\n return points;\n}\nfunction containsPoint(path, point) {\n try {\n return path.contains(point);\n }\n catch (error) {\n return false;\n }\n}\nfunction distanceToPath(path, point) {\n try {\n var nearest = path.getNearestPoint(point);\n return nearest ? nearest.getDistance(point) : Number.POSITIVE_INFINITY;\n }\n catch (error) {\n return Number.POSITIVE_INFINITY;\n }\n}\nfunction addWarning(warnings, warning) {\n if (warnings.indexOf(warning) === -1) {\n warnings.push(warning);\n }\n}\nexport function analyzeOffsetQuality(source, result, offset, options) {\n if (options === void 0) { options = {}; }\n var warnings = new Array();\n var expectedClosed = options.stroke ? true : source.closed;\n var segmentCount = getSegments(result).length;\n var area = Math.abs(result.area || 0);\n var absOffset = Math.abs(offset);\n var score = segmentCount * 0.01;\n var containmentErrors = 0;\n var distanceErrors = 0;\n var bounds = result.bounds;\n if (segmentCount === 0) {\n score += 100000;\n addWarning(warnings, 'empty-result');\n }\n if (!bounds || !finiteNumber(bounds.x) || !finiteNumber(bounds.y) || !finiteNumber(bounds.width) || !finiteNumber(bounds.height)) {\n score += 100000;\n addWarning(warnings, 'non-finite-bounds');\n }\n if (result.closed !== expectedClosed) {\n score += 50000;\n addWarning(warnings, 'unexpected-closed-state');\n }\n var selfIntersections = countSelfIntersections(result);\n if (selfIntersections > 0) {\n score += selfIntersections * 1000;\n addWarning(warnings, 'self-intersection');\n }\n if (source.closed && result.closed && !options.stroke) {\n var sourceArea = Math.abs(source.area || 0);\n if (sourceArea > 0 && offset > 0 && area < sourceArea * 0.95) {\n score += ((sourceArea - area) / sourceArea) * 2000;\n addWarning(warnings, 'positive-offset-area-shrank');\n }\n if (sourceArea > 0 && offset < 0 && area > sourceArea * 1.05) {\n score += ((area - sourceArea) / sourceArea) * 2000;\n addWarning(warnings, 'negative-offset-area-grew');\n }\n if (sourceArea > 0 && offset < 0) {\n var areaRatio = area / sourceArea;\n if (areaRatio < 0.25) {\n score += (0.25 - areaRatio) * 4000;\n addWarning(warnings, 'negative-offset-collapse');\n }\n }\n if (sourceArea > 0 && offset > 0) {\n var sourceBounds = source.bounds;\n var centerShift = result.bounds.center.getDistance(sourceBounds.center);\n var centerTolerance = Math.max(absOffset * 1.15, Math.min(sourceBounds.width, sourceBounds.height) * 0.08);\n if (centerShift > centerTolerance) {\n score += (centerShift - centerTolerance) * 80;\n addWarning(warnings, 'offset-center-shift');\n }\n }\n var containmentTolerance_1 = Math.max(absOffset * 0.08, 0.5);\n var containmentSamples = offset >= 0 ? samplePoints(source) : samplePoints(result);\n containmentSamples.forEach(function (point) {\n var container = offset >= 0 ? result : source;\n if (!containsPoint(container, point) && distanceToPath(container, point) > containmentTolerance_1) {\n containmentErrors += 1;\n }\n });\n if (containmentErrors > 0) {\n score += containmentErrors * 150;\n addWarning(warnings, offset >= 0 ? 'source-outside-positive-offset' : 'negative-offset-outside-source');\n }\n }\n if (absOffset > 0.001) {\n var distanceTolerance_1 = Math.max(absOffset * 0.18, 0.75);\n samplePoints(result).forEach(function (point) {\n var distance = distanceToPath(source, point);\n if (finiteNumber(distance) && distance < distanceTolerance_1) {\n distanceErrors += 1;\n }\n });\n if (distanceErrors > 0) {\n score += distanceErrors * 35;\n addWarning(warnings, 'offset-distance-collapse');\n }\n }\n return {\n score: score,\n warnings: warnings,\n selfIntersections: selfIntersections,\n containmentErrors: containmentErrors,\n distanceErrors: distanceErrors,\n segmentCount: segmentCount,\n area: area,\n };\n}\nfunction pickBestResult(source, offset, stroke, makeResult) {\n var bestResult = null;\n var bestQuality = null;\n var firstError = null;\n STRATEGIES.forEach(function (strategy) {\n try {\n var result = makeResult(strategy);\n var quality = analyzeOffsetQuality(source, result, offset, { stroke: stroke });\n quality.algorithm = strategy.algorithm;\n if (!bestQuality || quality.score < bestQuality.score) {\n bestResult = result;\n bestQuality = quality;\n }\n }\n catch (error) {\n if (!firstError && error instanceof Error) {\n firstError = error;\n }\n }\n });\n if (!bestResult) {\n throw firstError || new Error('Unable to offset path with any algorithm');\n }\n return bestResult;\n}\nfunction getNonSelfIntersectionPath(path) {\n if (path.closed) {\n return path.unite(path, { insert: false });\n }\n return path;\n}\nfunction offsetCompoundChild(child, parent, offset, join, limit, strategy) {\n if (child.segments.length <= 1) {\n return null;\n }\n if (!isSameDirection(child, parent)) {\n child.reverse();\n }\n var childOffset = offsetSimpleShape(child, offset, join, limit, strategy);\n childOffset = normalize(childOffset);\n if (childOffset.clockwise !== child.clockwise) {\n childOffset.reverse();\n }\n if (childOffset instanceof paper.CompoundPath) {\n childOffset.applyMatrix = true;\n return childOffset.children;\n }\n return childOffset;\n}\nfunction offsetCompoundShape(path, offset, join, limit, strategy) {\n var children = path.children.filter(function (child) { return child.segments.length > 1; });\n var outers = children.filter(function (child) { return child.clockwise; });\n var holes = children.filter(function (child) { return !child.clockwise; });\n if (outers.length === 0 || holes.length === 0) {\n var offsetParts = children.map(function (child) { return offsetCompoundChild(child, path, offset, join, limit, strategy); });\n return new paper.CompoundPath({ children: offsetParts.flat().filter(function (child) { return !!child; }), insert: false });\n }\n var pieces = outers.map(function (outer) {\n var outerOffset = offsetCompoundChild(outer, path, offset, join, limit, strategy);\n var result = outerOffset instanceof Array\n ? new paper.CompoundPath({ children: outerOffset, insert: false })\n : outerOffset;\n holes.forEach(function (hole) {\n if (!outer.contains(hole.bounds.center)) {\n return;\n }\n var holeOffset = offsetCompoundChild(hole, path, offset, join, limit, strategy);\n if (!holeOffset) {\n return;\n }\n var holePath = holeOffset instanceof Array\n ? new paper.CompoundPath({ children: holeOffset, insert: false })\n : holeOffset;\n var next = result.subtract(holePath, { insert: false });\n result.remove();\n holePath.remove();\n result = next;\n });\n return result;\n });\n if (pieces.length === 1) {\n return pieces[0];\n }\n return pieces.slice(1).reduce(function (result, piece) {\n var next = result.unite(piece, { insert: false });\n result.remove();\n piece.remove();\n return next;\n }, pieces[0]);\n}\nfunction hasCompoundHoles(path) {\n if (!(path instanceof paper.CompoundPath)) {\n return false;\n }\n var children = path.children;\n return children.some(function (child) { return child.clockwise; }) && children.some(function (child) { return !child.clockwise; });\n}\nfunction withoutAdaptiveFallback(strategy) {\n return {\n algorithm: 'robust',\n splitSelfIntersectingCurves: strategy.splitSelfIntersectingCurves,\n guardInsideJoins: strategy.guardInsideJoins,\n simplifySelfIntersectingStroke: strategy.simplifySelfIntersectingStroke,\n adaptiveFallback: false,\n };\n}\nfunction addAdaptiveCandidate(candidates, makeResult) {\n try {\n candidates.push(makeResult());\n }\n catch (error) {\n // Keep adaptive mode opportunistic: a failed fallback should not hide valid strict results.\n }\n}\nfunction pickBestCandidate(source, offset, stroke, candidates) {\n var bestResult = candidates[0];\n var bestQuality = analyzeOffsetQuality(source, bestResult, offset, { stroke: stroke });\n for (var i = 1; i < candidates.length; i += 1) {\n var quality = analyzeOffsetQuality(source, candidates[i], offset, { stroke: stroke });\n if (quality.score < bestQuality.score) {\n bestResult = candidates[i];\n bestQuality = quality;\n }\n }\n return bestResult;\n}\nfunction offsetPathAdaptive(path, offset, join, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, 'round', limit, baseStrategy); });\n }\n if (path.closed && offset < 0) {\n [0.8, 0.65, 0.5, 0.35, 0.25].forEach(function (factor) {\n var fallbackOffset = offset * factor;\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, 'round', limit, baseStrategy); });\n }\n });\n }\n if (candidates.length === 0) {\n return offsetPathWithStrategy(path, offset, join, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, false, candidates);\n}\nfunction offsetPathWithStrategy(path, offset, join, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetPathAdaptive(path, offset, join, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var shouldNormalizeResult = !hasCompoundHoles(nonSIPath);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);\n }\n else {\n result = offsetCompoundShape(nonSIPath, offset, join, limit, strategy);\n }\n if (shouldNormalizeResult) {\n result = normalize(result);\n }\n result.copyAttributes(nonSIPath, false);\n result.remove();\n return result;\n}\nexport function offsetPath(path, offset, join, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, false, function (strategy) { return offsetPathWithStrategy(path, offset, join, limit, strategy); });\n }\n return offsetPathWithStrategy(path, offset, join, limit, getStrategy(algorithm));\n}\nfunction offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetStrokeAdaptive(path, offset, join, cap, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit, strategy);\n }\n else {\n var children = nonSIPath.children.flatMap(function (c) {\n return offsetSimpleStroke(c, offset, join, cap, limit, strategy);\n });\n result = children.reduce(function (c1, c2) { return c1.unite(c2, { insert: false }); });\n }\n result.strokeWidth = 0;\n result.fillColor = nonSIPath.strokeColor;\n result.shadowBlur = nonSIPath.shadowBlur;\n result.shadowColor = nonSIPath.shadowColor;\n result.shadowOffset = nonSIPath.shadowOffset;\n return result;\n}\nfunction offsetStrokeAdaptive(path, offset, join, cap, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', cap, limit, baseStrategy); });\n }\n if (cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, 'round', limit, baseStrategy); });\n }\n if (join !== 'round' && cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', 'round', limit, baseStrategy); });\n }\n if (candidates.length === 0) {\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, true, candidates);\n}\nexport function offsetStroke(path, offset, join, cap, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, true, function (strategy) { return offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy); });\n }\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, getStrategy(algorithm));\n}\n//# sourceMappingURL=offset_core.js.map","import paper from 'paper';\nimport { analyzeOffsetQuality, offsetPath as createOffsetPath, offsetStroke as createOffsetStroke } from './offset_core';\nfunction resolveOptions(options) {\n var _a, _b, _c, _d;\n return {\n join: (_a = options === null || options === void 0 ? void 0 : options.join) !== null && _a !== void 0 ? _a : 'miter',\n cap: (_b = options === null || options === void 0 ? void 0 : options.cap) !== null && _b !== void 0 ? _b : 'butt',\n limit: (_c = options === null || options === void 0 ? void 0 : options.limit) !== null && _c !== void 0 ? _c : 10,\n algorithm: (_d = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _d !== void 0 ? _d : 'auto',\n };\n}\nfunction insertResult(source, result, options) {\n if (!options || options.insert !== false) {\n (source.parent || paper.project.activeLayer).addChild(result);\n }\n}\nexport function offset(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetPath(path, distance, resolvedOptions.join, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function offsetStroke(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetStroke(path, distance, resolvedOptions.join, resolvedOptions.cap, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function analyze(source, result, distance, options) {\n return analyzeOffsetQuality(source, result, distance, options || {});\n}\nvar PaperOffset = /** @class */ (function () {\n function PaperOffset() {\n }\n PaperOffset.offset = function (path, distance, options) {\n return offset(path, distance, options);\n };\n PaperOffset.offsetStroke = function (path, distance, options) {\n return offsetStroke(path, distance, options);\n };\n PaperOffset.analyze = function (source, result, distance, options) {\n return analyze(source, result, distance, options);\n };\n return PaperOffset;\n}());\nexport { PaperOffset };\n/**\n * @deprecated EXTEND existing paper module is not recommend anymore\n */\nexport default function ExtendPaperJs(paperNs) {\n paperNs.Path.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.Path.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n}\nexport { ExtendPaperJs as extendPaperJs };\n//# sourceMappingURL=index.js.map"],"names":["offsetStroke","createOffsetPath","createOffsetStroke"],"mappings":";;;;;;AACA,IAAI,kBAAkB,GAAG,EAAE;AAC3B,IAAI,UAAU,GAAG;AACjB,IAAI;AACJ,QAAQ,SAAS,EAAE,UAAU;AAC7B,QAAQ,2BAA2B,EAAE,IAAI;AACzC,QAAQ,gBAAgB,EAAE,IAAI;AAC9B,QAAQ,8BAA8B,EAAE,IAAI;AAC5C,QAAQ,gBAAgB,EAAE,IAAI;AAC9B,KAAK;AACL,IAAI;AACJ,QAAQ,SAAS,EAAE,QAAQ;AAC3B,QAAQ,2BAA2B,EAAE,IAAI;AACzC,QAAQ,gBAAgB,EAAE,IAAI;AAC9B,QAAQ,8BAA8B,EAAE,IAAI;AAC5C,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,KAAK;AACL,IAAI;AACJ,QAAQ,SAAS,EAAE,OAAO;AAC1B,QAAQ,2BAA2B,EAAE,IAAI;AACzC,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,QAAQ,8BAA8B,EAAE,KAAK;AAC7C,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,KAAK;AACL,IAAI;AACJ,QAAQ,SAAS,EAAE,QAAQ;AAC3B,QAAQ,2BAA2B,EAAE,KAAK;AAC1C,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,QAAQ,8BAA8B,EAAE,KAAK;AAC7C,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,KAAK;AACL,CAAC;AACD,SAAS,WAAW,CAAC,SAAS,EAAE;AAChC,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE;AAC9B,QAAQ,OAAO,UAAU,CAAC,CAAC,CAAC;AAC5B,IAAI;AACJ,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,QAAQ,EAAE,EAAE,OAAO,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE;AAC7D,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK;AACzC;AACA,IAAI,IAAI,YAAY,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAChF;AACA,IAAI,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,IAAI,IAAI,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7C;AACA,IAAI,IAAI,MAAM,IAAI,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AACrD,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3F,IAAI,OAAO,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;AACrE,IAAI,IAAI,aAAa,KAAK,MAAM,EAAE,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AACvD,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9N,IAAI,IAAI,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;AACxE,IAAI,IAAI,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;AACxE,IAAI,IAAI,aAAa,GAAG,kBAAkB,EAAE;AAC5C,QAAQ,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnC,IAAI;AACJ;AACA,IAAI,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACzD,IAAI,IAAI,wBAAwB,GAAG,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC5E,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtD,IAAI,IAAI,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC1F,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC;AAC9B,UAAU,wBAAwB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG;AAC1F,UAAU,wBAAwB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;AACrG,IAAI,IAAI,UAAU,EAAE;AACpB,QAAQ,IAAI,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;AAC9C,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC9B,YAAY,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,CAAC;AACjF,iBAAiB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AAC3F,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/B;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;AAChE,IAAI,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC/F,SAAS,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;AACrD,IAAI,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/G,IAAI,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS;AACnD,IAAI,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ;AAChD,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;AAC7D;AACA,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;AACrB,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA,SAAS,yBAAyB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACnD,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;AACzB,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;AACzB,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChG;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE;AACvC,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,aAAa,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK;AAC5F,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK;AAChC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrD,IAAI,IAAI,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClD,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;AACzC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC;AACrD;AACA,SAAS,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;AACxG,IAAI,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,IAAI,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACtD,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrE,IAAI,IAAI,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3F,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;AAC3B,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AACjF,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9E,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjF,QAAQ,SAAS,CAAC,GAAG,EAAE;AACvB,IAAI;AACJ,SAAS;AACT,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE;AACnD;AACA,gBAAgB,QAAQ,QAAQ;AAChC,oBAAoB,KAAK,OAAO;AAChC,wBAAwB,IAAI,UAAU,EAAE;AACxC,4BAA4B,IAAI,IAAI,GAAG,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5L;AACA,4BAA4B,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvH,4BAA4B,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE;AACvE,gCAAgC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,4BAA4B;AAC5B,wBAAwB;AACxB,wBAAwB;AACxB,oBAAoB,KAAK,OAAO;AAChC,wBAAwB,IAAI,UAAU,EAAE;AACxC,4BAA4B,IAAI,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AACrG,4BAA4B,IAAI,GAAG,EAAE;AACrC,gCAAgC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACnD,4BAA4B;AAC5B,wBAAwB;AACxB,wBAAwB;AAExB;AACA,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ;AAC7D,gBAAgB,SAAS,CAAC,GAAG,EAAE;AAC/B,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ;AAC3C,gBAAgB,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,gBAAgB,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;AAC9F,gBAAgB,SAAS,CAAC,GAAG,EAAE;AAC/B,gBAAgB,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AACnC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ;AAC7D,gBAAgB,SAAS,CAAC,GAAG,EAAE;AAC/B,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC5E,IAAI,IAAI,cAAc,GAAG,MAAM,CAAC,QAAQ;AACxC,IAAI,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACtC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;AACrD,QAAQ,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtI,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;AACvB,QAAQ,qBAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1I,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpC,IAAI;AACJ,IAAI,OAAO,WAAW;AACtB;AACA,SAAS,6BAA6B,CAAC,IAAI,EAAE;AAC7C,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,QAAQ,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE;AACxC,IAAI,IAAI,aAAa,KAAK,MAAM,EAAE,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;AAC1D,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,QAAQ,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;AAC9D,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAQ;AACR,QAAQ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClD,QAAQ,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAQ,IAAI,IAAI,YAAY,KAAK,CAAC,YAAY,EAAE;AAChD,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACvI,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,gBAAgB,OAAO,6BAA6B,CAAC,IAAI,CAAC;AAC1D,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;AACtD,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;AAChC,IAAI,IAAI,QAAQ,CAAC,8BAA8B,IAAI,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACvF,QAAQ,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACxD,QAAQ,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAClF,QAAQ,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;AACtC,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB;AACA,SAAS,eAAe,CAAC,WAAW,EAAE,QAAQ,EAAE;AAChD,IAAI,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;AACzD,IAAI,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;AAChH,IAAI,IAAI,YAAY,GAAG,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC;AAC9C,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;AAChG,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM;AACpG,IAAI,OAAO,aAAa,GAAG,aAAa;AACxC;AACA;AACA,SAAS,kBAAkB,CAAC,IAAI,EAAE;AAClC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACzD,QAAQ,IAAI,OAAO,YAAY,KAAK,CAAC,YAAY,EAAE;AACnD,YAAY,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACjD,gBAAgB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,oBAAoB,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;AACpD,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB;AAChB,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAY,OAAO,6BAA6B,CAAC,OAAO,CAAC;AACzD,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,IAAI,IAAI,IAAI,YAAY,KAAK,CAAC,YAAY,EAAE;AAC5C,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5E,IAAI;AACJ,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE;AACxC,IAAI,IAAI,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;AAC/C,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,OAAO,EAAE;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAY,OAAO,CAAC,MAAM,EAAE;AAC5B,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;AACnC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACrB,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACxC,QAAQ,MAAM,CAAC,OAAO,EAAE;AACxB,QAAQ,MAAM,GAAG,CAAC,MAAM;AACxB,IAAI;AACJ,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3B;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAChE,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,MAAM;AACd,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAClE,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AACtC,IAAI,IAAI,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnH,IAAI,IAAI,IAAI,GAAG,EAAE;AACjB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI;AACJ,IAAI,IAAI,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE;AACrF,IAAI,IAAI,OAAO,GAAG,kBAAkB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAChH,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACtB,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;AAClG,QAAQ,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC;AACtC,IAAI;AACJ;AACA,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;AAC7C,QAAQ,OAAO,CAAC,OAAO,EAAE;AACzB,IAAI;AACJ,IAAI,OAAO,SAAS,CAAC,OAAO,CAAC;AAC7B;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE;AACxC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACnG,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,IAAI,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrG,IAAI,OAAO,GAAG,CAAC,QAAQ;AACvB;AACA,SAAS,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;AAChD,IAAI,IAAI,KAAK,YAAY,KAAK,CAAC,YAAY,EAAE;AAC7C,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7F,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC1C,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC1C,IAAI,QAAQ,GAAG;AACf,QAAQ,KAAK,OAAO;AACpB,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AAC3F,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AAC3F,YAAY,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7H,YAAY,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,YAAY,OAAO,MAAM;AACzB,QAAQ,SAAS,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9G;AACA;AACA,SAAS,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;AACtE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,MAAM;AAC9D,IAAI,IAAI,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC/E,IAAI,IAAI,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAChF,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,QAAQ,OAAO,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC;AACjH,IAAI;AACJ,SAAS;AACT,QAAQ,IAAI,KAAK,GAAG,cAAc;AAClC,QAAQ,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE;AAC/B,QAAQ,IAAI,cAAc,YAAY,KAAK,CAAC,YAAY,EAAE;AAC1D,YAAY,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrF,YAAY,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAY,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9C,QAAQ;AACR,QAAQ,KAAK,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,KAAK,GAAG,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;AACnE,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAY,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AACzE,gBAAgB,IAAI,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC;AACtC,gBAAgB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAC5D,IAAI;AACJ;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,IAAI,IAAI,IAAI,YAAY,KAAK,CAAC,YAAY,EAAE;AAC5C,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,CAAC;AACjB;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjC;AACA,SAAS,sBAAsB,CAAC,IAAI,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;AAC5C,QAAQ,IAAI,OAAO,GAAG,CAAC;AACvB,QAAQ,UAAU,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE,KAAK,EAAE;AACnD,YAAY,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM;AAC3D,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACnE,gBAAgB,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACvE,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE;AACzC,IAAI,IAAI,WAAW,KAAK,MAAM,EAAE,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;AACpD,IAAI,IAAI,MAAM,GAAG,EAAE;AACnB,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AACjD,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1D,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACpF,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7E,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AAC9D,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAY;AACZ,QAAQ;AACR,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,MAAM;AACjB;AACA,SAAS,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;AACpC,IAAI,IAAI;AACR,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnC,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA,SAAS,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AACrC,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACjD,QAAQ,OAAO,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,iBAAiB;AAC9E,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,MAAM,CAAC,iBAAiB;AACvC,IAAI;AACJ;AACA,SAAS,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE;AACvC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AAC1C,QAAQ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,IAAI;AACJ;AACO,SAAS,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AACtE,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;AAC5C,IAAI,IAAI,QAAQ,GAAG,IAAI,KAAK,EAAE;AAC9B,IAAI,IAAI,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM;AAC9D,IAAI,IAAI,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;AACjD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AACzC,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,IAAI,IAAI,KAAK,GAAG,YAAY,GAAG,IAAI;AACnC,IAAI,IAAI,iBAAiB,GAAG,CAAC;AAC7B,IAAI,IAAI,cAAc,GAAG,CAAC;AAC1B,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC9B,IAAI,IAAI,YAAY,KAAK,CAAC,EAAE;AAC5B,QAAQ,KAAK,IAAI,MAAM;AACvB,QAAQ,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC;AAC5C,IAAI;AACJ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACtI,QAAQ,KAAK,IAAI,MAAM;AACvB,QAAQ,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjD,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,EAAE;AAC1C,QAAQ,KAAK,IAAI,KAAK;AACtB,QAAQ,UAAU,CAAC,QAAQ,EAAE,yBAAyB,CAAC;AACvD,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,MAAM,CAAC;AAC1D,IAAI,IAAI,iBAAiB,GAAG,CAAC,EAAE;AAC/B,QAAQ,KAAK,IAAI,iBAAiB,GAAG,IAAI;AACzC,QAAQ,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACjD,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC3D,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AACnD,QAAQ,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE;AACtE,YAAY,KAAK,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,IAAI,UAAU,IAAI,IAAI;AAC9D,YAAY,UAAU,CAAC,QAAQ,EAAE,6BAA6B,CAAC;AAC/D,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE;AACtE,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,GAAG,UAAU,IAAI,UAAU,IAAI,IAAI;AAC9D,YAAY,UAAU,CAAC,QAAQ,EAAE,2BAA2B,CAAC;AAC7D,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAY,IAAI,SAAS,GAAG,IAAI,GAAG,UAAU;AAC7C,YAAY,IAAI,SAAS,GAAG,IAAI,EAAE;AAClC,gBAAgB,KAAK,IAAI,CAAC,IAAI,GAAG,SAAS,IAAI,IAAI;AAClD,gBAAgB,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;AAChE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAY,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM;AAC5C,YAAY,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC;AACnF,YAAY,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtH,YAAY,IAAI,WAAW,GAAG,eAAe,EAAE;AAC/C,gBAAgB,KAAK,IAAI,CAAC,WAAW,GAAG,eAAe,IAAI,EAAE;AAC7D,gBAAgB,UAAU,CAAC,QAAQ,EAAE,qBAAqB,CAAC;AAC3D,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,GAAG,CAAC;AACpE,QAAQ,IAAI,kBAAkB,GAAG,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAC1F,QAAQ,kBAAkB,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AACpD,YAAY,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM;AACzD,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,sBAAsB,EAAE;AAC/G,gBAAgB,iBAAiB,IAAI,CAAC;AACtC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,iBAAiB,GAAG,CAAC,EAAE;AACnC,YAAY,KAAK,IAAI,iBAAiB,GAAG,GAAG;AAC5C,YAAY,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,GAAG,gCAAgC,GAAG,gCAAgC,CAAC;AACnH,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG,KAAK,EAAE;AAC3B,QAAQ,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,IAAI,CAAC;AAClE,QAAQ,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AACtD,YAAY,IAAI,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;AACxD,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,mBAAmB,EAAE;AAC1E,gBAAgB,cAAc,IAAI,CAAC;AACnC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,cAAc,GAAG,CAAC,EAAE;AAChC,YAAY,KAAK,IAAI,cAAc,GAAG,EAAE;AACxC,YAAY,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;AAC5D,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO;AACX,QAAQ,KAAK,EAAE,KAAK;AACpB,QAAQ,QAAQ,EAAE,QAAQ;AAC1B,QAAQ,iBAAiB,EAAE,iBAAiB;AAC5C,QAAQ,iBAAiB,EAAE,iBAAiB;AAC5C,QAAQ,cAAc,EAAE,cAAc;AACtC,QAAQ,YAAY,EAAE,YAAY;AAClC,QAAQ,IAAI,EAAE,IAAI;AAClB,KAAK;AACL;AACA,SAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;AAC5D,IAAI,IAAI,UAAU,GAAG,IAAI;AACzB,IAAI,IAAI,WAAW,GAAG,IAAI;AAC1B,IAAI,IAAI,UAAU,GAAG,IAAI;AACzB,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;AAC3C,QAAQ,IAAI;AACZ,YAAY,IAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AAC7C,YAAY,IAAI,OAAO,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC1F,YAAY,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;AAClD,YAAY,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE;AACnE,gBAAgB,UAAU,GAAG,MAAM;AACnC,gBAAgB,WAAW,GAAG,OAAO;AACrC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,UAAU,IAAI,KAAK,YAAY,KAAK,EAAE;AACvD,gBAAgB,UAAU,GAAG,KAAK;AAClC,YAAY;AACZ,QAAQ;AACR,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,QAAQ,MAAM,UAAU,IAAI,IAAI,KAAK,CAAC,0CAA0C,CAAC;AACjF,IAAI;AACJ,IAAI,OAAO,UAAU;AACrB;AACA,SAAS,0BAA0B,CAAC,IAAI,EAAE;AAC1C,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClD,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC3E,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACzC,QAAQ,KAAK,CAAC,OAAO,EAAE;AACvB,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC7E,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AACxC,IAAI,IAAI,WAAW,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE;AACnD,QAAQ,WAAW,CAAC,OAAO,EAAE;AAC7B,IAAI;AACJ,IAAI,IAAI,WAAW,YAAY,KAAK,CAAC,YAAY,EAAE;AACnD,QAAQ,WAAW,CAAC,WAAW,GAAG,IAAI;AACtC,QAAQ,OAAO,WAAW,CAAC,QAAQ;AACnC,IAAI;AACJ,IAAI,OAAO,WAAW;AACtB;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9E,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9E,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,QAAQ,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpI,QAAQ,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnI,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE;AAC7C,QAAQ,IAAI,WAAW,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AACzF,QAAQ,IAAI,MAAM,GAAG,WAAW,YAAY;AAC5C,cAAc,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;AAC7E,cAAc,WAAW;AACzB,QAAQ,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;AACtC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACrD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC3F,YAAY,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,QAAQ,GAAG,UAAU,YAAY;AACjD,kBAAkB,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;AAChF,kBAAkB,UAAU;AAC5B,YAAY,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnE,YAAY,MAAM,CAAC,MAAM,EAAE;AAC3B,YAAY,QAAQ,CAAC,MAAM,EAAE;AAC7B,YAAY,MAAM,GAAG,IAAI;AACzB,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,MAAM;AACrB,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAQ,OAAO,MAAM,CAAC,CAAC,CAAC;AACxB,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,MAAM,EAAE,KAAK,EAAE;AAC3D,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACzD,QAAQ,MAAM,CAAC,MAAM,EAAE;AACvB,QAAQ,KAAK,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,IAAI;AACnB,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,YAAY,CAAC,EAAE;AAC/C,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAChC,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtI;AACA,SAAS,uBAAuB,CAAC,QAAQ,EAAE;AAC3C,IAAI,OAAO;AACX,QAAQ,SAAS,EAAE,QAAQ;AAC3B,QAAQ,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B;AACzE,QAAQ,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;AACnD,QAAQ,8BAA8B,EAAE,QAAQ,CAAC,8BAA8B;AAC/E,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,KAAK;AACL;AACA,SAAS,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE;AACtD,IAAI,IAAI;AACR,QAAQ,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA,IAAI;AACJ;AACA,SAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;AAC/D,IAAI,IAAI,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;AAClC,IAAI,IAAI,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC1F,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACnD,QAAQ,IAAI,OAAO,GAAG,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7F,QAAQ,IAAI,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE;AAC/C,YAAY,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;AACtC,YAAY,WAAW,GAAG,OAAO;AACjC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,UAAU;AACrB;AACA,SAAS,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACjE,IAAI,IAAI,YAAY,GAAG,uBAAuB,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,UAAU,GAAG,IAAI,KAAK,EAAE;AAChC,IAAI,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7H,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;AAC1B,QAAQ,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACpI,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE;AACnC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AAC/D,YAAY,IAAI,cAAc,GAAG,MAAM,GAAG,MAAM;AAChD,YAAY,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7I,YAAY,IAAI,IAAI,KAAK,OAAO,EAAE;AAClC,gBAAgB,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACpJ,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,QAAQ,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC;AAC9E,IAAI;AACJ,IAAI,OAAO,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;AAC7D;AACA,SAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrE,IAAI,IAAI,QAAQ,CAAC,gBAAgB,EAAE;AACnC,QAAQ,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AACtE,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACpD,IAAI,IAAI,qBAAqB,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC5D,IAAI,IAAI,MAAM,GAAG,SAAS;AAC1B,IAAI,IAAI,SAAS,YAAY,KAAK,CAAC,IAAI,EAAE;AACzC,QAAQ,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC5E,IAAI;AACJ,SAAS;AACT,QAAQ,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC9E,IAAI;AACJ,IAAI,IAAI,qBAAqB,EAAE;AAC/B,QAAQ,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAClC,IAAI;AACJ,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC;AAC3C,IAAI,MAAM,CAAC,MAAM,EAAE;AACnB,IAAI,OAAO,MAAM;AACjB;AACO,SAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;AACjE,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AACpD,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE;AAC9B,QAAQ,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,QAAQ,EAAE,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/I,IAAI;AACJ,IAAI,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACpF;AACA,SAAS,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC5E,IAAI,IAAI,QAAQ,CAAC,gBAAgB,EAAE;AACnC,QAAQ,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC7E,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACpD,IAAI,IAAI,MAAM,GAAG,SAAS;AAC1B,IAAI,IAAI,SAAS,YAAY,KAAK,CAAC,IAAI,EAAE;AACzC,QAAQ,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC;AAClF,IAAI;AACJ,SAAS;AACT,QAAQ,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC/D,YAAY,OAAO,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC5E,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,IAAI;AACJ,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC;AAC1B,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW;AAC5C,IAAI,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;AAC5C,IAAI,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW;AAC9C,IAAI,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY;AAChD,IAAI,OAAO,MAAM;AACjB;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxE,IAAI,IAAI,YAAY,GAAG,uBAAuB,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,UAAU,GAAG,IAAI,KAAK,EAAE;AAChC,IAAI,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACpI,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;AAC1B,QAAQ,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3I,IAAI;AACJ,IAAI,IAAI,GAAG,KAAK,OAAO,EAAE;AACzB,QAAQ,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5I,IAAI;AACJ,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,EAAE;AAC7C,QAAQ,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/I,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,QAAQ,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC;AACrF,IAAI;AACJ,IAAI,OAAO,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC;AAC5D;AACO,SAASA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AACxE,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AACpD,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE;AAC9B,QAAQ,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,QAAQ,EAAE,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrJ,IAAI;AACJ,IAAI,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AAC3F;;ACnuBA,SAAS,cAAc,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,OAAO;AACX,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,OAAO;AAC5H,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM;AACzH,QAAQ,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;AACzH,QAAQ,SAAS,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM;AACrI,KAAK;AACL;AACA,SAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AAC/C,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;AAC9C,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC;AACrE,IAAI;AACJ;AACO,SAAS,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAChD,IAAI,IAAI,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACjD,IAAI,IAAI,OAAO,GAAGC,UAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC;AAC1H,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;AACxC,IAAI,OAAO,OAAO;AAClB;AACO,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AACtD,IAAI,IAAI,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACjD,IAAI,IAAI,OAAO,GAAGC,cAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC;AACjJ,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;AACxC,IAAI,OAAO,OAAO;AAClB;AACO,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC3D,IAAI,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;AACxE;AACG,IAAC,WAAW,kBAAkB,YAAY;AAC7C,IAAI,SAAS,WAAW,GAAG;AAC3B,IAAI;AACJ,IAAI,WAAW,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5D,QAAQ,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC9C,IAAI,CAAC;AACL,IAAI,WAAW,CAAC,YAAY,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAClE,QAAQ,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AACpD,IAAI,CAAC;AACL,IAAI,WAAW,CAAC,OAAO,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AACvE,QAAQ,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;AACzD,IAAI,CAAC;AACL,IAAI,OAAO,WAAW;AACtB,CAAC,EAAE;AAEH;AACA;AACA;AACe,SAAS,aAAa,CAAC,OAAO,EAAE;AAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE;AACjE,QAAQ,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC9C,IAAI,CAAC;AACL,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE;AACvE,QAAQ,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AACpD,IAAI,CAAC;AACL,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE;AACzE,QAAQ,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC9C,IAAI,CAAC;AACL,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE;AAC/E,QAAQ,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AACpD,IAAI,CAAC;AACL;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -550,6 +550,72 @@ function getNonSelfIntersectionPath(path) {
550
550
  }
551
551
  return path;
552
552
  }
553
+ function offsetCompoundChild(child, parent, offset, join, limit, strategy) {
554
+ if (child.segments.length <= 1) {
555
+ return null;
556
+ }
557
+ if (!isSameDirection(child, parent)) {
558
+ child.reverse();
559
+ }
560
+ var childOffset = offsetSimpleShape(child, offset, join, limit, strategy);
561
+ childOffset = normalize(childOffset);
562
+ if (childOffset.clockwise !== child.clockwise) {
563
+ childOffset.reverse();
564
+ }
565
+ if (childOffset instanceof paper.CompoundPath) {
566
+ childOffset.applyMatrix = true;
567
+ return childOffset.children;
568
+ }
569
+ return childOffset;
570
+ }
571
+ function offsetCompoundShape(path, offset, join, limit, strategy) {
572
+ var children = path.children.filter(function (child) { return child.segments.length > 1; });
573
+ var outers = children.filter(function (child) { return child.clockwise; });
574
+ var holes = children.filter(function (child) { return !child.clockwise; });
575
+ if (outers.length === 0 || holes.length === 0) {
576
+ var offsetParts = children.map(function (child) { return offsetCompoundChild(child, path, offset, join, limit, strategy); });
577
+ return new paper.CompoundPath({ children: offsetParts.flat().filter(function (child) { return !!child; }), insert: false });
578
+ }
579
+ var pieces = outers.map(function (outer) {
580
+ var outerOffset = offsetCompoundChild(outer, path, offset, join, limit, strategy);
581
+ var result = outerOffset instanceof Array
582
+ ? new paper.CompoundPath({ children: outerOffset, insert: false })
583
+ : outerOffset;
584
+ holes.forEach(function (hole) {
585
+ if (!outer.contains(hole.bounds.center)) {
586
+ return;
587
+ }
588
+ var holeOffset = offsetCompoundChild(hole, path, offset, join, limit, strategy);
589
+ if (!holeOffset) {
590
+ return;
591
+ }
592
+ var holePath = holeOffset instanceof Array
593
+ ? new paper.CompoundPath({ children: holeOffset, insert: false })
594
+ : holeOffset;
595
+ var next = result.subtract(holePath, { insert: false });
596
+ result.remove();
597
+ holePath.remove();
598
+ result = next;
599
+ });
600
+ return result;
601
+ });
602
+ if (pieces.length === 1) {
603
+ return pieces[0];
604
+ }
605
+ return pieces.slice(1).reduce(function (result, piece) {
606
+ var next = result.unite(piece, { insert: false });
607
+ result.remove();
608
+ piece.remove();
609
+ return next;
610
+ }, pieces[0]);
611
+ }
612
+ function hasCompoundHoles(path) {
613
+ if (!(path instanceof paper.CompoundPath)) {
614
+ return false;
615
+ }
616
+ var children = path.children;
617
+ return children.some(function (child) { return child.clockwise; }) && children.some(function (child) { return !child.clockwise; });
618
+ }
553
619
  function withoutAdaptiveFallback(strategy) {
554
620
  return {
555
621
  algorithm: 'robust',
@@ -605,37 +671,17 @@ function offsetPathWithStrategy(path, offset, join, limit, strategy) {
605
671
  return offsetPathAdaptive(path, offset, join, limit, strategy);
606
672
  }
607
673
  var nonSIPath = getNonSelfIntersectionPath(path);
674
+ var shouldNormalizeResult = !hasCompoundHoles(nonSIPath);
608
675
  var result = nonSIPath;
609
676
  if (nonSIPath instanceof paper.Path) {
610
677
  result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);
611
678
  }
612
679
  else {
613
- var offsetParts = nonSIPath.children.map(function (c) {
614
- if (c.segments.length > 1) {
615
- if (!isSameDirection(c, path)) {
616
- c.reverse();
617
- }
618
- var offsetPath_1 = offsetSimpleShape(c, offset, join, limit, strategy);
619
- offsetPath_1 = normalize(offsetPath_1);
620
- if (offsetPath_1.clockwise !== c.clockwise) {
621
- offsetPath_1.reverse();
622
- }
623
- if (offsetPath_1 instanceof paper.CompoundPath) {
624
- offsetPath_1.applyMatrix = true;
625
- return offsetPath_1.children;
626
- }
627
- else {
628
- return offsetPath_1;
629
- }
630
- }
631
- else {
632
- return null;
633
- }
634
- });
635
- var children = offsetParts.flat().filter(function (c) { return !!c; });
636
- result = new paper.CompoundPath({ children: children, insert: false });
680
+ result = offsetCompoundShape(nonSIPath, offset, join, limit, strategy);
681
+ }
682
+ if (shouldNormalizeResult) {
683
+ result = normalize(result);
637
684
  }
638
- result = normalize(result);
639
685
  result.copyAttributes(nonSIPath, false);
640
686
  result.remove();
641
687
  return result;