From a96b7747e92d39126d454aaa5d2d174d37a689b1 Mon Sep 17 00:00:00 2001 From: Yasuhito Takamiya Date: Thu, 14 Apr 2022 08:14:25 +0900 Subject: [PATCH] update application.js --- apps/tutorial/application.js | 476 +++++++++++++++---------------- apps/tutorial/application.js.map | 4 +- docs/application.js | 476 +++++++++++++++---------------- docs/application.js.map | 4 +- 4 files changed, 480 insertions(+), 480 deletions(-) diff --git a/apps/tutorial/application.js b/apps/tutorial/application.js index fe0771f70..38e852b2c 100644 --- a/apps/tutorial/application.js +++ b/apps/tutorial/application.js @@ -1456,7 +1456,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho u2(Ot, "X"), Object.defineProperty(Dt, "__esModule", { value: true }), Dt.default = void 0, Ot.prefixedPropREs = { webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/, moz: /(Pressure)$/ }; var Cr = Ot; Dt.default = Cr; - var K = {}; + var J = {}; function xt(n) { return n instanceof S.default.Event || n instanceof S.default.Touch; } @@ -1494,39 +1494,39 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return o2; } __name(ur, "ur"); - u2(ur, "q"), Object.defineProperty(K, "__esModule", { value: true }), K.copyCoords = function(n, o2) { + u2(ur, "q"), Object.defineProperty(J, "__esModule", { value: true }), J.copyCoords = function(n, o2) { n.page = n.page || {}, n.page.x = o2.page.x, n.page.y = o2.page.y, n.client = n.client || {}, n.client.x = o2.client.x, n.client.y = o2.client.y, n.timeStamp = o2.timeStamp; - }, K.setCoordDeltas = function(n, o2, a) { + }, J.setCoordDeltas = function(n, o2, a) { n.page.x = a.page.x - o2.page.x, n.page.y = a.page.y - o2.page.y, n.client.x = a.client.x - o2.client.x, n.client.y = a.client.y - o2.client.y, n.timeStamp = a.timeStamp - o2.timeStamp; - }, K.setCoordVelocity = function(n, o2) { + }, J.setCoordVelocity = function(n, o2) { var a = Math.max(o2.timeStamp / 1e3, 1e-3); n.page.x = o2.page.x / a, n.page.y = o2.page.y / a, n.client.x = o2.client.x / a, n.client.y = o2.client.y / a, n.timeStamp = a; - }, K.setZeroCoords = function(n) { + }, J.setZeroCoords = function(n) { n.page.x = 0, n.page.y = 0, n.client.x = 0, n.client.y = 0; - }, K.isNativePointer = xt, K.getXY = wt, K.getPageXY = _r, K.getClientXY = $t, K.getPointerId = function(n) { + }, J.isNativePointer = xt, J.getXY = wt, J.getPageXY = _r, J.getClientXY = $t, J.getPointerId = function(n) { return c2.default.number(n.pointerId) ? n.pointerId : n.identifier; - }, K.setCoords = function(n, o2, a) { + }, J.setCoords = function(n, o2, a) { var s = o2.length > 1 ? ur(o2) : o2[0]; _r(s, n.page), $t(s, n.client), n.timeStamp = a; - }, K.getTouchPair = lr, K.pointerAverage = ur, K.touchBBox = function(n) { + }, J.getTouchPair = lr, J.pointerAverage = ur, J.touchBBox = function(n) { if (!n.length) return null; var o2 = lr(n), a = Math.min(o2[0].pageX, o2[1].pageX), s = Math.min(o2[0].pageY, o2[1].pageY), p2 = Math.max(o2[0].pageX, o2[1].pageX), f2 = Math.max(o2[0].pageY, o2[1].pageY); return { x: a, y: s, left: a, top: s, right: p2, bottom: f2, width: p2 - a, height: f2 - s }; - }, K.touchDistance = function(n, o2) { + }, J.touchDistance = function(n, o2) { var a = o2 + "X", s = o2 + "Y", p2 = lr(n), f2 = p2[0][a] - p2[1][a], m2 = p2[0][s] - p2[1][s]; return (0, et.default)(f2, m2); - }, K.touchAngle = function(n, o2) { + }, J.touchAngle = function(n, o2) { var a = o2 + "X", s = o2 + "Y", p2 = lr(n), f2 = p2[1][a] - p2[0][a], m2 = p2[1][s] - p2[0][s]; return 180 * Math.atan2(m2, f2) / Math.PI; - }, K.getPointerType = function(n) { + }, J.getPointerType = function(n) { return c2.default.string(n.pointerType) ? n.pointerType : c2.default.number(n.pointerType) ? [void 0, void 0, "touch", "pen", "mouse"][n.pointerType] : /touch/.test(n.type || "") || n instanceof S.default.Touch ? "touch" : "mouse"; - }, K.getEventTargets = function(n) { + }, J.getEventTargets = function(n) { var o2 = c2.default.func(n.composedPath) ? n.composedPath() : n.path; return [z2.getActualElement(o2 ? o2[0] : n.target), z2.getActualElement(n.currentTarget)]; - }, K.newCoords = function() { + }, J.newCoords = function() { return { page: { x: 0, y: 0 }, client: { x: 0, y: 0 }, timeStamp: 0 }; - }, K.coordsToEvent = function(n) { + }, J.coordsToEvent = function(n) { return { coords: n, get page() { return this.coords.page; }, get client() { @@ -1553,7 +1553,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return this.coords.buttons; }, preventDefault: function() { } }; - }, Object.defineProperty(K, "pointerExtend", { enumerable: true, get: function() { + }, Object.defineProperty(J, "pointerExtend", { enumerable: true, get: function() { return Dt.default; } }); var Rt = {}; @@ -1808,7 +1808,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return !!C.options.drop.checker && C.options.drop.checker(N2, G2, ee, C, Z, D2, H); var se = C.options.drop.overlap; if (se === "pointer") { - var pe = (0, Ge.default)(D2, H, "drag"), we = K.getPageXY(N2); + var pe = (0, Ge.default)(D2, H, "drag"), we = J.getPageXY(N2); we.x += pe.x, we.y += pe.y; var qe = we.x > F2.left && we.x < F2.right, be = we.y > F2.top && we.y < F2.bottom; ee = qe && be; @@ -1856,12 +1856,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return x.pointer; }), f2 = s === "start", m2 = s === "end", h2 = o2.interactable.options.deltaSource; if (a.touches = [p2[0], p2[1]], f2) - a.distance = K.touchDistance(p2, h2), a.box = K.touchBBox(p2), a.scale = 1, a.ds = 0, a.angle = K.touchAngle(p2, h2), a.da = 0, o2.gesture.startDistance = a.distance, o2.gesture.startAngle = a.angle; + a.distance = J.touchDistance(p2, h2), a.box = J.touchBBox(p2), a.scale = 1, a.ds = 0, a.angle = J.touchAngle(p2, h2), a.da = 0, o2.gesture.startDistance = a.distance, o2.gesture.startAngle = a.angle; else if (m2) { var g = o2.prevEvent; a.distance = g.distance, a.box = g.box, a.scale = g.scale, a.ds = 0, a.angle = g.angle, a.da = 0; } else - a.distance = K.touchDistance(p2, h2), a.box = K.touchBBox(p2), a.scale = a.distance / o2.gesture.startDistance, a.angle = K.touchAngle(p2, h2), a.ds = a.scale - o2.gesture.scale, a.da = a.angle - o2.gesture.angle; + a.distance = J.touchDistance(p2, h2), a.box = J.touchBBox(p2), a.scale = a.distance / o2.gesture.startDistance, a.angle = J.touchAngle(p2, h2), a.ds = a.scale - o2.gesture.scale, a.da = a.angle - o2.gesture.angle; o2.gesture.distance = a.distance, o2.gesture.angle = a.angle, c2.default.number(a.scale) && a.scale !== 1 / 0 && !isNaN(a.scale) && (o2.gesture.scale = a.scale); } } @@ -1999,7 +1999,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho Pr.default = Vr; var kt = {}; Object.defineProperty(kt, "__esModule", { value: true }), kt.default = void 0; - var Nt, Ht, Sl = 0, Kp = { request: function(n) { + var Nt, Ht, Sl = 0, Jp = { request: function(n) { return Nt(n); }, cancel: function(n) { return Ht(n); @@ -2018,7 +2018,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return clearTimeout(p2); }, "It")); } }; - kt.default = Kp; + kt.default = Jp; var Xr = {}; Object.defineProperty(Xr, "__esModule", { value: true }), Xr.getContainer = Eo, Xr.getScroll = Si, Xr.getScrollSize = function(n) { return c2.default.window(n) && (n = window.document.body), { x: n.scrollWidth, y: n.scrollHeight }; @@ -2756,7 +2756,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho throw new TypeError("Cannot call a class as a function"); })(this, n), $e(this, "interactable", null), $e(this, "element", null), $e(this, "rect", void 0), $e(this, "_rects", void 0), $e(this, "edges", void 0), $e(this, "_scopeFire", void 0), $e(this, "prepared", { name: null, axis: null, edges: null }), $e(this, "pointerType", void 0), $e(this, "pointers", []), $e(this, "downEvent", null), $e(this, "downPointer", {}), $e(this, "_latestPointer", { pointer: null, event: null, eventTarget: null }), $e(this, "prevEvent", null), $e(this, "pointerIsDown", false), $e(this, "pointerWasMoved", false), $e(this, "_interacting", false), $e(this, "_ending", false), $e(this, "_stopped", true), $e(this, "_proxy", null), $e(this, "simulation", null), $e(this, "doMove", (0, Gt.warnOnce)(function(N2) { this.move(N2); - }, "The interaction.doMove() method has been renamed to interaction.move()")), $e(this, "coords", { start: K.newCoords(), prev: K.newCoords(), cur: K.newCoords(), delta: K.newCoords(), velocity: K.newCoords() }), $e(this, "_id", bd++), this._scopeFire = m2, this.pointerType = f2; + }, "The interaction.doMove() method has been renamed to interaction.move()")), $e(this, "coords", { start: J.newCoords(), prev: J.newCoords(), cur: J.newCoords(), delta: J.newCoords(), velocity: J.newCoords() }), $e(this, "_id", bd++), this._scopeFire = m2, this.pointerType = f2; var h2 = this; this._proxy = {}; var g = u2(function(N2) { @@ -2790,9 +2790,9 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho var m2, h2, g = this.coords.cur.page.x === this.coords.prev.page.x && this.coords.cur.page.y === this.coords.prev.page.y && this.coords.cur.client.x === this.coords.prev.client.x && this.coords.cur.client.y === this.coords.prev.client.y; this.pointerIsDown && !this.pointerWasMoved && (m2 = this.coords.cur.client.x - this.coords.start.client.x, h2 = this.coords.cur.client.y - this.coords.start.client.y, this.pointerWasMoved = (0, et.default)(m2, h2) > this.pointerMoveTolerance); var x = this.getPointerIndex(s), T = { pointer: s, pointerIndex: x, pointerInfo: this.pointers[x], event: p2, type: "move", eventTarget: f2, dx: m2, dy: h2, duplicate: g, interaction: this }; - g || K.setCoordVelocity(this.coords.velocity, this.coords.delta), this._scopeFire("interactions:move", T), g || this.simulation || (this.interacting() && (T.type = null, this.move(T)), this.pointerWasMoved && K.copyCoords(this.coords.prev, this.coords.cur)); + g || J.setCoordVelocity(this.coords.velocity, this.coords.delta), this._scopeFire("interactions:move", T), g || this.simulation || (this.interacting() && (T.type = null, this.move(T)), this.pointerWasMoved && J.copyCoords(this.coords.prev, this.coords.cur)); } }, { key: "move", value: function(s) { - s && s.event || K.setZeroCoords(this.coords.delta), (s = (0, W.default)({ pointer: this._latestPointer.pointer, event: this._latestPointer.event, eventTarget: this._latestPointer.eventTarget, interaction: this }, s || {})).phase = "move", this._doPhase(s); + s && s.event || J.setZeroCoords(this.coords.delta), (s = (0, W.default)({ pointer: this._latestPointer.pointer, event: this._latestPointer.event, eventTarget: this._latestPointer.eventTarget, interaction: this }, s || {})).phase = "move", this._doPhase(s); } }, { key: "pointerUp", value: function(s, p2, f2, m2) { var h2 = this.getPointerIndex(s); h2 === -1 && (h2 = this.updatePointer(s, p2, f2, false)); @@ -2810,17 +2810,17 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } }, { key: "stop", value: function() { this._scopeFire("interactions:stop", { interaction: this }), this.interactable = this.element = null, this._interacting = false, this._stopped = true, this.prepared.name = this.prevEvent = null; } }, { key: "getPointerIndex", value: function(s) { - var p2 = K.getPointerId(s); + var p2 = J.getPointerId(s); return this.pointerType === "mouse" || this.pointerType === "pen" ? this.pointers.length - 1 : xe.findIndex(this.pointers, function(f2) { return f2.id === p2; }); } }, { key: "getPointerInfo", value: function(s) { return this.pointers[this.getPointerIndex(s)]; } }, { key: "updatePointer", value: function(s, p2, f2, m2) { - var h2 = K.getPointerId(s), g = this.getPointerIndex(s), x = this.pointers[g]; - return m2 = m2 !== false && (m2 || /(down|start)$/i.test(p2.type)), x ? x.pointer = s : (x = new _i.PointerInfo(h2, s, p2, null, null), g = this.pointers.length, this.pointers.push(x)), K.setCoords(this.coords.cur, this.pointers.map(function(T) { + var h2 = J.getPointerId(s), g = this.getPointerIndex(s), x = this.pointers[g]; + return m2 = m2 !== false && (m2 || /(down|start)$/i.test(p2.type)), x ? x.pointer = s : (x = new _i.PointerInfo(h2, s, p2, null, null), g = this.pointers.length, this.pointers.push(x)), J.setCoords(this.coords.cur, this.pointers.map(function(T) { return T.pointer; - }), this._now()), K.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur), m2 && (this.pointerIsDown = true, x.downTime = this.coords.cur.timeStamp, x.downTarget = f2, K.pointerExtend(this.downPointer, s), this.interacting() || (K.copyCoords(this.coords.start, this.coords.cur), K.copyCoords(this.coords.prev, this.coords.cur), this.downEvent = p2, this.pointerWasMoved = false)), this._updateLatestPointer(s, p2, f2), this._scopeFire("interactions:update-pointer", { pointer: s, event: p2, eventTarget: f2, down: m2, pointerInfo: x, pointerIndex: g, interaction: this }), g; + }), this._now()), J.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur), m2 && (this.pointerIsDown = true, x.downTime = this.coords.cur.timeStamp, x.downTarget = f2, J.pointerExtend(this.downPointer, s), this.interacting() || (J.copyCoords(this.coords.start, this.coords.cur), J.copyCoords(this.coords.prev, this.coords.cur), this.downEvent = p2, this.pointerWasMoved = false)), this._updateLatestPointer(s, p2, f2), this._scopeFire("interactions:update-pointer", { pointer: s, event: p2, eventTarget: f2, down: m2, pointerInfo: x, pointerIndex: g, interaction: this }), g; } }, { key: "removePointer", value: function(s, p2) { var f2 = this.getPointerIndex(s); if (f2 !== -1) { @@ -2850,7 +2850,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho Mt.default = yd; var vn = {}; function Gl(n) { - n.pointerIsDown && (Ja(n.coords.cur, n.offset.total), n.offset.pending.x = 0, n.offset.pending.y = 0); + n.pointerIsDown && (Ka(n.coords.cur, n.offset.total), n.offset.pending.x = 0, n.offset.pending.y = 0); } __name(Gl, "Gl"); u2(Gl, "He"); @@ -2865,7 +2865,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho }(n)) return false; var o2 = n.offset.pending; - return Ja(n.coords.cur, o2), Ja(n.coords.delta, o2), ce.addEdges(n.edges, n.rect, o2), o2.x = 0, o2.y = 0, true; + return Ka(n.coords.cur, o2), Ka(n.coords.delta, o2), ce.addEdges(n.edges, n.rect, o2), o2.x = 0, o2.y = 0, true; } __name(Za, "Za"); u2(Za, "Ze"); @@ -2875,12 +2875,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } __name(xd, "xd"); u2(xd, "Je"); - function Ja(n, o2) { + function Ka(n, o2) { var a = n.page, s = n.client, p2 = o2.x, f2 = o2.y; a.x += p2, a.y += f2, s.x += p2, s.y += f2; } - __name(Ja, "Ja"); - u2(Ja, "Qe"), Object.defineProperty(vn, "__esModule", { value: true }), vn.addTotal = Gl, vn.applyPending = Za, vn.default = void 0, Mt._ProxyMethods.offsetBy = ""; + __name(Ka, "Ka"); + u2(Ka, "Qe"), Object.defineProperty(vn, "__esModule", { value: true }), vn.addTotal = Gl, vn.applyPending = Za, vn.default = void 0, Mt._ProxyMethods.offsetBy = ""; var wd = { id: "offset", before: ["modifiers", "pointer-events", "actions", "inertia"], install: function(n) { n.Interaction.prototype.offsetBy = xd; }, listeners: { "interactions:new": function(n) { @@ -2972,7 +2972,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho p2.offsetBy({ x: this.targetOffset.x - this.currentOffset.x, y: this.targetOffset.y - this.currentOffset.y }), this.end(); } }, { key: "resume", value: function(s) { var p2 = s.pointer, f2 = s.event, m2 = s.eventTarget, h2 = this.interaction; - h2.offsetBy({ x: -this.currentOffset.x, y: -this.currentOffset.y }), h2.updatePointer(p2, f2, m2, true), h2._doPhase({ interaction: h2, event: f2, phase: "resume" }), (0, K.copyCoords)(h2.coords.prev, h2.coords.cur), this.stop(); + h2.offsetBy({ x: -this.currentOffset.x, y: -this.currentOffset.y }), h2.updatePointer(p2, f2, m2, true), h2._doPhase({ interaction: h2, event: f2, phase: "resume" }), (0, J.copyCoords)(h2.coords.prev, h2.coords.cur), this.stop(); } }, { key: "end", value: function() { this.interaction.move(), this.interaction.end(), this.stop(); } }, { key: "stop", value: function() { @@ -3094,13 +3094,13 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho return true; return false; }; - var Ka = {}; - Object.defineProperty(Ka, "__esModule", { value: true }), Ka.createInteractStatic = function(n) { + var Ja = {}; + Object.defineProperty(Ja, "__esModule", { value: true }), Ja.createInteractStatic = function(n) { var o2 = u2(/* @__PURE__ */ __name(function a(s, p2) { var f2 = n.interactables.get(s, p2); return f2 || ((f2 = n.interactables.new(s, p2)).events.global = a.globalEvents), f2; }, "a"), "e"); - return o2.getPointerAverage = K.pointerAverage, o2.getTouchBBox = K.touchBBox, o2.getTouchDistance = K.touchDistance, o2.getTouchAngle = K.touchAngle, o2.getElementRect = z2.getElementRect, o2.getElementClientRect = z2.getElementClientRect, o2.matchesSelector = z2.matchesSelector, o2.closest = z2.closest, o2.globalEvents = {}, o2.version = "1.10.11", o2.scope = n, o2.use = function(a, s) { + return o2.getPointerAverage = J.pointerAverage, o2.getTouchBBox = J.touchBBox, o2.getTouchDistance = J.touchDistance, o2.getTouchAngle = J.touchAngle, o2.getElementRect = z2.getElementRect, o2.getElementClientRect = z2.getElementClientRect, o2.matchesSelector = z2.matchesSelector, o2.closest = z2.closest, o2.globalEvents = {}, o2.version = "1.10.11", o2.scope = n, o2.use = function(a, s) { return this.scope.usePlugin(a, s), this; }, o2.isSet = function(a, s) { return !!this.scope.interactables.get(a, s && s.context); @@ -3458,7 +3458,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho __name(h2, "h"); u2(h2, "l"); function g(T, C) { - for (var N2 = Di(C), G2 = new Id(T), D2 = s[T.type], H = ts(K.getEventTargets(T), 1)[0], Z = H; c2.default.element(Z); ) { + for (var N2 = Di(C), G2 = new Id(T), D2 = s[T.type], H = ts(J.getEventTargets(T), 1)[0], Z = H; c2.default.element(Z); ) { for (var F2 = 0; F2 < D2.length; F2++) { var ee = D2[F2], se = ee.selector, pe = ee.context; if (z2.matchesSelector(Z, se) && z2.nodeContains(pe, H) && z2.nodeContains(pe, Z)) { @@ -3657,11 +3657,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho var ns = ["pointerDown", "pointerMove", "pointerUp", "updatePointer", "removePointer", "windowBlur"]; function Yl(n, o2) { return function(a) { - var s = o2.interactions.list, p2 = K.getPointerType(a), f2 = Wl(K.getEventTargets(a), 2), m2 = f2[0], h2 = f2[1], g = []; + var s = o2.interactions.list, p2 = J.getPointerType(a), f2 = Wl(J.getEventTargets(a), 2), m2 = f2[0], h2 = f2[1], g = []; if (/^touch/.test(a.type)) { o2.prevTouchTime = o2.now(); for (var x = 0; x < a.changedTouches.length; x++) { - var T = a.changedTouches[x], C = { pointer: T, pointerId: K.getPointerId(T), pointerType: p2, eventType: a.type, eventTarget: m2, curEventTarget: h2, scope: o2 }, N2 = Zl(C); + var T = a.changedTouches[x], C = { pointer: T, pointerId: J.getPointerId(T), pointerType: p2, eventType: a.type, eventTarget: m2, curEventTarget: h2, scope: o2 }, N2 = Zl(C); g.push([C.pointer, C.eventTarget, C.curEventTarget, N2]); } } else { @@ -3672,7 +3672,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho G2 = G2 || o2.now() - o2.prevTouchTime < 500 || a.timeStamp === 0; } if (!G2) { - var H = { pointer: a, pointerId: K.getPointerId(a), pointerType: p2, eventType: a.type, curEventTarget: h2, eventTarget: m2, scope: o2 }, Z = Zl(H); + var H = { pointer: a, pointerId: J.getPointerId(a), pointerType: p2, eventType: a.type, curEventTarget: h2, eventTarget: m2, scope: o2 }, Z = Zl(H); g.push([H.pointer, H.eventTarget, H.curEventTarget, Z]); } } @@ -3781,15 +3781,15 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } }, onDocSignal: is, doOnInteractions: Yl, methodNames: ns }; Lo.default = Gd; var Ri = {}; - function Jl(n) { - return (Jl = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(o2) { + function Kl(n) { + return (Kl = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(o2) { return typeof o2; } : function(o2) { return o2 && typeof Symbol == "function" && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; })(n); } - __name(Jl, "Jl"); - u2(Jl, "Jn"); + __name(Kl, "Kl"); + u2(Kl, "Jn"); function os(n, o2, a) { return (os = typeof Reflect != "undefined" && Reflect.get ? Reflect.get : function(s, p2, f2) { var m2 = function(g, x) { @@ -3805,15 +3805,15 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } __name(os, "os"); u2(os, "Qn"); - function Kl(n, o2) { - return (Kl = Object.setPrototypeOf || function(a, s) { + function Jl(n, o2) { + return (Jl = Object.setPrototypeOf || function(a, s) { return a.__proto__ = s, a; })(n, o2); } - __name(Kl, "Kl"); - u2(Kl, "tr"); + __name(Jl, "Jl"); + u2(Jl, "tr"); function Ld(n, o2) { - return !o2 || Jl(o2) !== "object" && typeof o2 != "function" ? function(a) { + return !o2 || Kl(o2) !== "object" && typeof o2 != "function" ? function(a) { if (a === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return a; @@ -3855,7 +3855,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho var qd = function() { function n() { var o2 = this; - Ql(this, n), vt(this, "id", "__interact_scope_".concat(Math.floor(100 * Math.random()))), vt(this, "isInitialized", false), vt(this, "listenerMaps", []), vt(this, "browser", L.default), vt(this, "defaults", (0, dn.default)(Oi.defaults)), vt(this, "Eventable", Ai.Eventable), vt(this, "actions", { map: {}, phases: { start: true, move: true, end: true }, methodDict: {}, phaselessTypes: {} }), vt(this, "interactStatic", (0, Ka.createInteractStatic)(this)), vt(this, "InteractEvent", Ci.InteractEvent), vt(this, "Interactable", void 0), vt(this, "interactables", new zo.InteractableSet(this)), vt(this, "_win", void 0), vt(this, "document", void 0), vt(this, "window", void 0), vt(this, "documents", []), vt(this, "_plugins", { list: [], map: {} }), vt(this, "onWindowUnload", function(s) { + Ql(this, n), vt(this, "id", "__interact_scope_".concat(Math.floor(100 * Math.random()))), vt(this, "isInitialized", false), vt(this, "listenerMaps", []), vt(this, "browser", L.default), vt(this, "defaults", (0, dn.default)(Oi.defaults)), vt(this, "Eventable", Ai.Eventable), vt(this, "actions", { map: {}, phases: { start: true, move: true, end: true }, methodDict: {}, phaselessTypes: {} }), vt(this, "interactStatic", (0, Ja.createInteractStatic)(this)), vt(this, "InteractEvent", Ci.InteractEvent), vt(this, "Interactable", void 0), vt(this, "interactables", new zo.InteractableSet(this)), vt(this, "_win", void 0), vt(this, "document", void 0), vt(this, "window", void 0), vt(this, "documents", []), vt(this, "_plugins", { list: [], map: {} }), vt(this, "onWindowUnload", function(s) { return o2.removeDocument(s.target); }); var a = this; @@ -3863,7 +3863,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho (function(g, x) { if (typeof x != "function" && x !== null) throw new TypeError("Super expression must either be null or a function"); - g.prototype = Object.create(x && x.prototype, { constructor: { value: g, writable: true, configurable: true } }), x && Kl(g, x); + g.prototype = Object.create(x && x.prototype, { constructor: { value: g, writable: true, configurable: true } }), x && Jl(g, x); })(h2, s); var p2, f2, m2 = (p2 = h2, f2 = function() { if (typeof Reflect == "undefined" || !Reflect.construct || Reflect.construct.sham) @@ -4190,22 +4190,22 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho }, set elementRect(n) { } }, Et.restrict.defaults), vu = { start: Et.restrict.start, set: Et.restrict.set, defaults: Zd }; Zn.restrictRect = vu; - var Jd = (0, ht.makeModifier)(vu, "restrictRect"); - Zn.default = Jd; - var Jn = {}; - Object.defineProperty(Jn, "__esModule", { value: true }), Jn.restrictSize = Jn.default = void 0; - var Kd = { width: -1 / 0, height: -1 / 0 }, Qd = { width: 1 / 0, height: 1 / 0 }, mu = { start: function(n) { + var Kd = (0, ht.makeModifier)(vu, "restrictRect"); + Zn.default = Kd; + var Kn = {}; + Object.defineProperty(Kn, "__esModule", { value: true }), Kn.restrictSize = Kn.default = void 0; + var Jd = { width: -1 / 0, height: -1 / 0 }, Qd = { width: 1 / 0, height: 1 / 0 }, mu = { start: function(n) { return yr.restrictEdges.start(n); }, set: function(n) { var o2 = n.interaction, a = n.state, s = n.rect, p2 = n.edges, f2 = a.options; if (p2) { - var m2 = ce.tlbrToXywh((0, Et.getRestrictionRect)(f2.min, o2, n.coords)) || Kd, h2 = ce.tlbrToXywh((0, Et.getRestrictionRect)(f2.max, o2, n.coords)) || Qd; + var m2 = ce.tlbrToXywh((0, Et.getRestrictionRect)(f2.min, o2, n.coords)) || Jd, h2 = ce.tlbrToXywh((0, Et.getRestrictionRect)(f2.max, o2, n.coords)) || Qd; a.options = { endOnly: f2.endOnly, inner: (0, W.default)({}, yr.restrictEdges.noInner), outer: (0, W.default)({}, yr.restrictEdges.noOuter) }, p2.top ? (a.options.inner.top = s.bottom - m2.height, a.options.outer.top = s.bottom - h2.height) : p2.bottom && (a.options.inner.bottom = s.top + m2.height, a.options.outer.bottom = s.top + h2.height), p2.left ? (a.options.inner.left = s.right - m2.width, a.options.outer.left = s.right - h2.width) : p2.right && (a.options.inner.right = s.left + m2.width, a.options.outer.right = s.left + h2.width), yr.restrictEdges.set(n), a.options = f2; } }, defaults: { min: null, max: null, endOnly: false, enabled: false } }; - Jn.restrictSize = mu; + Kn.restrictSize = mu; var ef = (0, ht.makeModifier)(mu, "restrictSize"); - Jn.default = ef; + Kn.default = ef; var us = {}; Object.defineProperty(us, "__esModule", { value: true }), Object.defineProperty(us, "default", { enumerable: true, get: function() { return mn.default; @@ -4311,15 +4311,15 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho Dr.snapSize = yu; var rf = (0, ht.makeModifier)(yu, "snapSize"); Dr.default = rf; - var Kn = {}; - Object.defineProperty(Kn, "__esModule", { value: true }), Kn.snapEdges = Kn.default = void 0; + var Jn = {}; + Object.defineProperty(Jn, "__esModule", { value: true }), Jn.snapEdges = Jn.default = void 0; var xu = { start: function(n) { var o2 = n.edges; return o2 ? (n.state.targetFields = n.state.targetFields || [[o2.left ? "left" : "right", o2.top ? "top" : "bottom"]], Dr.snapSize.start(n)) : null; }, set: Dr.snapSize.set, defaults: (0, W.default)((0, dn.default)(Dr.snapSize.defaults), { targets: null, range: null, offset: { x: 0, y: 0 } }) }; - Kn.snapEdges = xu; + Jn.snapEdges = xu; var nf = (0, ht.makeModifier)(xu, "snapEdges"); - Kn.default = nf; + Jn.default = nf; var cs = {}; Object.defineProperty(cs, "__esModule", { value: true }), Object.defineProperty(cs, "default", { enumerable: true, get: function() { return mn.default; @@ -4330,7 +4330,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } }); var Qn = {}; Object.defineProperty(Qn, "__esModule", { value: true }), Qn.default = void 0; - var of = { aspectRatio: Yn.default, restrictEdges: yr.default, restrict: Et.default, restrictRect: Zn.default, restrictSize: Jn.default, snapEdges: Kn.default, snap: Yr.default, snapSize: Dr.default, spring: cs.default, avoid: ss.default, transform: ps.default, rubberband: us.default }; + var of = { aspectRatio: Yn.default, restrictEdges: yr.default, restrict: Et.default, restrictRect: Zn.default, restrictSize: Kn.default, snapEdges: Jn.default, snap: Yr.default, snapSize: Dr.default, spring: cs.default, avoid: ss.default, transform: ps.default, rubberband: us.default }; Qn.default = of; var Ho = {}; Object.defineProperty(Ho, "__esModule", { value: true }), Ho.default = void 0; @@ -4422,7 +4422,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho if (function(Z, F2) { if (!(Z instanceof F2)) throw new TypeError("Cannot call a class as a function"); - }(this, m2), dr(At(G2 = f2.call(this, C)), "type", void 0), dr(At(G2), "originalEvent", void 0), dr(At(G2), "pointerId", void 0), dr(At(G2), "pointerType", void 0), dr(At(G2), "double", void 0), dr(At(G2), "pageX", void 0), dr(At(G2), "pageY", void 0), dr(At(G2), "clientX", void 0), dr(At(G2), "clientY", void 0), dr(At(G2), "dt", void 0), dr(At(G2), "eventable", void 0), K.pointerExtend(At(G2), x), x !== g && K.pointerExtend(At(G2), g), G2.timeStamp = N2, G2.originalEvent = x, G2.type = h2, G2.pointerId = K.getPointerId(g), G2.pointerType = K.getPointerType(g), G2.target = T, G2.currentTarget = null, h2 === "tap") { + }(this, m2), dr(At(G2 = f2.call(this, C)), "type", void 0), dr(At(G2), "originalEvent", void 0), dr(At(G2), "pointerId", void 0), dr(At(G2), "pointerType", void 0), dr(At(G2), "double", void 0), dr(At(G2), "pageX", void 0), dr(At(G2), "pageY", void 0), dr(At(G2), "clientX", void 0), dr(At(G2), "clientY", void 0), dr(At(G2), "dt", void 0), dr(At(G2), "eventable", void 0), J.pointerExtend(At(G2), x), x !== g && J.pointerExtend(At(G2), g), G2.timeStamp = N2, G2.originalEvent = x, G2.type = h2, G2.pointerId = J.getPointerId(g), G2.pointerType = J.getPointerType(g), G2.target = T, G2.currentTarget = null, h2 === "tap") { var D2 = C.getPointerIndex(g); G2.dt = G2.timeStamp - C.pointers[D2].downTime; var H = G2.timeStamp - C.tapTime; @@ -4601,10 +4601,10 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho G2._reflowResolve = ee; })); else { - var H = (0, ce.tlbrToXywh)(N2), Z = { page: { x: H.x, y: H.y }, client: { x: H.x, y: H.y }, timeStamp: f2.now() }, F2 = K.coordsToEvent(Z); + var H = (0, ce.tlbrToXywh)(N2), Z = { page: { x: H.x, y: H.y }, client: { x: H.x, y: H.y }, timeStamp: f2.now() }, F2 = J.coordsToEvent(Z); D2 = function(ee, se, pe, we, qe) { var be = ee.interactions.new({ pointerType: "reflow" }), De = { interaction: be, event: qe, pointer: qe, eventTarget: pe, phase: "reflow" }; - be.interactable = se, be.element = pe, be.prevEvent = qe, be.updatePointer(qe, qe, pe, true), K.setZeroCoords(be.coords.delta), (0, Gt.copyAction)(be.prepared, we), be._doPhase(De); + be.interactable = se, be.element = pe, be.prevEvent = qe, be.updatePointer(qe, qe, pe, true), J.setZeroCoords(be.coords.delta), (0, Gt.copyAction)(be.prepared, we), be._doPhase(De); var Ut = ee.window.Promise, Rr = Ut ? new Ut(function(hs) { be._reflowResolve = hs; }) : void 0; @@ -4809,7 +4809,7 @@ function j(r, e) { __name(j, "j"); u2(j, "attr"); var Pu = /* @__PURE__ */ new WeakSet(); -function Jo(r, e) { +function Ko(r, e) { if (!Pu.has(r)) { Pu.add(r), e || (e = Iu(Object.getPrototypeOf(r))); for (let t of e) { @@ -4830,8 +4830,8 @@ function Jo(r, e) { } } } -__name(Jo, "Jo"); -u2(Jo, "initializeAttrs"); +__name(Ko, "Ko"); +u2(Ko, "initializeAttrs"); function Iu(r) { let e = /* @__PURE__ */ new Set(), t = r; for (; t && t !== HTMLElement; ) { @@ -4861,12 +4861,12 @@ __name(Os, "Os"); u2(Os, "defineObservedAttributes"); var Cf = /* @__PURE__ */ new WeakSet(); function Ru(r, e) { - r.toggleAttribute("data-catalyst", true), customElements.upgrade(r), Cf.add(r), Ts(r), Jo(r), gs(r), e && e.call(r), r.shadowRoot && bs(r.shadowRoot); + r.toggleAttribute("data-catalyst", true), customElements.upgrade(r), Cf.add(r), Ts(r), Ko(r), gs(r), e && e.call(r), r.shadowRoot && bs(r.shadowRoot); } __name(Ru, "Ru"); u2(Ru, "initializeInstance"); function zu(r, e, t, i, l) { - Jo(r), e !== "data-catalyst" && l && l.call(r, e, t, i); + Ko(r), e !== "data-catalyst" && l && l.call(r, e, t, i); } __name(zu, "zu"); u2(zu, "initializeAttributeChanged"); @@ -4888,7 +4888,7 @@ function ne(r) { __name(ne, "ne"); u2(ne, "controller"); var yn = u2((r) => typeof r == "object" && r !== null && typeof r.angle == "string" && typeof r.reducedAngle == "string", "isAngleable"); -function Jr(r) { +function Kr(r) { class e extends r { constructor() { super(...arguments); @@ -4899,8 +4899,8 @@ function Jr(r) { __name(e, "e"); return u2(e, "AngleableMixinClass"), k([j], e.prototype, "angle", 2), k([j], e.prototype, "reducedAngle", 2), e; } -__name(Jr, "Jr"); -u2(Jr, "AngleableMixin"); +__name(Kr, "Kr"); +u2(Kr, "AngleableMixin"); var xn = u2((r) => typeof r == "object" && r !== null && typeof r.controls == "object", "isControllable"); function He(r) { class e extends r { @@ -5008,15 +5008,15 @@ var Ee; (function(r) { r.Start = "xstate.start", r.Stop = "xstate.stop", r.Raise = "xstate.raise", r.Send = "xstate.send", r.Cancel = "xstate.cancel", r.NullEvent = "", r.Assign = "xstate.assign", r.After = "xstate.after", r.DoneState = "done.state", r.DoneInvoke = "done.invoke", r.Log = "xstate.log", r.Init = "xstate.init", r.Invoke = "xstate.invoke", r.ErrorExecution = "error.execution", r.ErrorCommunication = "error.communication", r.ErrorPlatform = "error.platform", r.ErrorCustom = "xstate.error", r.Update = "xstate.update", r.Pure = "xstate.pure", r.Choose = "xstate.choose"; })(Ee || (Ee = {})); -var Kr; +var Jr; (function(r) { r.Parent = "#_parent", r.Internal = "#_internal"; -})(Kr || (Kr = {})); +})(Jr || (Jr = {})); var Li = Ee.Start; var ti = Ee.Stop; var ri = Ee.Raise; var wn = Ee.Send; -var Ko = Ee.Cancel; +var Jo = Ee.Cancel; var Nu = Ee.NullEvent; var Cs = Ee.Assign; var am = Ee.After; @@ -5382,7 +5382,7 @@ function Zu(r) { } __name(Zu, "Zu"); u2(Zu, "normalizeTarget"); -function Ju(r, e, t) { +function Ku(r, e, t) { if (!Le) { var i = r.stack ? " Stacktrace was '".concat(r.stack, "'") : ""; if (r === e) @@ -5393,8 +5393,8 @@ function Ju(r, e, t) { } } } -__name(Ju, "Ju"); -u2(Ju, "reportUnhandledExceptionOnInvocation"); +__name(Ku, "Ku"); +u2(Ku, "reportUnhandledExceptionOnInvocation"); function sa(r, e, t, i, l) { var c2 = r.options.guards, d2 = { state: l, cond: e, _event: i }; if (e.type === ta) @@ -5466,11 +5466,11 @@ function pa(r) { } __name(pa, "pa"); u2(pa, "toActivityDefinition"); -function Ku(r) { - return ge(r) ? { type: ri, event: r } : Rs(r, { to: Kr.Internal }); +function Ju(r) { + return ge(r) ? { type: ri, event: r } : Rs(r, { to: Jr.Internal }); } -__name(Ku, "Ku"); -u2(Ku, "raise"); +__name(Ju, "Ju"); +u2(Ju, "raise"); function Mf(r) { return { type: ri, _event: tt(r.event) }; } @@ -5497,7 +5497,7 @@ var Pf = u2(function(r, e, t) { return Y(Y({}, r), { value: ge(r.expr) ? r.expr : r.expr(e, t.data, { _event: t }) }); }, "resolveLog"); var Qu = u2(function(r) { - return { type: Ko, sendId: r }; + return { type: Jo, sendId: r }; }, "cancel"); function ec(r) { var e = pa(r); @@ -5965,7 +5965,7 @@ var Ls = function() { }(); var qs = /* @__PURE__ */ new Map(); var zf = 0; -var Ji = { bookId: function() { +var Ki = { bookId: function() { return "x:".concat(zf++); }, register: function(r, e) { return qs.set(r, e), r; @@ -6052,7 +6052,7 @@ Event: `).concat(JSON.stringify(O2.data))); i.update(M2, O2); }), i._state; }, this.sendTo = function(w2, A2) { - var O2 = i.parent && (A2 === Kr.Parent || i.parent.id === A2), M2 = O2 ? i.parent : ge(A2) ? i.children.get(A2) || Ji.get(A2) : Yu(A2) ? A2 : void 0; + var O2 = i.parent && (A2 === Jr.Parent || i.parent.id === A2), M2 = O2 ? i.parent : ge(A2) ? i.children.get(A2) || Ki.get(A2) : Yu(A2) ? A2 : void 0; if (!M2) { if (!O2) throw new Error("Unable to send event to child '".concat(A2, "' from service '").concat(i.id, "'.")); @@ -6062,7 +6062,7 @@ Event: `).concat(JSON.stringify(O2.data))); "machine" in M2 ? M2.send(Y(Y({}, w2), { name: w2.name === Ms ? "".concat(On(i.id)) : w2.name, origin: i.sessionId })) : M2.send(w2.data); }; var l = Y(Y({}, r.defaultOptions), t), c2 = l.clock, d2 = l.logger, v = l.parent, b = l.id, y = b !== void 0 ? b : e.id; - this.id = y, this.logger = d2, this.clock = c2, this.parent = v, this.options = l, this.scheduler = new Ls({ deferEvents: this.options.deferEvents }), this.sessionId = Ji.bookId(); + this.id = y, this.logger = d2, this.clock = c2, this.parent = v, this.options = l, this.scheduler = new Ls({ deferEvents: this.options.deferEvents }), this.sessionId = Ki.bookId(); } __name(r, "r"); return u2(r, "Interpreter"), Object.defineProperty(r.prototype, "initialState", { get: function() { @@ -6188,7 +6188,7 @@ Event: `).concat(JSON.stringify(O2.data))); var t = this; if (this.status === bt.Running) return this; - this.machine._init(), Ji.register(this.sessionId, this), this.initialized = true, this.status = bt.Running; + this.machine._init(), Ki.register(this.sessionId, this), this.initialized = true, this.status = bt.Running; var i = e === void 0 ? this.initialState : Cn(this, function() { return fc(e) ? t.machine.resolveState(e) : t.machine.resolveState(hr.from(e, t.machine.context)); }); @@ -6296,7 +6296,7 @@ Event: `).concat(JSON.stringify(O2.data))); throw y.error; } } - return this.scheduler.clear(), this.initialized = false, this.status = bt.Stopped, Ji.free(this.sessionId), this; + return this.scheduler.clear(), this.initialized = false, this.status = bt.Stopped, Ki.free(this.sessionId), this; }, r.prototype.batch = function(e) { var t = this; if (this.status === bt.NotStarted && this.options.deferEvents) @@ -6386,7 +6386,7 @@ Event: `).concat(JSON.stringify(event))); } else b.to ? this.sendTo(b._event, b.to) : this.send(b._event); break; - case Ko: + case Jo: this.cancel(e.sendId); break; case Li: { @@ -6472,7 +6472,7 @@ Event: `).concat(JSON.stringify(event))); try { l.send(tt(y, { origin: t })); } catch (w2) { - Ju(b, w2, t), l.devTools && l.devTools.send(y, l.state), l.machine.strict && l.stop(); + Ku(b, w2, t), l.devTools && l.devTools.send(y, l.state), l.machine.strict && l.stop(); } } }); @@ -6593,14 +6593,14 @@ Event: `).concat(JSON.stringify(event))); return setTimeout(e, t); }, clearTimeout: function(e) { return clearTimeout(e); - } }, logger: console.log.bind(console), devTools: false }, r.interpret = Je, r; + } }, logger: console.log.bind(console), devTools: false }, r.interpret = Ke, r; }(); -function Je(r, e) { +function Ke(r, e) { var t = new gc(r, e); return t; } -__name(Je, "Je"); -u2(Je, "interpret"); +__name(Ke, "Ke"); +u2(Ke, "interpret"); function Gf(r) { if (typeof r == "string") { var e = { type: r }; @@ -6612,15 +6612,15 @@ function Gf(r) { } __name(Gf, "Gf"); u2(Gf, "toInvokeSource"); -function Ki(r) { +function Ji(r) { return Y(Y({ type: qi }, r), { toJSON: function() { r.onDone, r.onError; var e = ei(r, ["onDone", "onError"]); return Y(Y({}, e), { type: qi, src: Gf(r.src) }); } }); } -__name(Ki, "Ki"); -u2(Ki, "toInvokeDefinition"); +__name(Ji, "Ji"); +u2(Ji, "toInvokeDefinition"); var ui = ""; var js = "#"; var Qi = "*"; @@ -6678,16 +6678,16 @@ var bc = function() { var A2, O2; if (wr(y)) { var M2 = Wi(c2.id, w2); - return c2.machine.options.services = Y((A2 = {}, A2[M2] = y, A2), c2.machine.options.services), Ki({ src: M2, id: M2 }); + return c2.machine.options.services = Y((A2 = {}, A2[M2] = y, A2), c2.machine.options.services), Ji({ src: M2, id: M2 }); } else if (ge(y.src)) { var M2 = y.id || Wi(c2.id, w2); - return Ki(Y(Y({}, y), { id: M2, src: y.src })); + return Ji(Y(Y({}, y), { id: M2, src: y.src })); } else if (wr(y.src) || Se(y.src)) { var M2 = y.id || Wi(c2.id, w2); - return c2.machine.options.services = Y((O2 = {}, O2[M2] = y.src, O2), c2.machine.options.services), Ki(Y(Y({ id: M2 }, y), { src: M2 })); + return c2.machine.options.services = Y((O2 = {}, O2[M2] = y.src, O2), c2.machine.options.services), Ji(Y(Y({ id: M2 }, y), { src: M2 })); } else { var R2 = y.src; - return Ki(Y(Y({ id: Wi(c2.id, w2) }, y), { src: R2 })); + return Ji(Y(Y({ id: Wi(c2.id, w2) }, y), { src: R2 })); } }), this.activities = Lt(this.config.activities).concat(this.invoke).map(function(y) { return pa(y); @@ -6923,7 +6923,7 @@ var bc = function() { return Re(Re([], me(X.activities.map(function(V) { return ec(V); })), false), me(X.onEntry), false); - })).concat(_.map(Ku)), ke(Array.from(I2).map(function(X) { + })).concat(_.map(Ju)), ke(Array.from(I2).map(function(X) { return Re(Re([], me(X.onExit), false), me(X.activities.map(function(V) { return tc(V); })), false); @@ -6967,7 +6967,7 @@ var bc = function() { } } var P = me(ca(this, t, i, l, O2, this.machine.config.preserveActionOrder), 2), I2 = P[0], L = P[1], E = me(oa(I2, function(fe) { - return fe.type === ri || fe.type === wn && fe.to === Kr.Internal; + return fe.type === ri || fe.type === wn && fe.to === Jr.Internal; }), 2), B = E[0], z2 = E[1], X = I2.filter(function(fe) { var Ze; return fe.type === Li && ((Ze = fe.activity) === null || Ze === void 0 ? void 0 : Ze.type) === qi; @@ -7691,7 +7691,7 @@ function Ce(r) { return ue.notNull(i), !Vs(i) && !Oa(i) ? null : i; } maybeInitStateMachine() { - this.draggableService === void 0 && (this.draggableService = Je(this.draggableMachine).onTransition((i) => { + this.draggableService === void 0 && (this.draggableService = Ke(this.draggableMachine).onTransition((i) => { this.debugDraggable && console.log(`draggable: ${nt(i.value)}`); }).start()); } @@ -7756,10 +7756,10 @@ __name(Ac, "Ac"); u2(Ac, "FlaggableMixin"); var Fe = "top"; var it = "bottom"; -var Ke = "right"; +var Je = "right"; var Ve = "left"; var Ca = "auto"; -var tn = [Fe, it, Ke, Ve]; +var tn = [Fe, it, Je, Ve]; var Gr = "start"; var In = "end"; var Pc = "clippingParents"; @@ -7772,8 +7772,8 @@ var Xs = tn.reduce(function(r, e) { var Ma = [].concat(tn, [Ca]).reduce(function(r, e) { return r.concat([e, e + "-" + Gr, e + "-" + In]); }, []); -var Jf = "beforeRead"; -var Kf = "read"; +var Kf = "beforeRead"; +var Jf = "read"; var Qf = "afterRead"; var eh = "beforeMain"; var th = "main"; @@ -7781,7 +7781,7 @@ var rh = "afterMain"; var nh = "beforeWrite"; var ih = "write"; var oh = "afterWrite"; -var Dc = [Jf, Kf, Qf, eh, th, rh, nh, ih, oh]; +var Dc = [Kf, Jf, Qf, eh, th, rh, nh, ih, oh]; function lt(r) { return r ? (r.nodeName || "").toLowerCase() : null; } @@ -7973,9 +7973,9 @@ var uh = u2(function(e, t) { return e = typeof e == "function" ? e(Object.assign({}, t.rects, { placement: t.placement })) : e, ao(typeof e != "number" ? e : so(e, tn)); }, "toPaddingObject"); function ch(r) { - var e, t = r.state, i = r.name, l = r.options, c2 = t.elements.arrow, d2 = t.modifiersData.popperOffsets, v = ut(t.placement), b = zn(v), y = [Ve, Ke].indexOf(v) >= 0, w2 = y ? "height" : "width"; + var e, t = r.state, i = r.name, l = r.options, c2 = t.elements.arrow, d2 = t.modifiersData.popperOffsets, v = ut(t.placement), b = zn(v), y = [Ve, Je].indexOf(v) >= 0, w2 = y ? "height" : "width"; if (!(!c2 || !d2)) { - var A2 = uh(l.padding, t), O2 = Rn(c2), M2 = b === "y" ? Fe : Ve, R2 = b === "y" ? it : Ke, S = t.rects.reference[w2] + t.rects.reference[b] - d2[b] - t.rects.popper[w2], _ = d2[b] - t.rects.reference[b], P = mr(c2), I2 = P ? b === "y" ? P.clientHeight || 0 : P.clientWidth || 0 : 0, L = S / 2 - _ / 2, E = A2[M2], B = I2 - O2[w2] - A2[R2], z2 = I2 / 2 - O2[w2] / 2 + L, X = kn(E, z2, B), V = b; + var A2 = uh(l.padding, t), O2 = Rn(c2), M2 = b === "y" ? Fe : Ve, R2 = b === "y" ? it : Je, S = t.rects.reference[w2] + t.rects.reference[b] - d2[b] - t.rects.popper[w2], _ = d2[b] - t.rects.reference[b], P = mr(c2), I2 = P ? b === "y" ? P.clientHeight || 0 : P.clientWidth || 0 : 0, L = S / 2 - _ / 2, E = A2[M2], B = I2 - O2[w2] - A2[R2], z2 = I2 / 2 - O2[w2] / 2 + L, X = kn(E, z2, B), V = b; t.modifiersData[i] = (e = {}, e[V] = X, e.centerOffset = X - z2, e); } } @@ -8006,13 +8006,13 @@ function Nc(r) { var P = d2.hasOwnProperty("x"), I2 = d2.hasOwnProperty("y"), L = Ve, E = Fe, B = window; if (y) { var z2 = mr(t), X = "clientHeight", V = "clientWidth"; - if (z2 === Xe(t) && (z2 = mt(t), St(z2).position !== "static" && v === "absolute" && (X = "scrollHeight", V = "scrollWidth")), z2 = z2, l === Fe || (l === Ve || l === Ke) && c2 === In) { + if (z2 === Xe(t) && (z2 = mt(t), St(z2).position !== "static" && v === "absolute" && (X = "scrollHeight", V = "scrollWidth")), z2 = z2, l === Fe || (l === Ve || l === Je) && c2 === In) { E = it; var $ = A2 && B.visualViewport ? B.visualViewport.height : z2[X]; S -= $ - i.height, S *= b ? 1 : -1; } if (l === Ve || (l === Fe || l === it) && c2 === In) { - L = Ke; + L = Je; var U = A2 && B.visualViewport ? B.visualViewport.width : z2[V]; M2 -= U - i.width, M2 *= b ? 1 : -1; } @@ -8084,12 +8084,12 @@ function Zs(r) { } __name(Zs, "Zs"); u2(Zs, "getViewportRect"); -function Js(r) { +function Ks(r) { var e, t = mt(r), i = Nn(r), l = (e = r.ownerDocument) == null ? void 0 : e.body, c2 = vr(t.scrollWidth, t.clientWidth, l ? l.scrollWidth : 0, l ? l.clientWidth : 0), d2 = vr(t.scrollHeight, t.clientHeight, l ? l.scrollHeight : 0, l ? l.clientHeight : 0), v = -i.scrollLeft + Gn(r), b = -i.scrollTop; return St(l || t).direction === "rtl" && (v += vr(t.clientWidth, l ? l.clientWidth : 0) - c2), { width: c2, height: d2, x: v, y: b }; } -__name(Js, "Js"); -u2(Js, "getDocumentRect"); +__name(Ks, "Ks"); +u2(Ks, "getDocumentRect"); function Ln(r) { var e = St(r), t = e.overflow, i = e.overflowX, l = e.overflowY; return /auto|scroll|overlay|hidden/.test(t + l + i); @@ -8121,7 +8121,7 @@ function bh(r) { __name(bh, "bh"); u2(bh, "getInnerBoundingClientRect"); function qc(r, e) { - return e === _a ? di(Zs(r)) : Er(e) ? bh(e) : di(Js(mt(r))); + return e === _a ? di(Zs(r)) : Er(e) ? bh(e) : di(Ks(mt(r))); } __name(qc, "qc"); u2(qc, "getClientRectFromMixedType"); @@ -8133,15 +8133,15 @@ function yh(r) { } __name(yh, "yh"); u2(yh, "getClippingParents"); -function Ks(r, e, t) { +function Js(r, e, t) { var i = e === "clippingParents" ? yh(r) : [].concat(e), l = [].concat(i, [t]), c2 = l[0], d2 = l.reduce(function(v, b) { var y = qc(r, b); return v.top = vr(y.top, v.top), v.right = Dn(y.right, v.right), v.bottom = Dn(y.bottom, v.bottom), v.left = vr(y.left, v.left), v; }, qc(r, c2)); return d2.width = d2.right - d2.left, d2.height = d2.bottom - d2.top, d2.x = d2.left, d2.y = d2.top, d2; } -__name(Ks, "Ks"); -u2(Ks, "getClippingRect"); +__name(Js, "Js"); +u2(Js, "getClippingRect"); function lo(r) { var e = r.reference, t = r.element, i = r.placement, l = i ? ut(i) : null, c2 = i ? Vt(i) : null, d2 = e.x + e.width / 2 - t.width / 2, v = e.y + e.height / 2 - t.height / 2, b; switch (l) { @@ -8151,7 +8151,7 @@ function lo(r) { case it: b = { x: d2, y: e.y + e.height }; break; - case Ke: + case Je: b = { x: e.x + e.width, y: v }; break; case Ve: @@ -8179,11 +8179,11 @@ __name(lo, "lo"); u2(lo, "computeOffsets"); function gr(r, e) { e === void 0 && (e = {}); - var t = e, i = t.placement, l = i === void 0 ? r.placement : i, c2 = t.boundary, d2 = c2 === void 0 ? Pc : c2, v = t.rootBoundary, b = v === void 0 ? _a : v, y = t.elementContext, w2 = y === void 0 ? ci : y, A2 = t.altBoundary, O2 = A2 === void 0 ? false : A2, M2 = t.padding, R2 = M2 === void 0 ? 0 : M2, S = ao(typeof R2 != "number" ? R2 : so(R2, tn)), _ = w2 === ci ? Ic : ci, P = r.rects.popper, I2 = r.elements[O2 ? _ : w2], L = Ks(Er(I2) ? I2 : I2.contextElement || mt(r.elements.popper), d2, b), E = Wt(r.elements.reference), B = lo({ reference: E, element: P, strategy: "absolute", placement: l }), z2 = di(Object.assign({}, P, B)), X = w2 === ci ? z2 : E, V = { top: L.top - X.top + S.top, bottom: X.bottom - L.bottom + S.bottom, left: L.left - X.left + S.left, right: X.right - L.right + S.right }, $ = r.modifiersData.offset; + var t = e, i = t.placement, l = i === void 0 ? r.placement : i, c2 = t.boundary, d2 = c2 === void 0 ? Pc : c2, v = t.rootBoundary, b = v === void 0 ? _a : v, y = t.elementContext, w2 = y === void 0 ? ci : y, A2 = t.altBoundary, O2 = A2 === void 0 ? false : A2, M2 = t.padding, R2 = M2 === void 0 ? 0 : M2, S = ao(typeof R2 != "number" ? R2 : so(R2, tn)), _ = w2 === ci ? Ic : ci, P = r.rects.popper, I2 = r.elements[O2 ? _ : w2], L = Js(Er(I2) ? I2 : I2.contextElement || mt(r.elements.popper), d2, b), E = Wt(r.elements.reference), B = lo({ reference: E, element: P, strategy: "absolute", placement: l }), z2 = di(Object.assign({}, P, B)), X = w2 === ci ? z2 : E, V = { top: L.top - X.top + S.top, bottom: X.bottom - L.bottom + S.bottom, left: L.left - X.left + S.left, right: X.right - L.right + S.right }, $ = r.modifiersData.offset; if (w2 === ci && $) { var U = $[l]; Object.keys(V).forEach(function(re) { - var ie = [Ke, it].indexOf(re) >= 0 ? 1 : -1, W = [Fe, it].indexOf(re) >= 0 ? "y" : "x"; + var ie = [Je, it].indexOf(re) >= 0 ? 1 : -1, W = [Fe, it].indexOf(re) >= 0 ? "y" : "x"; V[re] += U[W] * ie; }); } @@ -8219,14 +8219,14 @@ u2(xh, "getExpandedFallbackPlacements"); function wh(r) { var e = r.state, t = r.options, i = r.name; if (!e.modifiersData[i]._skip) { - for (var l = t.mainAxis, c2 = l === void 0 ? true : l, d2 = t.altAxis, v = d2 === void 0 ? true : d2, b = t.fallbackPlacements, y = t.padding, w2 = t.boundary, A2 = t.rootBoundary, O2 = t.altBoundary, M2 = t.flipVariations, R2 = M2 === void 0 ? true : M2, S = t.allowedAutoPlacements, _ = e.options.placement, P = ut(_), I2 = P === _, L = b || (I2 || !R2 ? [pi(_)] : xh(_)), E = [_].concat(L).reduce(function(K, xt) { - return K.concat(ut(xt) === Ca ? Qs(e, { placement: xt, boundary: w2, rootBoundary: A2, padding: y, flipVariations: R2, allowedAutoPlacements: S }) : xt); + for (var l = t.mainAxis, c2 = l === void 0 ? true : l, d2 = t.altAxis, v = d2 === void 0 ? true : d2, b = t.fallbackPlacements, y = t.padding, w2 = t.boundary, A2 = t.rootBoundary, O2 = t.altBoundary, M2 = t.flipVariations, R2 = M2 === void 0 ? true : M2, S = t.allowedAutoPlacements, _ = e.options.placement, P = ut(_), I2 = P === _, L = b || (I2 || !R2 ? [pi(_)] : xh(_)), E = [_].concat(L).reduce(function(J, xt) { + return J.concat(ut(xt) === Ca ? Qs(e, { placement: xt, boundary: w2, rootBoundary: A2, padding: y, flipVariations: R2, allowedAutoPlacements: S }) : xt); }, []), B = e.rects.reference, z2 = e.rects.popper, X = /* @__PURE__ */ new Map(), V = true, $ = E[0], U = 0; U < E.length; U++) { - var re = E[U], ie = ut(re), W = Vt(re) === Gr, ce = [Fe, it].indexOf(ie) >= 0, Pe = ce ? "width" : "height", Ue = gr(e, { placement: re, boundary: w2, rootBoundary: A2, altBoundary: O2, padding: y }), Ge = ce ? W ? Ke : Ve : W ? it : Fe; + var re = E[U], ie = ut(re), W = Vt(re) === Gr, ce = [Fe, it].indexOf(ie) >= 0, Pe = ce ? "width" : "height", Ue = gr(e, { placement: re, boundary: w2, rootBoundary: A2, altBoundary: O2, padding: y }), Ge = ce ? W ? Je : Ve : W ? it : Fe; B[Pe] > z2[Pe] && (Ge = pi(Ge)); var fe = pi(Ge), Ze = []; - if (c2 && Ze.push(Ue[ie] <= 0), v && Ze.push(Ue[Ge] <= 0, Ue[fe] <= 0), Ze.every(function(K) { - return K; + if (c2 && Ze.push(Ue[ie] <= 0), v && Ze.push(Ue[Ge] <= 0, Ue[fe] <= 0), Ze.every(function(J) { + return J; })) { $ = re, V = false; break; @@ -8261,7 +8261,7 @@ function Bc(r, e, t) { __name(Bc, "Bc"); u2(Bc, "getSideOffsets"); function $c(r) { - return [Fe, Ke, it, Ve].some(function(e) { + return [Fe, Je, it, Ve].some(function(e) { return r[e] >= 0; }); } @@ -8276,7 +8276,7 @@ u2(Eh, "hide"); var Hc = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: Eh }; function Sh(r, e, t) { var i = ut(r), l = [Ve, Fe].indexOf(i) >= 0 ? -1 : 1, c2 = typeof t == "function" ? t(Object.assign({}, e, { placement: r })) : t, d2 = c2[0], v = c2[1]; - return d2 = d2 || 0, v = (v || 0) * l, [Ve, Ke].indexOf(i) >= 0 ? { x: v, y: d2 } : { x: d2, y: v }; + return d2 = d2 || 0, v = (v || 0) * l, [Ve, Je].indexOf(i) >= 0 ? { x: v, y: d2 } : { x: d2, y: v }; } __name(Sh, "Sh"); u2(Sh, "distanceAndSkiddingToXY"); @@ -8305,11 +8305,11 @@ function Ch(r) { var e = r.state, t = r.options, i = r.name, l = t.mainAxis, c2 = l === void 0 ? true : l, d2 = t.altAxis, v = d2 === void 0 ? false : d2, b = t.boundary, y = t.rootBoundary, w2 = t.altBoundary, A2 = t.padding, O2 = t.tether, M2 = O2 === void 0 ? true : O2, R2 = t.tetherOffset, S = R2 === void 0 ? 0 : R2, _ = gr(e, { boundary: b, rootBoundary: y, padding: A2, altBoundary: w2 }), P = ut(e.placement), I2 = Vt(e.placement), L = !I2, E = zn(P), B = el(E), z2 = e.modifiersData.popperOffsets, X = e.rects.reference, V = e.rects.popper, $ = typeof S == "function" ? S(Object.assign({}, e.rects, { placement: e.placement })) : S, U = typeof $ == "number" ? { mainAxis: $, altAxis: $ } : Object.assign({ mainAxis: 0, altAxis: 0 }, $), re = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, ie = { x: 0, y: 0 }; if (!!z2) { if (c2) { - var W, ce = E === "y" ? Fe : Ve, Pe = E === "y" ? it : Ke, Ue = E === "y" ? "height" : "width", Ge = z2[E], fe = Ge + _[ce], Ze = Ge - _[Pe], et = M2 ? -V[Ue] / 2 : 0, Dt = I2 === Gr ? X[Ue] : V[Ue], Ot = I2 === Gr ? -V[Ue] : -X[Ue], Cr = e.elements.arrow, K = M2 && Cr ? Rn(Cr) : { width: 0, height: 0 }, xt = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : oo(), wt = xt[ce], _r = xt[Pe], $t = kn(0, X[Ue], K[Ue]), lr = L ? X[Ue] / 2 - et - $t - wt - U.mainAxis : Dt - $t - wt - U.mainAxis, ur = L ? -X[Ue] / 2 + et + $t + _r + U.mainAxis : Ot + $t + _r + U.mainAxis, Rt = e.elements.arrow && mr(e.elements.arrow), Hn = Rt ? E === "y" ? Rt.clientTop || 0 : Rt.clientLeft || 0 : 0, Ct = (W = re == null ? void 0 : re[E]) != null ? W : 0, ln = Ge + lr - Ct - Hn, xe = Ge + ur - Ct, Fr = kn(M2 ? Dn(fe, ln) : fe, Ge, M2 ? vr(Ze, xe) : Ze); + var W, ce = E === "y" ? Fe : Ve, Pe = E === "y" ? it : Je, Ue = E === "y" ? "height" : "width", Ge = z2[E], fe = Ge + _[ce], Ze = Ge - _[Pe], et = M2 ? -V[Ue] / 2 : 0, Dt = I2 === Gr ? X[Ue] : V[Ue], Ot = I2 === Gr ? -V[Ue] : -X[Ue], Cr = e.elements.arrow, J = M2 && Cr ? Rn(Cr) : { width: 0, height: 0 }, xt = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : oo(), wt = xt[ce], _r = xt[Pe], $t = kn(0, X[Ue], J[Ue]), lr = L ? X[Ue] / 2 - et - $t - wt - U.mainAxis : Dt - $t - wt - U.mainAxis, ur = L ? -X[Ue] / 2 + et + $t + _r + U.mainAxis : Ot + $t + _r + U.mainAxis, Rt = e.elements.arrow && mr(e.elements.arrow), Hn = Rt ? E === "y" ? Rt.clientTop || 0 : Rt.clientLeft || 0 : 0, Ct = (W = re == null ? void 0 : re[E]) != null ? W : 0, ln = Ge + lr - Ct - Hn, xe = Ge + ur - Ct, Fr = kn(M2 ? Dn(fe, ln) : fe, Ge, M2 ? vr(Ze, xe) : Ze); z2[E] = Fr, ie[E] = Fr - Ge; } if (v) { - var Ur, _t = E === "x" ? Fe : Ve, un = E === "x" ? it : Ke, cr = z2[B], pr = B === "y" ? "height" : "width", cn = cr + _[_t], ct = cr - _[un], Mr = [Fe, Ve].indexOf(P) !== -1, zt = (Ur = re == null ? void 0 : re[B]) != null ? Ur : 0, Fn = Mr ? cn : cr - X[pr] - V[pr] - zt + U.altAxis, Ar = Mr ? cr + X[pr] + V[pr] - zt - U.altAxis : ct, pn = M2 && Mr ? zc(Fn, cr, Ar) : kn(M2 ? Fn : cn, cr, M2 ? Ar : ct); + var Ur, _t = E === "x" ? Fe : Ve, un = E === "x" ? it : Je, cr = z2[B], pr = B === "y" ? "height" : "width", cn = cr + _[_t], ct = cr - _[un], Mr = [Fe, Ve].indexOf(P) !== -1, zt = (Ur = re == null ? void 0 : re[B]) != null ? Ur : 0, Fn = Mr ? cn : cr - X[pr] - V[pr] - zt + U.altAxis, Ar = Mr ? cr + X[pr] + V[pr] - zt - U.altAxis : ct, pn = M2 && Mr ? zc(Fn, cr, Ar) : kn(M2 ? Fn : cn, cr, M2 ? Ar : ct); z2[B] = pn, ie[B] = pn - cr; } e.modifiersData[i] = ie; @@ -8538,11 +8538,11 @@ function jn(r) { } __name(jn, "jn"); u2(jn, "normalizeToArray"); -function Jc(r, e) { +function Kc(r, e) { r.indexOf(e) === -1 && r.push(e); } -__name(Jc, "Jc"); -u2(Jc, "pushIfUnique"); +__name(Kc, "Kc"); +u2(Kc, "pushIfUnique"); function zh(r) { return r.filter(function(e, t) { return r.indexOf(e) === t; @@ -8560,13 +8560,13 @@ function za(r) { } __name(za, "za"); u2(za, "arrayFrom"); -function Kc(r) { +function Jc(r) { return Object.keys(r).reduce(function(e, t) { return r[t] !== void 0 && (e[t] = r[t]), e; }, {}); } -__name(Kc, "Kc"); -u2(Kc, "removeUndefinedProps"); +__name(Jc, "Jc"); +u2(Jc, "removeUndefinedProps"); function fi() { return document.createElement("div"); } @@ -8714,7 +8714,7 @@ function pp(r) { } __name(pp, "pp"); u2(pp, "getExtendedPassedProps"); -function Jh(r, e) { +function Kh(r, e) { var t = e ? Object.keys(pp(Object.assign({}, br, { plugins: e }))) : Yh, i = t.reduce(function(l, c2) { var d2 = (r.getAttribute("data-tippy-" + c2) || "").trim(); if (!d2) @@ -8731,19 +8731,19 @@ function Jh(r, e) { }, {}); return i; } -__name(Jh, "Jh"); -u2(Jh, "getDataAttributeProps"); +__name(Kh, "Kh"); +u2(Kh, "getDataAttributeProps"); function rp(r, e) { - var t = Object.assign({}, e, { content: up(e.content, [r]) }, e.ignoreAttributes ? {} : Jh(r, e.plugins)); + var t = Object.assign({}, e, { content: up(e.content, [r]) }, e.ignoreAttributes ? {} : Kh(r, e.plugins)); return t.aria = Object.assign({}, br.aria, t.aria), t.aria = { expanded: t.aria.expanded === "auto" ? e.interactive : t.aria.expanded, content: t.aria.content === "auto" ? e.interactive ? null : "describedby" : t.aria.content }, t; } __name(rp, "rp"); u2(rp, "evaluateProps"); -var Kh = u2(function() { +var Jh = u2(function() { return "innerHTML"; }, "innerHTML"); function dl(r, e) { - r[Kh()] = e; + r[Jh()] = e; } __name(dl, "dl"); u2(dl, "dangerouslySetInnerHTML"); @@ -8789,7 +8789,7 @@ var Qh = 1; var Ra = []; var pl = []; function ev(r, e) { - var t = rp(r, Object.assign({}, br, pp(Kc(e)))), i, l, c2, d2 = false, v = false, b = false, y = false, w2, A2, O2, M2 = [], R2 = Zc(ln, t.interactiveDebounce), S, _ = Qh++, P = null, I2 = zh(t.plugins), L = { isEnabled: true, isVisible: false, isDestroyed: false, isMounted: false, isShown: false }, E = { id: _, reference: r, popper: fi(), popperInstance: P, props: t, state: L, plugins: I2, clearDelayTimeouts: Fn, setProps: Ar, setContent: pn, show: bi, hide: xo, hideWithInteractivity: yi, enable: Mr, disable: zt, unmount: xi, destroy: wo }; + var t = rp(r, Object.assign({}, br, pp(Jc(e)))), i, l, c2, d2 = false, v = false, b = false, y = false, w2, A2, O2, M2 = [], R2 = Zc(ln, t.interactiveDebounce), S, _ = Qh++, P = null, I2 = zh(t.plugins), L = { isEnabled: true, isVisible: false, isDestroyed: false, isMounted: false, isShown: false }, E = { id: _, reference: r, popper: fi(), popperInstance: P, props: t, state: L, plugins: I2, clearDelayTimeouts: Fn, setProps: Ar, setContent: pn, show: bi, hide: xo, hideWithInteractivity: yi, enable: Mr, disable: zt, unmount: xi, destroy: wo }; if (!t.render) return E; var B = t.render(E), z2 = B.popper, X = B.onUpdate; @@ -8913,20 +8913,20 @@ function ev(r, e) { } __name(Cr, "Cr"); u2(Cr, "onTouchMove"); - function K() { + function J() { b = false; } - __name(K, "K"); - u2(K, "onTouchStart"); + __name(J, "J"); + u2(J, "onTouchStart"); function xt() { var q2 = ce(); - q2.addEventListener("mousedown", Ot, true), q2.addEventListener("touchend", Ot, qn), q2.addEventListener("touchstart", K, qn), q2.addEventListener("touchmove", Cr, qn); + q2.addEventListener("mousedown", Ot, true), q2.addEventListener("touchend", Ot, qn), q2.addEventListener("touchstart", J, qn), q2.addEventListener("touchmove", Cr, qn); } __name(xt, "xt"); u2(xt, "addDocumentPress"); function wt() { var q2 = ce(); - q2.removeEventListener("mousedown", Ot, true), q2.removeEventListener("touchend", Ot, qn), q2.removeEventListener("touchstart", K, qn), q2.removeEventListener("touchmove", Cr, qn); + q2.removeEventListener("mousedown", Ot, true), q2.removeEventListener("touchend", Ot, qn), q2.removeEventListener("touchstart", J, qn), q2.removeEventListener("touchmove", Cr, qn); } __name(wt, "wt"); u2(wt, "removeDocumentPress"); @@ -9108,7 +9108,7 @@ function ev(r, e) { function Ar(q2) { if (!E.state.isDestroyed) { fe("onBeforeUpdate", [E, q2]), Hn(); - var Q = E.props, oe = rp(r, Object.assign({}, Q, Kc(q2), { ignoreAttributes: true })); + var Q = E.props, oe = rp(r, Object.assign({}, Q, Jc(q2), { ignoreAttributes: true })); E.props = oe, Rt(), Q.interactiveDebounce !== oe.interactiveDebounce && (Dt(), R2 = Zc(ln, oe.interactiveDebounce)), Q.triggerTarget && !oe.triggerTarget ? jn(Q.triggerTarget).forEach(function(ye) { ye.removeAttribute("aria-expanded"); }) : oe.triggerTarget && r.removeAttribute("aria-expanded"), et(), Ge(), X && X(Q, oe), E.popperInstance && (_t(), pr().forEach(function(ye) { @@ -9137,7 +9137,7 @@ function ev(r, e) { var Ei = Pe(), Pr = Ei.box, Vr = Ei.content; ul([Pr, Vr], he), Qc([Pr, Vr], "visible"); } - Ze(), et(), Jc(pl, E), (ft = E.popperInstance) == null || ft.forceUpdate(), fe("onMount", [E]), E.props.animation && ie() && $t(he, function() { + Ze(), et(), Kc(pl, E), (ft = E.popperInstance) == null || ft.forceUpdate(), fe("onMount", [E]), E.props.animation && ie() && $t(he, function() { E.state.isShown = true, fe("onShown", [E]); }); } @@ -9159,7 +9159,7 @@ function ev(r, e) { __name(xo, "xo"); u2(xo, "hide"); function yi(q2) { - ce().addEventListener("mousemove", R2), Jc(Ra, R2), R2(q2); + ce().addEventListener("mousemove", R2), Kc(Ra, R2), R2(q2); } __name(yi, "yi"); u2(yi, "hideWithInteractivity"); @@ -9332,7 +9332,7 @@ function _e(r) { } } }); } initHelp() { - this.helpableService = Je(this.helpableMachine).onTransition((i) => { + this.helpableService = Ke(this.helpableMachine).onTransition((i) => { this.debugHelpable && console.log(`helpable: ${nt(i.value)}`); }).start(), this.helpableService.send("INIT"); } @@ -9679,11 +9679,11 @@ var mi = /* @__PURE__ */ __name(class { }, "mi"); u2(mi, "TemplateResult"); var lv = co(ja); -function J(r, ...e) { +function K(r, ...e) { return new mi(r, e, lv); } -__name(J, "J"); -u2(J, "html"); +__name(K, "K"); +u2(K, "html"); function te(r, e) { r.renderInto(e); } @@ -9713,17 +9713,17 @@ function ze(r) { this.icon = ""; } iconHtml(i) { - return J`${this.iconStyle} + return K`${this.iconStyle}
${this.iconSvg(i)}
`; } iconSvg(i) { if (this.icon === "") - return J([i]); + return K([i]); let l = document.getElementById(this.icon); return l === null ? null : l.content.cloneNode(true); } get iconStyle() { - return J``\n }\n }\n\n return IconableMixinClass as Constructor & TBase\n}\n", "import {Constructor} from './constructor'\nimport {attr} from '@github/catalyst'\n\nexport declare class Ifable {\n get if(): string\n set if(value: string)\n}\n\nexport const isIfable = (arg: unknown): arg is Ifable =>\n typeof arg === 'object' && arg !== null && typeof (arg as Ifable).if === 'string'\n\nexport function IfableMixin>(Base: TBase): Constructor & TBase {\n class IfableMixinClass extends Base {\n @attr if = ''\n }\n\n return IfableMixinClass as Constructor & TBase\n}\n", "import {html, render} from '@github/jtml'\nimport tippy, {Instance as TippyInstance, ReferenceElement as TippyReferenceElement} from 'tippy.js'\nimport {Constructor} from './constructor'\nimport {Util} from '@qni/common'\nimport {isAngleable} from './angleable'\nimport {isFlaggable} from './flaggable'\nimport {isIfable} from './ifable'\n\nexport declare class Menuable {\n initMenu(): void\n showMenu(): void\n hideMenu(): void\n}\n\nexport const isMenuable = (arg: unknown): arg is Menuable =>\n typeof arg === 'object' && arg !== null && typeof (arg as Menuable).initMenu === 'function'\n\nexport function MenuableMixin>(Base: TBase): Constructor & TBase {\n class MenuableMixinClass extends Base {\n public menu!: TippyInstance\n private ifTooltip!: TippyInstance | undefined\n private angleTooltip!: TippyInstance | undefined\n private flagTooltip!: TippyInstance | undefined\n private deleteTooltip!: TippyInstance | undefined\n\n initMenu(): void {\n const popupInstance = (this as TippyReferenceElement)._tippy\n if (popupInstance) return\n\n this.addEventListener('click', this.dispatchShowMenuEvent)\n\n this.menu = tippy(this, {\n allowHTML: true,\n animation: false,\n arrow: false,\n content: this.menuContent,\n interactive: true,\n appendTo: document.body,\n offset: [0, 16],\n placement: 'top',\n theme: 'operation-menu',\n trigger: 'manual',\n onShow: this.initMenuItems.bind(this),\n onHide: () => {\n this.ifTooltip?.hide()\n this.angleTooltip?.hide()\n this.flagTooltip?.hide()\n this.deleteTooltip?.hide()\n }\n })\n }\n\n showMenu(): void {\n this.menu.show()\n }\n\n hideMenu(): void {\n this.menu.hide()\n }\n\n private destroyMenu(): void {\n const popupInstance = (this as TippyReferenceElement)._tippy\n popupInstance?.destroy()\n }\n\n private dispatchShowMenuEvent(): void {\n this.dispatchEvent(new Event('operation-show-menu', {bubbles: true}))\n }\n\n private get menuContent(): DocumentFragment {\n const template = document.getElementById('operation-menu') as HTMLTemplateElement\n Util.notNull(template)\n\n const node = template.content.cloneNode(true)\n const content = document.createDocumentFragment()\n\n render(html`${node}`, content)\n\n return content\n }\n\n private initMenuItems(instance: TippyInstance): void {\n if (isIfable(instance.reference)) {\n const ifButton = instance.popper.querySelector('button[data-operation-menu-if]') as HTMLButtonElement\n Util.notNull(ifButton)\n ifButton.disabled = false\n\n this.ifTooltip = (ifButton as TippyReferenceElement)._tippy\n if (this.ifTooltip === undefined) {\n this.ifTooltip = tippy(ifButton, {\n animation: false,\n content: \"Set `if' Conditional\"\n })\n ifButton.addEventListener('mousedown', this.showIfInspector.bind(this))\n }\n }\n\n if (isAngleable(instance.reference)) {\n const angleButton = instance.popper.querySelector('button[data-operation-menu-angle]') as HTMLButtonElement\n Util.notNull(angleButton)\n angleButton.disabled = false\n\n this.angleTooltip = (angleButton as TippyReferenceElement)._tippy\n if (this.angleTooltip === undefined) {\n this.angleTooltip = tippy(angleButton, {\n animation: false,\n content: 'Change Angle'\n })\n angleButton.addEventListener('mousedown', this.showAngleInspector.bind(this))\n }\n }\n\n if (isFlaggable(instance.reference)) {\n const flagButton = instance.popper.querySelector('button[data-operation-menu-flag]') as HTMLButtonElement\n Util.notNull(flagButton)\n flagButton.disabled = false\n\n this.flagTooltip = (flagButton as TippyReferenceElement)._tippy\n if (this.flagTooltip === undefined) {\n this.flagTooltip = tippy(flagButton, {\n animation: false,\n content: 'Set Condifitonal Flag'\n })\n flagButton.addEventListener('mousedown', this.showFlagInspector.bind(this))\n }\n }\n\n const deleteMenuItem = instance.popper.querySelector('[data-operation-menu-delete]')\n Util.notNull(deleteMenuItem)\n\n this.deleteTooltip = (deleteMenuItem as TippyReferenceElement)._tippy\n if (this.deleteTooltip === undefined) {\n this.deleteTooltip = tippy(deleteMenuItem, {\n animation: false,\n content: 'Delete'\n })\n }\n deleteMenuItem.addEventListener('mousedown', this.destroyMenu.bind(this))\n deleteMenuItem.addEventListener('mousedown', this.dispatchOperationDeleteEvent.bind(this))\n }\n\n private showIfInspector(): void {\n this.hideMenu()\n this.dispatchEvent(new Event('operation-menu-if', {bubbles: true}))\n }\n\n private showAngleInspector(): void {\n this.hideMenu()\n this.dispatchEvent(new Event('operation-menu-angle', {bubbles: true}))\n }\n\n private showFlagInspector(): void {\n this.hideMenu()\n this.dispatchEvent(new Event('operation-menu-flag', {bubbles: true}))\n }\n\n private dispatchOperationDeleteEvent(): void {\n this.dispatchEvent(new Event('operation-delete', {bubbles: true}))\n }\n }\n\n return MenuableMixinClass as Constructor & TBase\n}\n", "import {ActivateableMixin, DraggableMixin, HelpableMixin, HoverableMixin, MenuableMixin} from './mixin/'\nimport {SerializedBlochDisplayType, Util} from '@qni/common'\nimport {attr, controller, target, targets} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport tippy, {Instance as TippyInstance, ReferenceElement as TippyReferenceElement, roundArrow} from 'tippy.js'\n\nexport class BlochDisplayElement extends MenuableMixin(\n HelpableMixin(DraggableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))\n) {\n @target body!: HTMLElement\n @target vectorLine!: HTMLElement\n @target vectorEnd!: HTMLElement\n @target vector!: HTMLElement\n @targets vectorEndCircles!: HTMLElement[]\n\n @attr x = 0\n @attr y = 0\n @attr z = 0\n\n get operationType(): typeof SerializedBlochDisplayType {\n return SerializedBlochDisplayType\n }\n\n showPopup(): void {\n this.showInspector()\n }\n\n private showInspector(): void {\n Util.notNull(this.parentElement)\n\n if (this.parentElement.tagName === 'PALETTE-DROPZONE') return\n\n const popupInstance = (this as TippyReferenceElement)._tippy\n if (popupInstance) popupInstance.destroy()\n\n const content = this.blochInspectorPopupContent()\n const popup = tippy(this as Element, {\n allowHTML: true,\n animation: false,\n arrow: roundArrow + roundArrow,\n delay: 0,\n placement: 'auto',\n theme: 'qni',\n onShow(instance: TippyInstance) {\n instance.setContent(content)\n }\n })\n popup.show()\n }\n\n private blochInspectorPopupContent() {\n const content = document.createDocumentFragment()\n\n render(\n html`\n
\n
\n

Local State

\n
\n\n
\n r:\n ${this.forceSigned(this.d)}, \u03D5:\n ${this.forceSigned(this.phi, 2)}, \u03B8:\n ${this.forceSigned(this.theta, 2)}\n
\n
\n x:\n ${this.forceSigned(this.x)}, y:\n ${this.forceSigned(this.y)}, z:\n ${this.forceSigned(this.z)}\n
\n
\n `,\n content\n )\n\n return content\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n this.updateBlochVector()\n this.addEventListener('mouseenter', this.showInspector)\n }\n\n disconnectedCallback(): void {\n const instance = (this as TippyReferenceElement)._tippy\n instance?.destroy()\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (!this.body) return\n if (oldValue === newValue) return\n\n if (newValue === null) return\n if (name === 'data-x') this.x = parseFloat(newValue)\n if (name === 'data-y') this.y = parseFloat(newValue)\n if (name === 'data-z') this.z = parseFloat(newValue)\n this.d = this.vectorLength()\n this.phi = this.phiRadian()\n this.theta = this.thetaRadian()\n\n this.updateBlochVector()\n }\n\n update(): void {\n this.d = this.vectorLength()\n this.phi = this.phiRadian()\n this.theta = this.thetaRadian()\n\n const vectorLineRect = (degree: number) => {\n return html`
`\n }\n\n const vectorEndCircle = (degree: number, axis: 'X' | 'Y') => {\n return html``\n }\n\n render(\n html`\n\n
\n
\n
\n \n \n \n \n \n \n \n
\n
\n
\n ${vectorLineRect(0)} ${vectorLineRect(20)} ${vectorLineRect(40)} ${vectorLineRect(60)}\n ${vectorLineRect(80)} ${vectorLineRect(100)} ${vectorLineRect(120)} ${vectorLineRect(140)}\n ${vectorLineRect(160)}\n
\n\n
\n ${vectorEndCircle(0, 'Y')} ${vectorEndCircle(20, 'Y')} ${vectorEndCircle(40, 'Y')}\n ${vectorEndCircle(60, 'Y')} ${vectorEndCircle(80, 'Y')} ${vectorEndCircle(100, 'Y')}\n ${vectorEndCircle(120, 'Y')} ${vectorEndCircle(140, 'Y')} ${vectorEndCircle(160, 'Y')}\n ${vectorEndCircle(90, 'X')}\n
\n
\n
\n
\n
`,\n this.shadowRoot!\n )\n }\n\n toJson(): string {\n return `\"${SerializedBlochDisplayType}\"`\n }\n\n private updateBlochVector(): void {\n const vectorEndCircleWidth = this.vectorEndCircles[0].offsetWidth\n\n this.vectorLine.style.height = `calc(${(100 * this.d) / 2}% - ${vectorEndCircleWidth / 2}px)`\n this.vectorEnd.style.bottom = `calc(50% + ${(100 * this.d) / 2}% + ${vectorEndCircleWidth / 2}px)`\n\n if (this.d !== 0) {\n this.vector.style.transform = `rotateY(${this.phi}deg) rotateX(${-this.theta}deg)`\n }\n\n const popupInstance = (this as TippyReferenceElement)._tippy\n popupInstance?.setContent(this.blochInspectorPopupContent())\n }\n\n private get d(): number {\n const dataD = this.getAttribute('data-d')\n Util.notNull(dataD)\n\n return parseFloat(dataD)\n }\n\n private set d(value: number) {\n this.setAttribute('data-d', value.toString())\n }\n\n private vectorLength(): number {\n return parseFloat(Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z).toFixed(4))\n }\n\n private set phi(value: number) {\n this.setAttribute('data-phi', value.toString())\n }\n\n private get phi(): number {\n const dataPhi = this.getAttribute('data-phi')\n Util.notNull(dataPhi)\n\n return parseFloat(dataPhi)\n }\n\n private phiRadian(): number {\n return (Math.atan2(this.y, this.x) * 180) / Math.PI\n }\n\n private set theta(value: number) {\n this.setAttribute('data-theta', value.toString())\n }\n\n private get theta(): number {\n const dataTheta = this.getAttribute('data-theta')\n Util.notNull(dataTheta)\n\n return parseFloat(dataTheta)\n }\n\n private thetaRadian(): number {\n const \u03B8 = Math.max(0, Math.PI / 2 - Math.atan2(this.z, Math.sqrt(this.y * this.y + this.x * this.x)))\n return (180 * \u03B8) / Math.PI\n }\n\n private forceSigned(value: number, digits = 4): string {\n return (value >= 0 ? '+' : '') + value.toFixed(digits)\n }\n}\n\ncontroller(BlochDisplayElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {SerializedControlGateType} from '@qni/common'\nimport controlGateIcon from '../icon/control-gate.svg'\nimport {controller} from '@github/catalyst'\n\nexport class ControlGateElement extends MenuableMixin(\n HelpableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n) {\n get operationType(): typeof SerializedControlGateType {\n return SerializedControlGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(controlGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n return `\"${SerializedControlGateType}\"`\n }\n}\n\ncontroller(ControlGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedHGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport hGateIcon from '../icon/h-gate.svg'\n\nexport type HGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class HGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedHGateType {\n return SerializedHGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(hGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedHGateType}<${this.if}\"`\n } else {\n return `\"${SerializedHGateType}\"`\n }\n }\n}\n\ncontroller(HGateElement)\n", "import {ActivateableMixin, DraggableMixin, HelpableMixin, HoverableMixin, IconableMixin, MenuableMixin} from './mixin/'\nimport {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {FlaggableMixin} from './mixin/flaggable'\nimport {SerializedMeasurementGateType} from '@qni/common'\nimport measurementGateIcon from '../icon/measurement-gate.svg'\n\nexport class MeasurementGateElement extends MenuableMixin(\n HelpableMixin(FlaggableMixin(DraggableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n) {\n @attr value = ''\n\n get operationType(): typeof SerializedMeasurementGateType {\n return SerializedMeasurementGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(\n html`
\n ${this.iconHtml(measurementGateIcon)}\n
\n
`,\n this.shadowRoot!\n )\n }\n\n toJson(): string {\n if (this.flag === '') {\n return `\"${SerializedMeasurementGateType}\"`\n } else {\n return `\"${SerializedMeasurementGateType}>${this.flag}\"`\n }\n }\n}\n\ncontroller(MeasurementGateElement)\n", "import {\n ActivateableMixin,\n AngleableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedPhaseGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport phaseGateIcon from '../icon/phase-gate.svg'\n\nexport type PhaseGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class PhaseGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(\n AngleableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n )\n) {\n get operationType(): typeof SerializedPhaseGateType {\n return SerializedPhaseGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(phaseGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.angle === '') {\n return `\"${SerializedPhaseGateType}\"`\n } else {\n return `\"${SerializedPhaseGateType}(${this.angle.replace('/', '_')})\"`\n }\n }\n}\n\ncontroller(PhaseGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedRnotGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport rnotGateIcon from '../icon/rnot-gate.svg'\n\nexport type RnotGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class RnotGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedRnotGateType {\n return SerializedRnotGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(rnotGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedRnotGateType}<${this.if}\"`\n } else {\n return `\"${SerializedRnotGateType}\"`\n }\n }\n}\n\ncontroller(RnotGateElement)\n", "import {\n ActivateableMixin,\n AngleableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedRxGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport rxGateIcon from '../icon/rx-gate.svg'\n\nexport type RxGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class RxGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(\n AngleableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n )\n) {\n get operationType(): typeof SerializedRxGateType {\n return SerializedRxGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(rxGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.angle === '') {\n return `\"${SerializedRxGateType}\"`\n } else {\n return `\"${SerializedRxGateType}(${this.angle.replace('/', '_')})\"`\n }\n }\n}\n\ncontroller(RxGateElement)\n", "import {\n ActivateableMixin,\n AngleableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedRyGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport ryGateIcon from '../icon/ry-gate.svg'\n\nexport type RyGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class RyGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(\n AngleableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n )\n) {\n get operationType(): typeof SerializedRyGateType {\n return SerializedRyGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(ryGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.angle === '') {\n return `\"${SerializedRyGateType}\"`\n } else {\n return `\"${SerializedRyGateType}(${this.angle.replace('/', '_')})\"`\n }\n }\n}\n\ncontroller(RyGateElement)\n", "import {\n ActivateableMixin,\n AngleableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedRzGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport rzGateIcon from '../icon/rz-gate.svg'\n\nexport type RzGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class RzGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(\n AngleableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n )\n) {\n get operationType(): typeof SerializedRzGateType {\n return SerializedRzGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(rzGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.angle === '') {\n return `\"${SerializedRzGateType}\"`\n } else {\n return `\"${SerializedRzGateType}(${this.angle.replace('/', '_')})\"`\n }\n }\n}\n\ncontroller(RzGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedSwapGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport swapGateIcon from '../icon/swap-gate.svg'\n\nexport class SwapGateElement extends MenuableMixin(\n HelpableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n) {\n get operationType(): typeof SerializedSwapGateType {\n return SerializedSwapGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(swapGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n return `\"${SerializedSwapGateType}\"`\n }\n}\n\ncontroller(SwapGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedTGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport tGateIcon from '../icon/t-gate.svg'\n\nexport type TGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class TGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedTGateType {\n return SerializedTGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(tGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedTGateType}<${this.if}\"`\n } else {\n return `\"${SerializedTGateType}\"`\n }\n }\n}\n\ncontroller(TGateElement)\n", "import {ActivateableMixin, DraggableMixin, HelpableMixin, HoverableMixin, IconableMixin, MenuableMixin} from './mixin/'\nimport {SerializedWrite0GateType, SerializedWrite1GateType} from '@qni/common'\nimport {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport writeGateIcon from '../icon/write-gate.svg'\n\nexport class WriteGateElement extends MenuableMixin(\n HelpableMixin(DraggableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement)))))\n) {\n @attr value = ''\n\n get operationType(): typeof SerializedWrite0GateType | typeof SerializedWrite1GateType {\n switch (this.value) {\n case '0':\n return SerializedWrite0GateType\n case '1':\n return SerializedWrite1GateType\n default:\n throw new Error(`Invalid write value: ${this.value}`)\n }\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(\n html`
\n ${this.iconHtml(writeGateIcon)}\n
\n
`,\n this.shadowRoot!\n )\n }\n\n toJson(): string {\n return `\"|${this.value}>\"`\n }\n}\n\ncontroller(WriteGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedXGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport xGateIcon from '../icon/x-gate.svg'\n\nexport type XGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class XGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedXGateType {\n return SerializedXGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(xGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedXGateType}<${this.if}\"`\n } else {\n return `\"${SerializedXGateType}\"`\n }\n }\n}\n\ncontroller(XGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedYGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport yGateIcon from '../icon/y-gate.svg'\n\nexport type YGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class YGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedYGateType {\n return SerializedYGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(yGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedYGateType}<${this.if}\"`\n } else {\n return `\"${SerializedYGateType}\"`\n }\n }\n}\n\ncontroller(YGateElement)\n", "import {\n ActivateableMixin,\n DisableableMixin,\n DraggableMixin,\n HelpableMixin,\n HoverableMixin,\n IconableMixin,\n IfableMixin,\n MenuableMixin\n} from './mixin/'\nimport {html, render} from '@github/jtml'\nimport {ControllableMixin} from './mixin/controllable'\nimport {SerializedZGateType} from '@qni/common'\nimport {controller} from '@github/catalyst'\nimport zGateIcon from '../icon/z-gate.svg'\n\nexport type ZGateElementProps = {\n targets: number[]\n disabled?: boolean\n}\n\nexport class ZGateElement extends MenuableMixin(\n HelpableMixin(\n IfableMixin(\n ControllableMixin(DraggableMixin(DisableableMixin(IconableMixin(ActivateableMixin(HoverableMixin(HTMLElement))))))\n )\n )\n) {\n get operationType(): typeof SerializedZGateType {\n return SerializedZGateType\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(html`
${this.iconHtml(zGateIcon)}
`, this.shadowRoot!)\n }\n\n toJson(): string {\n if (this.if !== '') {\n return `\"${SerializedZGateType}<${this.if}\"`\n } else {\n return `\"${SerializedZGateType}\"`\n }\n }\n}\n\ncontroller(ZGateElement)\n", "import {BlochDisplayElement} from './bloch-display-element'\nimport {ControlGateElement} from './control-gate-element'\nimport {HGateElement} from './h-gate-element'\nimport {MeasurementGateElement} from './measurement-gate-element'\nimport {PhaseGateElement} from './phase-gate-element'\nimport {RnotGateElement} from './rnot-gate-element'\nimport {RxGateElement} from './rx-gate-element'\nimport {RyGateElement} from './ry-gate-element'\nimport {RzGateElement} from './rz-gate-element'\nimport {SwapGateElement} from './swap-gate-element'\nimport {TGateElement} from './t-gate-element'\nimport {WriteGateElement} from './write-gate-element'\nimport {XGateElement} from './x-gate-element'\nimport {YGateElement} from './y-gate-element'\nimport {ZGateElement} from './z-gate-element'\n\nexport type Operation =\n | HGateElement\n | XGateElement\n | YGateElement\n | ZGateElement\n | PhaseGateElement\n | TGateElement\n | RnotGateElement\n | RxGateElement\n | RyGateElement\n | RzGateElement\n | SwapGateElement\n | ControlGateElement\n | BlochDisplayElement\n | WriteGateElement\n | MeasurementGateElement\n\nexport const isOperation = (arg: unknown): arg is Operation =>\n arg instanceof HGateElement ||\n arg instanceof XGateElement ||\n arg instanceof YGateElement ||\n arg instanceof ZGateElement ||\n arg instanceof PhaseGateElement ||\n arg instanceof TGateElement ||\n arg instanceof RnotGateElement ||\n arg instanceof RxGateElement ||\n arg instanceof RyGateElement ||\n arg instanceof RzGateElement ||\n arg instanceof SwapGateElement ||\n arg instanceof ControlGateElement ||\n arg instanceof BlochDisplayElement ||\n arg instanceof WriteGateElement ||\n arg instanceof MeasurementGateElement\n\nexport const isHGateElement = (arg: unknown): arg is HGateElement =>\n arg !== undefined && arg !== null && arg instanceof HGateElement\n\nexport const isXGateElement = (arg: unknown): arg is XGateElement =>\n arg !== undefined && arg !== null && arg instanceof XGateElement\n\nexport const isYGateElement = (arg: unknown): arg is YGateElement =>\n arg !== undefined && arg !== null && arg instanceof YGateElement\n\nexport const isZGateElement = (arg: unknown): arg is ZGateElement =>\n arg !== undefined && arg !== null && arg instanceof ZGateElement\n\nexport const isPhaseGateElement = (arg: unknown): arg is PhaseGateElement =>\n arg !== undefined && arg !== null && arg instanceof PhaseGateElement\n\nexport const isTGateElement = (arg: unknown): arg is TGateElement =>\n arg !== undefined && arg !== null && arg instanceof TGateElement\n\nexport const isRnotGateElement = (arg: unknown): arg is RnotGateElement =>\n arg !== undefined && arg !== null && arg instanceof RnotGateElement\n\nexport const isRxGateElement = (arg: unknown): arg is RxGateElement =>\n arg !== undefined && arg !== null && arg instanceof RxGateElement\n\nexport const isRyGateElement = (arg: unknown): arg is RyGateElement =>\n arg !== undefined && arg !== null && arg instanceof RyGateElement\n\nexport const isRzGateElement = (arg: unknown): arg is RzGateElement =>\n arg !== undefined && arg !== null && arg instanceof RzGateElement\n\nexport const isSwapGateElement = (arg: unknown): arg is SwapGateElement =>\n arg !== undefined && arg !== null && arg instanceof SwapGateElement\n\nexport const isControlGateElement = (arg: unknown): arg is ControlGateElement =>\n arg !== undefined && arg !== null && arg instanceof ControlGateElement\n\nexport const isBlochDisplayElement = (arg: unknown): arg is BlochDisplayElement =>\n arg !== undefined && arg !== null && arg instanceof BlochDisplayElement\n\nexport const isWriteGateElement = (arg: unknown): arg is WriteGateElement =>\n arg !== undefined && arg !== null && arg instanceof WriteGateElement\n\nexport const isMeasurementGateElement = (arg: unknown): arg is MeasurementGateElement =>\n arg !== undefined && arg !== null && arg instanceof MeasurementGateElement\n", "export function isNumeric(value: string) {\n return /^-?\\d+$/.test(value)\n}\n", "import {Angleable, Ifable} from './mixin'\nimport {Operation, isOperation} from './operation'\nimport {html, render} from '@github/jtml'\nimport tippy, {Instance as TippyInstance} from 'tippy.js'\nimport {Flaggable} from './mixin/flaggable'\nimport {OperationInspectorElement} from './operation-inspector-element'\nimport {Util} from '@qni/common'\nimport {controller} from '@github/catalyst'\n\nexport class InspectorButtonElement extends HTMLElement {\n public popup!: TippyInstance\n\n get isInspectorShown(): boolean {\n return this.popup.state.isVisible\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n this.initPopup()\n this.addEventListener('mousedown', this.showPopup)\n document.addEventListener('click', this.maybeHidePopup.bind(this))\n }\n\n update(): void {\n render(html``, this.shadowRoot!)\n }\n\n showInspector(operation: Operation): void {\n this.showPopup()\n this.inspector.operation = operation\n }\n\n showIfInspector(operation: Ifable): void {\n this.showPopup()\n this.inspector.operation = operation\n window.setTimeout(() => {\n this.inspector.ifInput.focus()\n }, 0)\n }\n\n showAngleInspector(operation: Angleable): void {\n this.showPopup()\n this.inspector.operation = operation\n window.setTimeout(() => {\n this.inspector.angleInput.focus()\n }, 0)\n }\n\n showFlagInspector(operation: Flaggable): void {\n this.showPopup()\n this.inspector.operation = operation\n window.setTimeout(() => {\n this.inspector.flagInput.focus()\n }, 0)\n }\n\n get inspector(): OperationInspectorElement {\n const el = this.popup.popper.querySelector('operation-inspector')\n Util.notNull(el)\n\n return el as OperationInspectorElement\n }\n\n private initPopup() {\n this.popup = tippy(this, {\n allowHTML: true,\n animation: false,\n arrow: false,\n content: this.popupContent,\n interactive: true,\n offset: [0, 4],\n placement: 'bottom',\n theme: 'operation-inspector',\n trigger: 'manual',\n hideOnClick: false\n })\n }\n\n private showPopup(): void {\n this.popup.show()\n this.inspector.disableAllPanes()\n }\n\n private maybeHidePopup(event: Event): void {\n const clickedEl = event.target as HTMLElement\n\n if (\n !this.popup.popper.contains(clickedEl) &&\n !this.popup.reference.contains(clickedEl) &&\n !isOperation(clickedEl)\n ) {\n this.popup.hide()\n }\n }\n\n private get popupContent(): DocumentFragment {\n const template = document.querySelector('#operation-inspector-template') as HTMLTemplateElement\n Util.notNull(template)\n\n const node = template.content.cloneNode(true)\n const content = document.createDocumentFragment()\n\n render(html`${node}`, content)\n\n return content\n }\n}\n\ncontroller(InspectorButtonElement)\n", "import {DetailedError, Util, angleDenominator, describe, radian as radianOf} from '@qni/common'\nimport {Interpreter, createMachine, interpret} from 'xstate'\nimport {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {InteractEvent} from '@interactjs/types'\nimport interact from 'interactjs'\n\nexport const isAngleSliderElement = (arg: unknown): arg is AngleSliderElement =>\n arg !== null && arg instanceof AngleSliderElement\n\ntype AngleSliderContext = Record\ntype AngleSliderEvent = {type: 'SET_ANGLE'} | {type: 'SET_DENOMINATOR'} | {type: 'START_MOVE'} | {type: 'END_MOVE'}\n\nexport class AngleSliderElement extends HTMLElement {\n @attr angle = ''\n @attr radian = 0\n @attr denominator = 0\n @attr disabled = false\n @attr debug = false\n\n private snapAngles: {[radian: number]: string} = {}\n private angleSliderMachine = createMachine(\n {\n id: 'angle-slider',\n initial: 'idle',\n states: {\n idle: {\n on: {\n START_MOVE: {\n target: 'moving'\n },\n SET_ANGLE: {\n target: 'idle',\n actions: [\n 'setDenominatorByAngle',\n 'updateSnapAngles',\n 'setRadianInAngle',\n 'updateHandlePosition',\n 'dispatchUpdateEvent'\n ]\n },\n SET_DENOMINATOR: {\n target: 'idle',\n actions: ['validateDenominator', 'updateSnapAngles', 'setAngleInRadian']\n }\n }\n },\n moving: {\n on: {\n SET_ANGLE: {\n target: 'moving',\n actions: ['dispatchChangeEvent']\n },\n END_MOVE: {\n target: 'idle',\n actions: ['dispatchUpdateEvent']\n }\n }\n }\n }\n },\n {\n actions: {\n validateDenominator: () => {\n if (!Number.isInteger(this.denominator) || this.denominator <= 0) {\n throw new DetailedError('Bad denominator', this.denominator)\n }\n },\n setDenominatorByAngle: (_context, event) => {\n if (event.type !== 'SET_ANGLE') return\n\n this.denominator = angleDenominator(this.angle)\n },\n setAngleInRadian: (_context, event) => {\n if (event.type !== 'SET_DENOMINATOR') return\n\n const [, angle] = this.findSnapAngle(this.radian)\n this.angle = angle\n },\n setRadianInAngle: (_context, event) => {\n if (event.type !== 'SET_ANGLE') return\n\n const [radian] = this.findSnapAngle(radianOf(this.angle))\n this.radian = radian\n },\n updateSnapAngles: () => {\n this.updateSnapAngles()\n },\n updateHandlePosition: () => {\n this.left = (this.radian + 2 * Math.PI) / (4 * Math.PI)\n },\n dispatchChangeEvent: () => {\n this.dispatchEvent(new Event('angle-slider-change', {bubbles: true}))\n },\n dispatchUpdateEvent: () => {\n this.dispatchEvent(new Event('angle-slider-update', {bubbles: true}))\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private angleSliderService!: Interpreter\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return\n if (newValue === null) return\n\n if (name === 'data-angle' && newValue !== '') {\n this.angleSliderService.send({type: 'SET_ANGLE'})\n }\n if (name === 'data-denominator' && this.angleSliderService !== undefined) {\n this.angleSliderService.send({type: 'SET_DENOMINATOR'})\n }\n }\n\n connectedCallback(): void {\n this.angleSliderService = interpret(this.angleSliderMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`circuit-step: ${describe(state.value)}`)\n }\n })\n .start()\n\n if (this.shadowRoot === null) {\n this.attachShadow({mode: 'open'})\n }\n this.update()\n this.updateSnapAngles()\n this.initInteraction()\n }\n\n disconnectedCallback(): void {\n interact(this).unset()\n }\n\n update(): void {\n render(\n html``,\n this.shadowRoot!\n )\n }\n\n private initInteraction(): void {\n interact(this).draggable({\n origin: 'self',\n modifiers: [\n interact.modifiers.restrict({\n restriction: 'self'\n })\n ],\n listeners: {\n start: this.startMove.bind(this),\n move: this.move.bind(this),\n end: this.endMove.bind(this)\n }\n })\n }\n\n private startMove(): void {\n this.angleSliderService.send({type: 'START_MOVE'})\n }\n\n private move(event: InteractEvent) {\n const sliderWidth = interact.getElementRect(event.target).width\n const proportion = event.pageX / sliderWidth\n\n this.left = proportion\n\n const radian = this.proportionToRadian(proportion)\n this.setAttribute('data-radian', radian.toString())\n\n const [, angle] = this.findSnapAngle(radian)\n\n if (this.angle !== angle) this.angle = angle\n }\n\n private endMove(): void {\n this.angleSliderService.send({type: 'END_MOVE'})\n }\n\n private updateSnapAngles(): void {\n if (this.denominator === 0) return\n\n const start = -2 * this.denominator\n const end = 2 * this.denominator\n const numerators = new Array(end - start + 1).fill(null).map((_, i) => i + start)\n\n this.snapAngles = {}\n for (const each of numerators) {\n if (this.denominator === 1) {\n if (each === 0) {\n this.snapAngles[0] = '0'\n } else if (each === 1) {\n this.snapAngles[Math.PI] = '\u03C0'\n } else if (each === -1) {\n this.snapAngles[-1 * Math.PI] = '-\u03C0'\n } else {\n this.snapAngles[each * Math.PI] = `${each}\u03C0`\n }\n } else {\n if (each === 0) {\n this.snapAngles[0] = '0'\n } else if (each === 1) {\n this.snapAngles[Math.PI / this.denominator] = `\u03C0/${this.denominator}`\n } else if (each === -1) {\n this.snapAngles[(-1 * Math.PI) / this.denominator] = `-\u03C0/${this.denominator}`\n } else {\n this.snapAngles[(each * Math.PI) / this.denominator] = `${each}\u03C0/${this.denominator}`\n }\n }\n }\n }\n\n private findSnapAngle(rad: number): [number, string] {\n let minDelta = null\n let snapRadian = null\n let snapAngle = null\n\n for (const each in this.snapAngles) {\n const delta = Math.abs(parseFloat(each) - rad)\n if (minDelta === null || delta < minDelta) {\n minDelta = delta\n snapRadian = parseFloat(each)\n snapAngle = this.snapAngles[each]\n }\n }\n Util.notNull(snapRadian)\n Util.notNull(snapAngle)\n\n return [snapRadian, snapAngle]\n }\n\n private proportionToRadian(proportion: number) {\n return (proportion - 0.5) * Math.PI * 4\n }\n\n private set left(proportion: number) {\n this.style.paddingLeft = `${proportion * 100}%`\n }\n}\n\ncontroller(AngleSliderElement)\n", "import {AngleSliderElement, isAngleSliderElement} from './angle-slider-element'\nimport {Angleable, Ifable, isAngleable, isIfable} from './mixin'\nimport {Flaggable, isFlaggable} from './mixin/flaggable'\nimport {Operation, isPhaseGateElement, isRxGateElement, isRyGateElement, isRzGateElement} from './operation'\nimport {Util, angleDenominator, isAngleGreaterThan, isAngleLessThan, isValidAngle, reduceAngle} from '@qni/common'\nimport {attr, controller, target} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {isNumeric} from './util'\n\nexport class OperationInspectorElement extends HTMLElement {\n @target ifInput!: HTMLInputElement\n @target angleInputLabel!: HTMLLabelElement\n @target angleInput!: HTMLInputElement\n @target angleSlider!: AngleSliderElement\n @target denominatorInput!: HTMLInputElement\n @target denominatorVariableLabel!: HTMLSpanElement\n @target denominatorLabel!: HTMLSpanElement\n @target reduceAngleFractionCheckbox!: HTMLInputElement\n @target flagInput!: HTMLInputElement\n\n @attr conditionalGatePaneDisabled = true\n @attr anglePaneDisabled = true\n @attr conditionalFlagPaneDisabled = true\n\n get if(): string {\n return this.ifInput.value\n }\n\n get angle(): string {\n return this.angleInput.value\n }\n\n get reducedAngle(): string {\n return reduceAngle(this.angleInput.value)\n }\n\n get reduceAngleFraction(): boolean {\n return this.reduceAngleFractionCheckbox.checked\n }\n\n get flag(): string {\n return this.flagInput.value\n }\n\n set operation(operation: Ifable | Angleable | Flaggable | Operation) {\n this.clear()\n this.disableAllPanes()\n\n if (isIfable(operation)) {\n this.conditionalGatePaneDisabled = false\n this.ifInput.value = operation.if\n }\n\n if (isAngleable(operation)) {\n const denominator = angleDenominator(operation.angle)\n\n if (isPhaseGateElement(operation)) {\n this.angleInputLabel.textContent = '\uD835\uDF11'\n this.denominatorVariableLabel.textContent = '\uD835\uDF11'\n } else if (isRxGateElement(operation) || isRyGateElement(operation) || isRzGateElement(operation)) {\n this.angleInputLabel.textContent = '\uD835\uDEF3'\n this.denominatorVariableLabel.textContent = '\uD835\uDEF3'\n }\n\n this.anglePaneDisabled = false\n this.angleInput.value = operation.angle\n this.backupCurrentPhi()\n this.angleSlider.angle = operation.angle\n this.denominatorInput.value = denominator.toString()\n this.denominatorLabel.textContent = denominator.toString()\n this.backupCurrentDenominator()\n this.reduceAngleFractionCheckbox.checked = operation.reducedAngle !== ''\n }\n\n if (isFlaggable(operation)) {\n this.conditionalFlagPaneDisabled = false\n this.flagInput.value = operation.flag\n }\n }\n\n private clear(): void {\n this.ifInput.value = ''\n this.angleInput.value = ''\n this.angleSlider.angle = ''\n this.denominatorInput.value = ''\n this.reduceAngleFractionCheckbox.checked = false\n this.flagInput.value = ''\n }\n\n disableAllPanes(): void {\n this.conditionalGatePaneDisabled = true\n this.anglePaneDisabled = true\n this.conditionalFlagPaneDisabled = true\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n\n this.addEventListener('angle-slider-change', this.changeAngle)\n this.addEventListener('angle-slider-update', this.updateAngle)\n this.ifInput.addEventListener('change', this.changeIf.bind(this))\n this.angleInput.addEventListener('change', this.updateAngleInput.bind(this))\n this.denominatorInput.addEventListener('change', this.changeDenominator.bind(this))\n this.reduceAngleFractionCheckbox.addEventListener('change', this.changeReduceSetting.bind(this))\n this.flagInput.addEventListener('change', this.changeFlag.bind(this))\n }\n\n update(): void {\n render(html``, this.shadowRoot!)\n }\n\n private changeAngle(event: Event): void {\n const angleSlider = event.target\n if (!isAngleSliderElement(angleSlider)) throw new Error(`${angleSlider} isn't an angle-slider`)\n\n this.angleInput.value = angleSlider.angle\n this.dispatchEvent(new Event('operation-inspector-angle-change', {bubbles: true}))\n }\n\n private updateAngle(event: Event): void {\n const angleSlider = event.target\n if (!isAngleSliderElement(angleSlider)) throw new Error(`${angleSlider} isn't an angle-slider`)\n\n this.angleInput.value = angleSlider.angle\n this.dispatchEvent(new Event('operation-inspector-angle-update', {bubbles: true}))\n }\n\n private backupCurrentPhi(): void {\n this.angleInput.setAttribute('data-original-value', this.angleInput.value)\n }\n\n private restoreOriginalPhi(): void {\n const value = this.angleInput.getAttribute('data-original-value')\n Util.notNull(value)\n\n this.angleInput.value = value\n }\n\n private changeIf(): void {\n this.dispatchEvent(new Event('operation-inspector-if-change', {bubbles: true}))\n }\n\n private updateAngleInput(): void {\n const angle = this.angleInput.value\n\n if (isValidAngle(angle)) {\n let newAngle: string\n const denominator = angleDenominator(angle)\n this.denominatorInput.value = denominator.toString()\n this.denominatorLabel.textContent = denominator.toString()\n this.backupCurrentDenominator()\n\n if (isAngleLessThan(angle, '-2\u03C0')) {\n const numerator = denominator * 2\n newAngle = `-${numerator}\u03C0/${denominator}`\n this.angleInput.value = newAngle\n } else if (isAngleGreaterThan(angle, '2\u03C0')) {\n const numerator = denominator * 2\n newAngle = `${numerator}\u03C0/${denominator}`\n this.angleInput.value = newAngle\n } else {\n newAngle = angle\n }\n this.backupCurrentPhi()\n this.angleSlider.angle = newAngle\n this.dispatchEvent(new Event('operation-inspector-angle-update', {bubbles: true}))\n } else {\n this.restoreOriginalPhi()\n }\n }\n\n private changeFlag(): void {\n this.dispatchEvent(new Event('operation-inspector-flag-change', {bubbles: true}))\n }\n\n private backupCurrentDenominator(): void {\n this.denominatorInput.setAttribute('data-original-value', this.denominatorInput.value)\n }\n\n private restoreOriginalDenominator(): void {\n const value = this.denominatorInput.getAttribute('data-original-value')\n Util.notNull(value)\n\n this.denominatorInput.value = value\n this.denominatorLabel.textContent = value\n }\n\n private changeDenominator(): void {\n const denominator = this.denominatorInput.value\n\n if (isNumeric(denominator) && parseInt(denominator) > 1) {\n this.denominatorLabel.textContent = denominator\n this.angleSlider.denominator = parseInt(denominator)\n this.angleInput.value = this.angleSlider.angle\n } else {\n this.restoreOriginalDenominator()\n }\n }\n\n private changeReduceSetting(): void {\n this.dispatchEvent(new Event('operation-inspector-angle-update', {bubbles: true}))\n }\n}\n\ncontroller(OperationInspectorElement)\n", "import {Complex, Util} from '@qni/common'\nimport {TemplateResult, html, render} from '@github/jtml'\nimport {attr, controller, targets} from '@github/catalyst'\nimport tippy, {Instance, ReferenceElement, createSingleton, roundArrow} from 'tippy.js'\n\nexport class CircleNotationElement extends HTMLElement {\n @attr qubitCount = 1\n @attr size = ''\n @attr magnitudes = '1.0'\n @attr phases = ''\n @attr multiQubits = false\n @attr showKets = false\n\n @targets qubitCircles!: HTMLElement[]\n @targets qubitCircleGroups!: HTMLElement[]\n @targets visibleQubitCircleGroups!: HTMLElement[]\n\n setAmplitudes(amplitudes: {[ket: number]: number | Complex}): void {\n const qubitCircles = this.qubitCircles\n\n for (const [i, each] of Object.entries(amplitudes)) {\n const qubitCircle = qubitCircles[parseInt(i)]\n Util.notNull(qubitCircle)\n\n const amplitude = Complex.from(each)\n\n qubitCircle.setAttribute('data-amplitude-real', amplitude.real.toString())\n qubitCircle.setAttribute('data-amplitude-imag', amplitude.imag.toString())\n\n const magnitude = amplitude.abs()\n this.setRoundedMagnitude(qubitCircle, magnitude)\n if (magnitude === 0) continue\n\n const phaseDeg = (amplitude.phase() / Math.PI) * 180\n this.setRoundedPhase(qubitCircle, phaseDeg)\n }\n }\n\n connectedCallback(): void {\n if (this.shadowRoot !== null) return\n this.attachShadow({mode: 'open'})\n this.update()\n this.initQubitCirclePopup(this.qubitCircles)\n\n if (this.hasAttribute('data-multi-qubits')) {\n this.startQubitCircleVisibilityObserver()\n this.dispatchLoadEvent()\n }\n }\n\n private dispatchLoadEvent(): void {\n this.dispatchEvent(\n new Event('circle-notation.load', {\n bubbles: true\n })\n )\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (this.shadowRoot === null) return\n if (oldValue === newValue) return\n\n if (name === 'data-qubit-count') {\n this.dispatchVisibilityChangedEvent()\n }\n }\n\n private startQubitCircleVisibilityObserver(): void {\n const options = {\n root: this,\n threshold: [0, 0.2]\n }\n const callback = (entries: IntersectionObserverEntry[]) => {\n for (const each of entries) {\n const group = each.target\n if (each.intersectionRatio >= 0.2) {\n group.setAttribute(\n 'data-targets',\n 'circle-notation.qubitCircleGroups circle-notation.visibleQubitCircleGroups'\n )\n this.dispatchVisibilityChangedEvent()\n } else if (each.intersectionRatio === 0) {\n group.setAttribute('data-targets', 'circle-notation.qubitCircleGroups')\n }\n }\n }\n const observer = new IntersectionObserver(callback, options)\n for (const each of this.qubitCircleGroups) {\n observer.observe(each)\n }\n }\n\n private dispatchVisibilityChangedEvent(): void {\n this.dispatchEvent(\n new CustomEvent('circle-notation-visibility-change', {\n detail: this.visibleQubitCircleKets,\n bubbles: true\n })\n )\n }\n\n private get visibleQubitCircleKets(): number[] {\n const maxKet = 2 ** this.qubitCount\n\n return this.visibleQubitCircles.map(each => parseInt(each.getAttribute('data-ket')!)).filter(each => each < maxKet)\n }\n\n get visibleQubitCircles(): HTMLElement[] {\n const groups = this.visibleQubitCircleGroups.map(\n each => Array.from(each.querySelectorAll('.qubit-circle')) as HTMLElement[]\n )\n return ([] as HTMLElement[]).concat(...groups)\n }\n\n update(): void {\n render(\n html`\n\n
${this.qubitCirclesHtml}
`,\n this.shadowRoot!\n )\n\n for (const [i, each] of (this.getAttribute('data-magnitudes') || '1.0').split(',').entries()) {\n this.setRoundedMagnitude(this.qubitCircles[i], parseFloat(each))\n }\n for (const [i, each] of (this.getAttribute('data-phases') || '').split(',').entries()) {\n const qubitCircle = this.qubitCircles[i]\n const phase = each ? parseFloat(each) : 0\n this.setRoundedPhase(qubitCircle, phase)\n const qubitCirclePhaseEl = qubitCircle!.querySelector('.qubit-circle__phase') as HTMLElement\n qubitCirclePhaseEl!.style.transform = `rotate(${-phase}deg)`\n }\n }\n\n private setRoundedMagnitude(qubitCircle: HTMLElement | null | undefined, magnitude: number): void {\n if (qubitCircle === null) return\n if (qubitCircle === undefined) return\n\n let roundedMag = Math.round(magnitude * 100)\n roundedMag = roundedMag < 10 ? (roundedMag === 0 ? 0 : 10) : Math.round(roundedMag / 10) * 10\n roundedMag = roundedMag / 100\n\n qubitCircle.setAttribute('data-magnitude', magnitude.toString())\n qubitCircle.setAttribute('data-rounded-magnitude', roundedMag.toString())\n }\n\n private setRoundedPhase(qubitCircle: HTMLElement | null | undefined, phase: number): void {\n if (qubitCircle === null) return\n if (qubitCircle === undefined) return\n\n let roundedPhase = Math.round(phase / 10) * 10\n if (roundedPhase < 0) roundedPhase = 360 + roundedPhase\n\n qubitCircle.setAttribute('data-phase', phase.toString())\n qubitCircle.setAttribute('data-rounded-phase', roundedPhase.toString())\n }\n\n private get qubitCirclesHtml(): TemplateResult {\n if (this.hasAttribute('data-multi-qubits')) return this.stateVectorHtml(10)\n\n return html`${this.qubitCircleHtml(0)} ${this.qubitCircleHtml(1)}`\n }\n\n private qubitCircleHtml(ket: number): TemplateResult {\n return html`\n
\n
\n `\n }\n\n private stateVectorHtml(maxNqubit: number): TemplateResult {\n let stateVector = html``\n\n const groups = this.qubitCircleGroup(\n [...Array(2 ** maxNqubit).keys()],\n (qc256: number[]) => {\n return this.qubitCircleGroup(qc256, (qc128: number[]) => {\n return this.qubitCircleGroup(qc128, (qc64: number[]) => {\n return this.qubitCircleGroup(qc64, (qc32: number[]) => {\n return this.qubitCircleGroup(qc32, (qc16: number[]) => {\n return this.qubitCircleGroup(qc16, (qc8: number[]) => {\n return this.qubitCircleGroup(qc8)\n })\n })\n })\n })\n })\n },\n 256\n )\n\n for (const each of groups) {\n stateVector = html`${stateVector} ${each}`\n }\n\n return stateVector\n }\n\n private qubitCircleGroup(\n kets: number[],\n block?: (kets: number[]) => TemplateResult[],\n size: number = kets.length / 2\n ): TemplateResult[] {\n const arrayChunk = (numbers: number[], chunkSize = 1): number[][] => {\n return numbers.reduce(\n (acc: number[][], _value: number, index: number) =>\n index % chunkSize ? acc : [...acc, numbers.slice(index, index + chunkSize)],\n []\n )\n }\n\n return arrayChunk(kets, size).map(each => {\n let group = html``\n\n if (block) {\n for (const subGroup of block(each)) {\n group = html`${group} ${subGroup}`\n }\n } else {\n for (const ket of each) {\n group = html`${group} ${this.qubitCircleHtml(ket)}`\n }\n }\n\n if (size === 64) {\n return html`
\n ${group}\n
`\n } else {\n return html`
${group}
`\n }\n })\n }\n\n private initQubitCirclePopup(qubitCircles: HTMLElement[]): void {\n const tippyInstances = tippy(qubitCircles)\n\n createSingleton(tippyInstances, {\n allowHTML: true,\n animation: false,\n arrow: roundArrow + roundArrow,\n delay: 0,\n theme: 'qni'\n })\n }\n\n setPopupContent(event: MouseEvent): void {\n if (this.popupEl === null) return\n\n const qubitCircleEl = event.target as HTMLElement\n const ket = this.ketDecimal(qubitCircleEl)\n const dataAmpReal = qubitCircleEl.getAttribute('data-amplitude-real')\n const dataAmpImag = qubitCircleEl.getAttribute('data-amplitude-imag')\n const dataMagnitude = qubitCircleEl.getAttribute('data-magnitude')\n const dataPhase = qubitCircleEl.getAttribute('data-phase')\n\n let amplitude: Complex\n\n if (dataAmpReal === null || dataAmpImag === null) {\n amplitude = Complex.ZERO\n } else {\n amplitude = new Complex(parseFloat(dataAmpReal), parseFloat(dataAmpImag))\n }\n\n let phase\n\n if (dataMagnitude && parseFloat(dataMagnitude) === 0) {\n phase = 0\n } else {\n phase = dataPhase ? parseFloat(dataPhase) : 0\n }\n\n this.setQubitCirclePopupContent(\n this.popupEl!.content,\n qubitCircleEl,\n ket,\n amplitude,\n dataMagnitude ? parseFloat(dataMagnitude) : 0,\n phase,\n this.qubitCount\n )\n }\n\n private setQubitCirclePopupContent(\n popupFrag: DocumentFragment,\n qubitCircleEl: HTMLElement,\n ket: number,\n amplitude: Complex,\n magnitude: number,\n phase: number,\n nqubit: number\n ): void {\n const popup = (qubitCircleEl as ReferenceElement)._tippy as Instance\n popup.setContent(this.popupContent(popupFrag, ket, amplitude, magnitude, phase, nqubit))\n }\n\n private popupContent(\n popupFrag: DocumentFragment,\n ket: number,\n amplitude: Complex,\n magnitude: number,\n phase: number,\n nqubit: number\n ): string {\n const ketBinaryEl = popupFrag.querySelector('.circle-notation-popup__ket-binary')\n const ketDecimalEl = popupFrag.querySelector('.circle-notation-popup__ket-decimal')\n const amplitudeRealEl = popupFrag.querySelector('.circle-notation-popup__amplitude-real')\n const amplitudeImagEl = popupFrag.querySelector('.circle-notation-popup__amplitude-imag')\n const probabilityEl = popupFrag.querySelector('.circle-notation-popup__probability')\n const phaseEl = popupFrag.querySelector('.circle-notation-popup__phase')\n\n if (ketBinaryEl) {\n ketBinaryEl.textContent = ket.toString(2).padStart(nqubit, '0')\n }\n\n if (ketDecimalEl) {\n ketDecimalEl.textContent = ket.toString()\n }\n\n if (amplitudeRealEl) {\n amplitudeRealEl.textContent = this.forceSigned(amplitude.real, 5)\n }\n\n if (amplitudeImagEl) {\n amplitudeImagEl.textContent = `${this.forceSigned(amplitude.imag, 5)}i`\n }\n\n if (probabilityEl) {\n probabilityEl.textContent = `${this.forceSigned(magnitude * magnitude * 100, 4)}%`\n }\n\n if (phaseEl) {\n phaseEl.textContent = `${this.forceSigned(phase, 2)}\u00B0`\n }\n\n const div = document.createElement('div')\n div.appendChild(popupFrag.cloneNode(true))\n\n // eslint-disable-next-line github/no-inner-html\n return div.innerHTML\n }\n\n private get popupEl(): HTMLTemplateElement | null {\n return document.getElementById('circle-notation-popup') as HTMLTemplateElement\n }\n\n private forceSigned(value: number, d: number): string {\n return (value >= 0 ? '+' : '') + value.toFixed(d)\n }\n\n private ketDecimal(el: HTMLElement): number {\n const dataKet = el.getAttribute('data-ket')\n\n return parseInt(dataKet!)\n }\n}\n\ncontroller(CircleNotationElement)\n", "import {Interpreter, createMachine, interpret} from 'xstate'\nimport {TemplateResult, html, render} from '@github/jtml'\nimport {attr, controller, target} from '@github/catalyst'\nimport {describe} from '@qni/common'\nimport reloadIcon from '../icon/reload.svg'\nimport tailSpinIcon from '../icon/tail-spin.svg'\n\ntype RunCircuitButtonContext = Record\ntype RunCircuitButtonEvent = {type: 'FINISH'} | {type: 'CLICK'; clientX: number; clientY: number}\n\nexport class RunCircuitButtonElement extends HTMLElement {\n @attr running = false\n @attr debug = false\n\n @target body!: HTMLElement\n @target ripple: HTMLElement | undefined\n\n private runCircuitButtonMachine = createMachine(\n {\n id: 'run-circuit-button',\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n {target: 'idle', cond: 'isIdle'},\n {target: 'running', cond: 'isRunning'}\n ]\n },\n idle: {\n on: {\n CLICK: {\n target: 'running',\n actions: ['ripple', 'setRunningTrue', 'dispatchClickEvent']\n }\n }\n },\n running: {\n on: {\n FINISH: {\n target: 'idle',\n actions: ['setRunningFalse']\n }\n }\n }\n }\n },\n {\n actions: {\n setRunningFalse: () => {\n this.running = false\n },\n setRunningTrue: () => {\n this.running = true\n },\n ripple: (_context, event) => {\n if (event.type !== 'CLICK') return\n if (this.ripple) this.ripple.remove()\n\n const newRipple = document.createElement('span')\n newRipple.id = 'ripple'\n\n const diameter = Math.max(this.clientWidth, this.clientHeight)\n const radius = diameter / 2\n const rect = this.getBoundingClientRect()\n const left = rect.left + window.pageXOffset\n const top = rect.top + window.pageYOffset\n\n newRipple.setAttribute('part', 'ripple')\n newRipple.setAttribute('data-target', 'run-circuit-button.ripple')\n newRipple.style.width = newRipple.style.height = `${diameter}px`\n newRipple.style.left = `${event.clientX - (left + radius)}px`\n newRipple.style.top = `${event.clientY - (top + radius)}px`\n\n this.body.appendChild(newRipple)\n },\n dispatchClickEvent: () => {\n this.dispatchEvent(new Event('run-circuit-button-click', {bubbles: true}))\n }\n },\n guards: {\n isIdle: () => !this.running,\n isRunning: () => this.running\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private runCircuitButtonService!: Interpreter\n\n connectedCallback(): void {\n this.attachShadow({mode: 'open'})\n this.update()\n\n this.runCircuitButtonService = interpret(this.runCircuitButtonMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`run-circuit-button: ${describe(state.value)}`)\n }\n })\n .start()\n\n this.addEventListener('click', this.handleClickEvent)\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return\n\n if (name === 'data-running' && newValue !== null) {\n this.runCircuitButtonService.send({type: 'FINISH'})\n }\n }\n\n update(): void {\n render(\n html`\n\n
${this.reloadIcon} ${this.tailSpinIcon}
`,\n this.shadowRoot!\n )\n }\n\n private handleClickEvent(event: MouseEvent): void {\n this.runCircuitButtonService.send({type: 'CLICK', clientX: event.clientX, clientY: event.clientY})\n }\n\n private get reloadIcon(): TemplateResult {\n return html(([reloadIcon] as unknown) as TemplateStringsArray)\n }\n\n private get tailSpinIcon(): TemplateResult {\n return html(([tailSpinIcon] as unknown) as TemplateStringsArray)\n }\n}\n\ncontroller(RunCircuitButtonElement)\n", "import {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\n\n@controller\nexport class CircuitBlockElement extends HTMLElement {\n @attr comment = ''\n @attr finalized = false\n\n finalize(): void {\n this.finalized = true\n }\n\n connectedCallback(): void {\n this.attachShadow({mode: 'open'})\n this.update()\n }\n\n update(): void {\n render(\n html`\n
\n \n
`,\n this.shadowRoot!\n )\n }\n}\n", "import {Interpreter, createMachine, interpret} from 'xstate'\nimport {Operation, isOperation} from './operation'\nimport {TemplateResult, html, render} from '@github/jtml'\nimport {attr, controller} from '@github/catalyst'\nimport {Util} from '@qni/common'\nimport interact from 'interactjs'\nimport wiresIcon from '../icon/wires.svg'\n\nexport const isCircuitDropzoneElement = (arg: unknown): arg is CircuitDropzoneElement =>\n arg !== undefined && arg !== null && arg instanceof CircuitDropzoneElement\n\ntype CircuitDropzoneContext = Record\ntype CircuitDropzoneEvent =\n | {type: 'INIT_OPERATION'; operation: Operation}\n | {type: 'SNAP_OPERATION'}\n | {type: 'UNSNAP_OPERATION'}\n | {type: 'DROP_OPERATION'}\n | {type: 'PUT_OPERATION'; operation: Operation}\n | {type: 'DELETE_OPERATION'; operation: Operation}\n\nexport class CircuitDropzoneElement extends HTMLElement {\n @attr operationName = ''\n @attr inputWireQuantum = false\n @attr outputWireQuantum = false\n @attr connectTop = false\n @attr connectBottom = false\n @attr shadow = false\n @attr debug = false\n\n private circuitDropzoneMachine = createMachine(\n {\n id: 'circuit-dropzone',\n initial: 'empty',\n states: {\n empty: {\n on: {\n INIT_OPERATION: {\n target: 'occupied',\n actions: ['initOperation']\n },\n SNAP_OPERATION: {\n target: 'snapped',\n actions: ['snapOperation']\n },\n PUT_OPERATION: {\n target: 'occupied',\n actions: ['putOperation']\n },\n DELETE_OPERATION: {\n target: 'empty',\n actions: ['deleteOperation', 'dispatchDeleteOperationEvent']\n }\n }\n },\n snapped: {\n on: {\n UNSNAP_OPERATION: {\n target: 'empty',\n actions: ['unsnapOperation']\n },\n DROP_OPERATION: {\n target: 'occupied',\n actions: ['dropOperation']\n }\n }\n },\n occupied: {\n entry: 'dispatchOccupiedEvent',\n on: {\n UNSNAP_OPERATION: {\n target: 'empty',\n actions: ['unsnapOperation']\n },\n DELETE_OPERATION: {\n target: 'empty',\n actions: ['deleteOperation', 'dispatchDeleteOperationEvent']\n }\n }\n }\n }\n },\n {\n actions: {\n snapOperation: () => {\n Util.notNull(this.operation)\n\n this.operationName = this.operation.tagName.toLocaleLowerCase()\n this.dispatchEvent(new Event('circuit-dropzone-snap', {bubbles: true}))\n },\n unsnapOperation: () => {\n this.operationName = ''\n this.dispatchEvent(new Event('circuit-dropzone-unsnap', {bubbles: true}))\n },\n dropOperation: () => {\n this.dispatchEvent(new Event('circuit-dropzone-drop', {bubbles: true}))\n },\n putOperation: (_context, event) => {\n if (event.type !== 'PUT_OPERATION') return\n\n this.append(event.operation)\n this.operationName = event.operation.tagName.toLocaleLowerCase()\n event.operation.snapped = true\n },\n initOperation: (_context, event) => {\n if (event.type !== 'INIT_OPERATION') return\n\n event.operation.snapped = true\n },\n deleteOperation: (_context, event) => {\n if (event.type !== 'DELETE_OPERATION') return\n\n this.operationName = ''\n this.removeChild(event.operation as Node)\n },\n dispatchOccupiedEvent: () => {\n this.dispatchEvent(new Event('circuit-dropzone-occupy', {bubbles: true}))\n },\n dispatchDeleteOperationEvent: () => {\n this.dispatchEvent(new Event('circuit-dropzone-operation-delete', {bubbles: true}))\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private circuitDropzoneService!: Interpreter\n\n get noConnections(): boolean {\n return !this.connectTop && !this.connectBottom\n }\n\n get occupied(): boolean {\n return this.operationName !== ''\n }\n\n get operation(): Operation | null {\n const children = Array.from(this.children)\n const operations = children.filter((each): each is Operation => isOperation(each))\n\n switch (operations.length) {\n case 0:\n return null\n case 1:\n return operations[0]\n default:\n throw new Error('circuit-dropzone cannot hold multiple operations.')\n }\n }\n\n get snapTarget(): {x: number; y: number} {\n const rect = this.getBoundingClientRect()\n\n return {\n x: window.pageXOffset + rect.left + this.clientWidth / 2,\n y: window.pageYOffset + rect.top + this.clientHeight / 2\n }\n }\n\n toJson(): string | number {\n const operation = this.operation\n\n if (operation === null) {\n return '1'\n } else {\n return operation.toJson()\n }\n }\n\n connectedCallback(): void {\n this.circuitDropzoneService = interpret(this.circuitDropzoneMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`circuit-dropzone: ${state.value}`)\n }\n })\n .start()\n\n this.attachShadow({mode: 'open'})\n this.update()\n if (this.operation !== null) this.initOperation(this.operation)\n this.initDropzone()\n\n this.addEventListener('operation-snap', this.snapOperation)\n this.addEventListener('operation-unsnap', this.unsnapOperation)\n this.addEventListener('operation-end-dragging', this.dropOperation)\n this.addEventListener('operation-delete', this.deleteOperation)\n }\n\n update(): void {\n render(\n html`\n\n
${this.wireSvg}
`,\n this.shadowRoot!\n )\n }\n\n put(operation: Operation): void {\n this.circuitDropzoneService.send({type: 'PUT_OPERATION', operation})\n }\n\n private initOperation(operation: Operation): void {\n this.circuitDropzoneService.send({type: 'INIT_OPERATION', operation})\n }\n\n private initDropzone(): void {\n if (this.operation !== null) {\n this.operationName = this.operation.tagName.toLocaleLowerCase()\n }\n\n interact(this).dropzone({\n accept: '[data-draggable]',\n overlap: 'center'\n })\n }\n\n private snapOperation(): void {\n this.circuitDropzoneService.send({type: 'SNAP_OPERATION'})\n }\n\n private unsnapOperation(): void {\n this.circuitDropzoneService.send({type: 'UNSNAP_OPERATION'})\n }\n\n private dropOperation(): void {\n this.circuitDropzoneService.send({type: 'DROP_OPERATION'})\n }\n\n private deleteOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} isn't an Operation.`)\n this.circuitDropzoneService.send({type: 'DELETE_OPERATION', operation})\n }\n\n private get wireSvg(): TemplateResult {\n return html(([wiresIcon] as unknown) as TemplateStringsArray)\n }\n}\n\ncontroller(CircuitDropzoneElement)\n", "import {\n DetailedError,\n SerializedCircuitStep,\n SerializedHGate,\n SerializedMeasurementGate,\n SerializedPhaseGate,\n SerializedRnotGate,\n SerializedRxGate,\n SerializedRyGate,\n SerializedRzGate,\n SerializedSwapGate,\n SerializedTGate,\n SerializedXGate,\n SerializedYGate,\n SerializedZGate,\n Util,\n describe\n} from '@qni/common'\nimport {Interpreter, createMachine, interpret} from 'xstate'\nimport {\n Operation,\n isControlGateElement,\n isHGateElement,\n isOperation,\n isPhaseGateElement,\n isRnotGateElement,\n isRxGateElement,\n isRyGateElement,\n isRzGateElement,\n isSwapGateElement,\n isTGateElement,\n isXGateElement,\n isYGateElement,\n isZGateElement\n} from './operation'\nimport {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {BlochDisplayElement} from './bloch-display-element'\nimport {CircuitBlockElement} from './circuit-block-element'\nimport {CircuitDropzoneElement} from './circuit-dropzone-element'\nimport {ControlGateElement} from './control-gate-element'\nimport {HGateElement} from './h-gate-element'\nimport {MeasurementGateElement} from './measurement-gate-element'\nimport {PhaseGateElement} from './phase-gate-element'\nimport {RnotGateElement} from './rnot-gate-element'\nimport {RxGateElement} from './rx-gate-element'\nimport {RyGateElement} from './ry-gate-element'\nimport {RzGateElement} from './rz-gate-element'\nimport {SwapGateElement} from './swap-gate-element'\nimport {TGateElement} from './t-gate-element'\nimport {WriteGateElement} from './write-gate-element'\nimport {XGateElement} from './x-gate-element'\nimport {YGateElement} from './y-gate-element'\nimport {ZGateElement} from './z-gate-element'\nimport {isControllable} from './mixin/controllable'\n\nexport const isCircuitStepElement = (arg: unknown): arg is CircuitStepElement =>\n arg !== undefined && arg !== null && arg instanceof CircuitStepElement\n\ntype ConnectionProps = {\n // Controlled-H\n disableCh: boolean\n maxChControlGates: number\n maxChTargetGates: number\n // Controlled-NOT\n disableCnot: boolean\n maxCnotControlGates: number\n maxCnotTargetGates: number\n // Controlled-Y\n disableCy: boolean\n maxCyControlGates: number\n maxCyTargetGates: number\n // Controlled-Z\n disableCz: boolean\n maxCzControlGates: number\n maxCzTargetGates: number\n // Controlled-Phase\n disableCphase: boolean\n maxCphaseControlGates: number\n maxCphaseTargetGates: number\n // Controlled-T\n disableCt: boolean\n maxCtControlGates: number\n maxCtTargetGates: number\n // Controlled-\u221AX\n disableCrnot: boolean\n maxCrnotControlGates: number\n maxCrnotTargetGates: number\n // Controlled-Rx\n disableCrx: boolean\n maxCrxControlGates: number\n maxCrxTargetGates: number\n // Controlled-Ry\n disableCry: boolean\n maxCryControlGates: number\n maxCryTargetGates: number\n // Controlled-Rz\n disableCrz: boolean\n maxCrzControlGates: number\n maxCrzTargetGates: number\n // Controlled-Swap\n disableCswap: boolean\n maxCswapControlGates: number\n // Swap\n disableSwap: boolean\n // CZ\n disableControlControl: boolean\n maxControlControlTargetGates: number\n // CPHASE\n disablePhasePhase: boolean\n maxPhasePhaseTargetGates: number\n}\n\nconst groupBy = (\n array: readonly V[],\n getKey: (current: V, index: number, orig: readonly V[]) => K\n): Array<[K, V[]]> =>\n Array.from(\n array.reduce((map, current, index, orig) => {\n const key = getKey(current, index, orig)\n const list = map.get(key)\n if (list) {\n list.push(current)\n } else {\n map.set(key, [current])\n }\n return map\n }, new Map())\n )\n\ntype CircuitStepContext = Record\ntype CircuitStepEvent =\n | {type: 'ACTIVATE'}\n | {type: 'DEACTIVATE'}\n | {type: 'SET_BREAKPOINT'}\n | {type: 'UNSET_BREAKPOINT'}\n | {type: 'SNAP_DROPZONE'; dropzone: CircuitDropzoneElement}\n | {type: 'UNSNAP_DROPZONE'; dropzone: CircuitDropzoneElement}\n | {type: 'DELETE_OPERATION'; dropzone: CircuitDropzoneElement}\n | {type: 'OCCUPY_DROPZONE'; dropzone: CircuitDropzoneElement}\n | {type: 'UNSHADOW'}\n\nexport class CircuitStepElement extends HTMLElement {\n @attr active = false\n @attr breakpoint = false\n @attr shadow = false\n @attr keep = false\n @attr debug = false\n\n private circuitStepMachine = createMachine(\n {\n id: 'circuit-step',\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n {target: 'shadow', cond: 'isShadow'},\n {target: 'visible', cond: 'isVisible'}\n ]\n },\n shadow: {\n type: 'compound',\n initial: 'unknown',\n on: {\n SNAP_DROPZONE: {\n target: 'shadow',\n actions: ['setOperationBit', 'dispatchSnapEvent']\n },\n UNSNAP_DROPZONE: {\n target: 'shadow',\n actions: ['dispatchUnsnapEvent']\n },\n UNSHADOW: {\n target: 'visible',\n actions: ['unshadow']\n }\n },\n states: {\n unknown: {\n always: [\n {target: 'inactive', cond: 'isInactive'},\n {target: 'active', cond: 'isActive'}\n ]\n },\n inactive: {\n on: {\n ACTIVATE: {\n target: 'active'\n }\n }\n },\n active: {\n on: {\n DEACTIVATE: {\n target: 'inactive'\n }\n }\n }\n }\n },\n visible: {\n type: 'parallel',\n on: {\n SNAP_DROPZONE: {\n target: 'visible',\n actions: ['setOperationBit', 'dispatchSnapEvent']\n },\n UNSNAP_DROPZONE: {\n target: 'visible',\n actions: ['dispatchUnsnapEvent']\n },\n OCCUPY_DROPZONE: {\n target: 'visible',\n actions: ['setOperationBit']\n },\n DELETE_OPERATION: {\n target: 'visible',\n actions: ['dispatchDeleteOperationEvent']\n }\n },\n states: {\n activatable: {\n type: 'compound',\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n {target: 'inactive', cond: 'isInactive'},\n {target: 'active', cond: 'isActive'}\n ]\n },\n inactive: {\n on: {\n ACTIVATE: {\n target: 'active'\n }\n }\n },\n active: {\n on: {\n DEACTIVATE: {\n target: 'inactive'\n }\n }\n }\n }\n },\n breakpointable: {\n type: 'compound',\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n {target: 'breakpointOn', cond: 'isBreakpointOn'},\n {target: 'breakpointOff', cond: 'isBreakpointOff'}\n ]\n },\n breakpointOn: {\n on: {\n UNSET_BREAKPOINT: {\n target: 'breakpointOff'\n }\n }\n },\n breakpointOff: {\n on: {\n SET_BREAKPOINT: {\n target: 'breakpointOn'\n }\n }\n }\n }\n }\n }\n }\n }\n },\n {\n actions: {\n setOperationBit: (_context, event) => {\n if (event.type !== 'SNAP_DROPZONE' && event.type !== 'OCCUPY_DROPZONE') return\n\n const dropzone = event.dropzone\n const bit = this.bit(dropzone)\n Util.notNull(dropzone.operation)\n\n dropzone.operation.bit = bit\n },\n dispatchSnapEvent: (_context, event) => {\n if (event.type !== 'SNAP_DROPZONE') return\n\n this.dispatchEvent(\n new CustomEvent('circuit-step-snap', {\n detail: {dropzone: event.dropzone},\n bubbles: true\n })\n )\n },\n dispatchUnsnapEvent: (_context, event) => {\n if (event.type !== 'UNSNAP_DROPZONE') return\n\n this.dispatchEvent(\n new CustomEvent('circuit-step-unsnap', {\n detail: {dropzone: event.dropzone},\n bubbles: true\n })\n )\n },\n dispatchDeleteOperationEvent: (_context, event) => {\n if (event.type !== 'DELETE_OPERATION') return\n\n this.dispatchEvent(\n new CustomEvent('circuit-step-delete-operation', {\n detail: {dropzone: event.dropzone},\n bubbles: true\n })\n )\n },\n unshadow: () => {\n this.shadow = false\n }\n },\n guards: {\n isShadow: () => {\n return this.shadow\n },\n isVisible: () => {\n return !this.shadow\n },\n isActive: () => {\n return this.active\n },\n isInactive: () => {\n return !this.active\n },\n isBreakpointOn: () => {\n return this.breakpoint\n },\n isBreakpointOff: () => {\n return !this.breakpoint\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private circuitStepService!: Interpreter\n\n get wireCount(): number {\n return this.dropzones.length\n }\n\n get isInBlock(): boolean {\n if (this.closest('circuit-block') === null) {\n return false\n }\n return true\n }\n\n get block(): CircuitBlockElement {\n const block = this.closest('circuit-block') as CircuitBlockElement\n\n return block!\n }\n\n connectedCallback(): void {\n this.circuitStepService = interpret(this.circuitStepMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`circuit-step: ${describe(state.value)}`)\n }\n })\n .start()\n\n this.addEventListener('mouseenter', this.dispatchMouseenterEvent)\n this.addEventListener('mouseleave', this.dispatchMouseleaveEvent)\n this.addEventListener('click', this.maybeDispatchClickEvent)\n this.addEventListener('circuit-dropzone-snap', this.snapDropzone)\n this.addEventListener('circuit-dropzone-unsnap', this.unsnapDropzone)\n this.addEventListener('circuit-dropzone-operation-delete', this.deleteOperation)\n this.addEventListener('circuit-dropzone-drop', this.unshadow)\n this.addEventListener('circuit-dropzone-occupy', this.occupyDropzone)\n\n this.attachShadow({mode: 'open'})\n this.updateOperationAttributes()\n this.update()\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return\n\n if (name === 'data-active') {\n if (newValue !== null) {\n this.circuitStepService.send({type: 'ACTIVATE'})\n } else {\n this.circuitStepService.send({type: 'DEACTIVATE'})\n }\n }\n\n if (name === 'data-breakpoint') {\n if (newValue !== null) {\n this.circuitStepService.send({type: 'SET_BREAKPOINT'})\n } else {\n this.circuitStepService.send({type: 'UNSET_BREAKPOINT'})\n }\n }\n\n if (name === 'data-shadow') {\n for (const each of this.dropzones) {\n if (newValue !== null) {\n each.shadow = true\n } else {\n each.shadow = false\n }\n }\n }\n }\n\n update(): void {\n render(html``, this.shadowRoot!)\n this.dispatchUpdateEvent()\n }\n\n updateOperationAttributes(connectionProps?: ConnectionProps): void {\n for (const each of this.dropzones) {\n each.connectTop = false\n each.connectBottom = false\n }\n\n const controlDropzones = this.controlGateDropzones\n const controllableDropzones = this.controllableDropzones(connectionProps)\n for (const each of controllableDropzones) {\n if (isControllable(each.operation)) each.operation.controls = []\n }\n\n this.updateSwapConnections(connectionProps)\n this.updatePhasePhaseConnections(connectionProps)\n\n if (controlDropzones.length === 0) return\n if (controlDropzones.length === 1 && controllableDropzones.length === 0) {\n const controlGate = controlDropzones[0].operation as ControlGateElement\n controlGate.disable()\n return\n }\n\n if (controllableDropzones.length === 0) {\n this.updateControlControlConnections(connectionProps)\n } else {\n this.updateControlledUConnections(connectionProps)\n }\n\n this.updateFreeDropzoneConnections(connectionProps)\n }\n\n private updateSwapConnections(connectionProps?: ConnectionProps): void {\n const disableSwap = connectionProps?.disableSwap\n const swapDropzones = this.swapGateDropzones\n\n if (swapDropzones.length !== 2 || disableSwap) {\n for (const each of swapDropzones) {\n const swapGate = each.operation as SwapGateElement\n swapGate.disable()\n }\n } else {\n for (const swap of swapDropzones) {\n const swapGate = swap.operation as SwapGateElement\n swapGate.enable()\n swap.connectTop = swapDropzones.some(each => this.bit(each) < this.bit(swap))\n swap.connectBottom = swapDropzones.some(each => this.bit(each) > this.bit(swap))\n }\n\n const swapBits = swapDropzones.map(each => this.bit(each))\n for (const dropzone of this.freeDropzones) {\n const minBit = Math.min(...swapBits)\n const maxBit = Math.max(...swapBits)\n if (minBit < this.bit(dropzone) && this.bit(dropzone) < maxBit) {\n dropzone.connectTop = true\n dropzone.connectBottom = true\n }\n }\n }\n }\n\n private updatePhasePhaseConnections(connectionProps?: ConnectionProps): void {\n if (connectionProps?.disablePhasePhase) return\n\n const phaseDropzones = this.phaseGateDropzones\n\n for (const phaseDropzone of phaseDropzones) {\n const phaseGate = phaseDropzone.operation as PhaseGateElement\n if (phaseGate.angle === '') continue\n if (connectionProps !== undefined && connectionProps.maxPhasePhaseTargetGates === 1) continue\n\n let sameAnglePhaseBits = phaseDropzones\n .filter(each => {\n if (!isPhaseGateElement(each.operation)) throw new Error(`${each.operation} isn't a phase-gate element.`)\n return phaseGate.angle === each.operation.angle\n })\n .map(each => this.bit(each))\n if (connectionProps !== undefined && connectionProps.maxPhasePhaseTargetGates > 1) {\n sameAnglePhaseBits = sameAnglePhaseBits.slice(0, connectionProps.maxPhasePhaseTargetGates)\n }\n\n if (!sameAnglePhaseBits.includes(this.bit(phaseDropzone))) continue\n\n phaseDropzone.connectTop = sameAnglePhaseBits.some(each => each < this.bit(phaseDropzone))\n phaseDropzone.connectBottom = sameAnglePhaseBits.some(each => each > this.bit(phaseDropzone))\n }\n\n for (const dropzone of this.freeDropzones) {\n const controlledPhaseDropzones = this.phaseGateDropzones.filter(each => each.connectTop || each.connectBottom)\n const controlledBits = controlledPhaseDropzones.map(each => this.bit(each))\n const minBit = Math.min(...controlledBits)\n const maxBit = Math.max(...controlledBits)\n\n if (minBit < this.bit(dropzone) && this.bit(dropzone) < maxBit) {\n dropzone.connectTop = true\n dropzone.connectBottom = true\n }\n }\n }\n\n private updateControlControlConnections(connectionProps?: ConnectionProps): void {\n const controlGateDropzones = this.controlGateDropzones\n let controlBits = controlGateDropzones.map(each => this.bit(each))\n let numControl = 0\n\n if (connectionProps !== undefined) {\n if (connectionProps.maxControlControlTargetGates === 1) {\n controlBits = []\n } else if (connectionProps.maxControlControlTargetGates > 1) {\n controlBits = controlBits.slice(0, connectionProps.maxControlControlTargetGates)\n }\n }\n\n for (const each of controlGateDropzones) {\n numControl += 1\n\n const controlGate = each.operation as ControlGateElement\n\n if (connectionProps?.disableControlControl) {\n controlGate.disable()\n } else if (\n connectionProps !== undefined &&\n (connectionProps.maxControlControlTargetGates === 1 ||\n (connectionProps.maxControlControlTargetGates > 0 &&\n numControl > connectionProps.maxControlControlTargetGates))\n ) {\n controlGate.disable()\n } else {\n controlGate.enable()\n each.connectTop = controlBits.some(other => {\n return this.bit(each) > other\n })\n each.connectBottom = controlBits.some(other => {\n return this.bit(each) < other\n })\n }\n }\n }\n\n private updateControlledUConnections(connectionProps?: ConnectionProps): void {\n const controllableDropzones = this.controllableDropzones(connectionProps)\n const controlDropzones = this.controlGateDropzones\n const controllableOperationNames = [...new Set(controllableDropzones.map(each => each.operationName))]\n const numControlDropzones = this.numControlGateDropzones(connectionProps, controllableOperationNames)\n const allControlBits = controlDropzones.map(dz => this.bit(dz))\n const activeControlBits =\n numControlDropzones === null ? allControlBits : allControlBits.slice(0, numControlDropzones)\n const controllableBits = controllableDropzones.map(dz => this.bit(dz))\n const activeperationBits = activeControlBits.concat(controllableBits)\n\n for (const [i, each] of Object.entries(controlDropzones)) {\n const controlGate = each.operation as ControlGateElement\n\n each.connectBottom = activeperationBits.some(other => {\n return this.bit(each) < other\n })\n each.connectTop = activeperationBits.some(other => {\n return this.bit(each) > other\n })\n\n if (numControlDropzones === null || (numControlDropzones !== null && parseInt(i) < numControlDropzones)) {\n controlGate.enable()\n } else {\n each.connectTop = Math.max(...activeperationBits) > this.bit(each)\n controlGate.disable()\n }\n }\n\n for (const each of controllableDropzones) {\n if (!isControllable(each.operation)) throw new Error(`${each.operation} isn't controllable.`)\n\n each.operation.controls = this.controlBits(each, allControlBits, connectionProps)\n each.connectTop = activeperationBits.some(other => {\n return other < this.bit(each)\n })\n each.connectBottom = activeperationBits.some(other => {\n return other > this.bit(each)\n })\n }\n }\n\n private updateFreeDropzoneConnections(connectionProps?: ConnectionProps): void {\n const controllableDropzones = this.controllableDropzones(connectionProps)\n const activeControlBits = this.controlGateDropzones\n .filter(each => isControlGateElement(each.operation) && !each.operation.disabled)\n .map(each => this.bit(each))\n const controllableBits = controllableDropzones.map(dz => this.bit(dz))\n const activeOperationBits = activeControlBits.concat(controllableBits)\n\n const minBit = Math.min(...activeOperationBits)\n const maxBit = Math.max(...activeOperationBits)\n\n for (const each of this.freeDropzones) {\n if (minBit < this.bit(each) && this.bit(each) < maxBit) {\n each.connectTop = true\n each.connectBottom = true\n }\n }\n }\n\n private controlBits(\n dropzone: CircuitDropzoneElement,\n allControlBits: number[],\n connectionProps?: ConnectionProps\n ): number[] {\n let bits = allControlBits\n\n if (connectionProps) {\n if (connectionProps.maxChControlGates > 0 && dropzone.operationName === 'h-gate') {\n bits = allControlBits.slice(0, connectionProps.maxChControlGates)\n } else if (connectionProps.maxCnotControlGates > 0 && dropzone.operationName === 'x-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCnotControlGates)\n } else if (connectionProps.maxCyControlGates > 0 && dropzone.operationName === 'y-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCyControlGates)\n } else if (connectionProps.maxCzControlGates > 0 && dropzone.operationName === 'z-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCzControlGates)\n } else if (connectionProps.maxCphaseControlGates > 0 && dropzone.operationName === 'phase-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCphaseControlGates)\n } else if (connectionProps.maxCtControlGates > 0 && dropzone.operationName === 't-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCtControlGates)\n } else if (connectionProps.maxCrnotControlGates > 0 && dropzone.operationName === 'rnot-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCrnotControlGates)\n } else if (connectionProps.maxCrxControlGates > 0 && dropzone.operationName === 'rx-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCrxControlGates)\n } else if (connectionProps.maxCryControlGates > 0 && dropzone.operationName === 'ry-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCryControlGates)\n } else if (connectionProps.maxCrzControlGates > 0 && dropzone.operationName === 'rz-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCrzControlGates)\n } else if (connectionProps.maxCswapControlGates > 0 && dropzone.operationName === 'swap-gate') {\n bits = allControlBits.slice(0, connectionProps.maxCswapControlGates)\n }\n }\n\n return bits\n }\n\n bit(dropzone: CircuitDropzoneElement): number {\n const bit = this.dropzones.indexOf(dropzone)\n Util.need(bit !== -1, 'circuit-dropzone not found.')\n\n return bit\n }\n\n get isEmpty(): boolean {\n if (this.keep) return false\n return this.dropzones.every(each => !each.occupied)\n }\n\n dropzoneAt(dropzoneIndex: number): CircuitDropzoneElement {\n const dropzone = this.dropzones[dropzoneIndex]\n Util.notNull(dropzone)\n\n return dropzone\n }\n\n get dropzones(): CircuitDropzoneElement[] {\n return Array.from(this.querySelectorAll('circuit-dropzone')) as CircuitDropzoneElement[]\n }\n\n get freeDropzones(): CircuitDropzoneElement[] {\n return this.dropzones.filter(each => !each.occupied)\n }\n\n get lastDropzone(): CircuitDropzoneElement {\n return this.dropzones[this.wireCount - 1]\n }\n\n appendDropzone(): CircuitDropzoneElement {\n const dropzone = new CircuitDropzoneElement()\n dropzone.shadow = this.shadow\n this.append(dropzone)\n return dropzone\n }\n\n appendOperation(operation: Operation): void {\n const dropzone = new CircuitDropzoneElement()\n this.append(dropzone)\n dropzone.put(operation)\n }\n\n private get swapGateDropzones(): CircuitDropzoneElement[] {\n return this.dropzones.filter(each => each.occupied).filter(each => each.operationName === 'swap-gate')\n }\n\n private get phaseGateDropzones(): CircuitDropzoneElement[] {\n return this.dropzones.filter(each => each.occupied).filter(each => each.operationName === 'phase-gate')\n }\n\n private get controlGateDropzones(): CircuitDropzoneElement[] {\n return this.dropzones.filter(each => each.occupied && isControlGateElement(each.operation))\n }\n\n private numControlGateDropzones(\n props: ConnectionProps | undefined,\n controllableOperationNames: string[]\n ): number | null {\n if (props === undefined) return null\n\n let ndropzones = 0\n if (controllableOperationNames.includes('h-gate') && !props.disableCh && props.maxChControlGates > ndropzones) {\n ndropzones = props.maxChControlGates\n }\n if (controllableOperationNames.includes('x-gate') && !props.disableCnot && props.maxCnotControlGates > ndropzones) {\n ndropzones = props.maxCnotControlGates\n }\n if (controllableOperationNames.includes('y-gate') && !props.disableCy && props.maxCyControlGates > ndropzones) {\n ndropzones = props.maxCyControlGates\n }\n if (controllableOperationNames.includes('z-gate') && !props.disableCz && props.maxCzControlGates > ndropzones) {\n ndropzones = props.maxCzControlGates\n }\n if (\n controllableOperationNames.includes('phase-gate') &&\n !props.disableCphase &&\n props.maxCphaseControlGates > ndropzones\n ) {\n ndropzones = props.maxCphaseControlGates\n }\n if (controllableOperationNames.includes('t-gate') && !props.disableCt && props.maxCtControlGates > ndropzones) {\n ndropzones = props.maxCtControlGates\n }\n if (\n controllableOperationNames.includes('rnot-gate') &&\n !props.disableCrnot &&\n props.maxCrnotControlGates > ndropzones\n ) {\n ndropzones = props.maxCrnotControlGates\n }\n if (controllableOperationNames.includes('rx-gate') && !props.disableCrx && props.maxCrxControlGates > ndropzones) {\n ndropzones = props.maxCrxControlGates\n }\n if (controllableOperationNames.includes('ry-gate') && !props.disableCry && props.maxCryControlGates > ndropzones) {\n ndropzones = props.maxCryControlGates\n }\n if (controllableOperationNames.includes('rz-gate') && !props.disableCrz && props.maxCrzControlGates > ndropzones) {\n ndropzones = props.maxCrzControlGates\n }\n if (\n controllableOperationNames.includes('swap-gate') &&\n !props.disableCswap &&\n props.maxCswapControlGates > ndropzones\n ) {\n ndropzones = props.maxCswapControlGates\n }\n\n if (ndropzones === 0) return null\n return ndropzones\n }\n\n private controllableDropzones(connectionProps: ConnectionProps | undefined): CircuitDropzoneElement[] {\n let numH = 0\n let numX = 0\n let numY = 0\n let numZ = 0\n let numPhase = 0\n let numT = 0\n let numRnot = 0\n let numRx = 0\n let numRy = 0\n let numRz = 0\n\n return this.dropzones\n .filter(each => each.occupied)\n .filter(each => isControllable(each.operation))\n .filter(each => {\n if (connectionProps === undefined) return true\n\n if (isHGateElement(each.operation)) {\n numH += 1\n if (connectionProps.maxChTargetGates !== 0 && numH > connectionProps.maxChTargetGates) {\n return false\n }\n return !connectionProps.disableCh\n }\n if (isXGateElement(each.operation)) {\n numX += 1\n if (connectionProps.maxCnotTargetGates !== 0 && numX > connectionProps.maxCnotTargetGates) {\n return false\n }\n return !connectionProps.disableCnot\n }\n if (isYGateElement(each.operation)) {\n numY += 1\n if (connectionProps.maxCyTargetGates !== 0 && numY > connectionProps.maxCyTargetGates) {\n return false\n }\n return !connectionProps.disableCy\n }\n if (isZGateElement(each.operation)) {\n numZ += 1\n if (connectionProps.maxCzTargetGates !== 0 && numZ > connectionProps.maxCzTargetGates) {\n return false\n }\n return !connectionProps.disableCz\n }\n if (isPhaseGateElement(each.operation)) {\n numPhase += 1\n if (connectionProps.maxCphaseTargetGates !== 0 && numPhase > connectionProps.maxCphaseTargetGates) {\n return false\n }\n return !connectionProps.disableCphase\n }\n if (isTGateElement(each.operation)) {\n numT += 1\n if (connectionProps.maxCtTargetGates !== 0 && numT > connectionProps.maxCtTargetGates) {\n return false\n }\n return !connectionProps.disableCt\n }\n if (isRnotGateElement(each.operation)) {\n numRnot += 1\n if (connectionProps.maxCrnotTargetGates !== 0 && numRnot > connectionProps.maxCrnotTargetGates) {\n return false\n }\n return !connectionProps.disableCrnot\n }\n if (isRxGateElement(each.operation)) {\n numRx += 1\n if (connectionProps.maxCrxTargetGates !== 0 && numRx > connectionProps.maxCrxTargetGates) {\n return false\n }\n return !connectionProps.disableCrx\n }\n if (isRyGateElement(each.operation)) {\n numRy += 1\n if (connectionProps.maxCryTargetGates !== 0 && numRy > connectionProps.maxCryTargetGates) {\n return false\n }\n return !connectionProps.disableCry\n }\n if (isRzGateElement(each.operation)) {\n numRz += 1\n if (connectionProps.maxCrzTargetGates !== 0 && numRz > connectionProps.maxCrzTargetGates) {\n return false\n }\n return !connectionProps.disableCrz\n }\n if (isSwapGateElement(each.operation)) return !connectionProps.disableCswap\n\n return true\n })\n }\n\n private dispatchUpdateEvent(): void {\n this.dispatchEvent(new Event('circuit-step-update', {bubbles: true}))\n }\n\n private deleteOperation(event: Event): void {\n const dropzone = event.target as CircuitDropzoneElement\n this.circuitStepService.send({type: 'DELETE_OPERATION', dropzone})\n }\n\n private dispatchMouseenterEvent(): void {\n this.dispatchEvent(new Event('circuit-step-mouseenter', {bubbles: true}))\n }\n\n private dispatchMouseleaveEvent(): void {\n this.dispatchEvent(new Event('circuit-step-mouseleave', {bubbles: true}))\n }\n\n private maybeDispatchClickEvent(event: MouseEvent): void {\n if (isOperation(event.target)) return\n\n this.dispatchEvent(new Event('circuit-step-click', {bubbles: true}))\n }\n\n private snapDropzone(event: Event): void {\n const dropzone = event.target as CircuitDropzoneElement\n this.circuitStepService.send({type: 'SNAP_DROPZONE', dropzone})\n }\n\n private unsnapDropzone(event: Event): void {\n const dropzone = event.target as CircuitDropzoneElement\n this.circuitStepService.send({type: 'UNSNAP_DROPZONE', dropzone})\n }\n\n private unshadow(): void {\n this.circuitStepService.send({type: 'UNSHADOW'})\n }\n\n private occupyDropzone(event: Event): void {\n const dropzone = event.target as CircuitDropzoneElement\n this.circuitStepService.send({type: 'OCCUPY_DROPZONE', dropzone})\n }\n\n serialize(): SerializedCircuitStep {\n const serializedStep: SerializedCircuitStep = []\n\n for (const [klass, sameOps] of groupBy(this.operations, op => op.constructor)) {\n switch (klass) {\n case HGateElement: {\n const hGates = sameOps as HGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(hGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedHGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case XGateElement: {\n const xGates = sameOps as XGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(xGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedXGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case YGateElement: {\n const yGates = sameOps as YGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(yGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedYGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case ZGateElement: {\n const zGates = sameOps as ZGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(zGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedZGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case PhaseGateElement: {\n const phaseGates = sameOps as PhaseGateElement[]\n for (const [angle, sameAngleGates] of groupBy(phaseGates, gate => gate.angle)) {\n for (const [ifStr, sameIfGates] of groupBy(sameAngleGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedPhaseGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (angle !== '') serializedGate.angle = angle\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n }\n break\n }\n case TGateElement: {\n const tGates = sameOps as TGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(tGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedTGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case RnotGateElement: {\n const rnotGates = sameOps as RnotGateElement[]\n for (const [ifStr, sameIfGates] of groupBy(rnotGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedRnotGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n break\n }\n case RxGateElement: {\n const rxGates = sameOps as RxGateElement[]\n for (const [angle, sameAngleGates] of groupBy(rxGates, gate => gate.angle)) {\n for (const [ifStr, sameIfGates] of groupBy(sameAngleGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedRxGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (angle !== '') serializedGate.angle = angle\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n }\n break\n }\n case RyGateElement: {\n const ryGates = sameOps as RyGateElement[]\n for (const [angle, sameAngleGates] of groupBy(ryGates, gate => gate.angle)) {\n for (const [ifStr, sameIfGates] of groupBy(sameAngleGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedRyGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (angle !== '') serializedGate.angle = angle\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n }\n break\n }\n case RzGateElement: {\n const rzGates = sameOps as RzGateElement[]\n for (const [angle, sameAngleGates] of groupBy(rzGates, gate => gate.angle)) {\n for (const [ifStr, sameIfGates] of groupBy(sameAngleGates, gate => gate.if)) {\n for (const [controlsStr, sameControlGates] of groupBy(sameIfGates, gate => gate.controls.toString())) {\n const gate0 = sameControlGates[0]\n const opType = gate0.operationType\n const targets = sameControlGates.map(each => each.bit)\n const serializedGate: SerializedRzGate = {type: opType, targets}\n if (ifStr !== '') serializedGate.if = ifStr\n if (angle !== '') serializedGate.angle = angle\n if (controlsStr !== '') serializedGate.controls = gate0.controls\n serializedStep.push(serializedGate)\n }\n }\n }\n break\n }\n case SwapGateElement: {\n const swapGates = (sameOps as SwapGateElement[]).filter(each => !each.disabled)\n if (swapGates.length !== 2) break\n\n const opType = swapGates[0].operationType\n const controls = swapGates[0].controls\n const serializedGate: SerializedSwapGate = {type: opType, targets: [swapGates[0].bit, swapGates[1].bit]}\n if (controls !== undefined && controls.length > 0) serializedGate.controls = controls\n serializedStep.push(serializedGate)\n break\n }\n case ControlGateElement: {\n const controlGates = (sameOps as ControlGateElement[]).filter(each => !each.disabled)\n if (controlGates.length < 2) break\n if (this.operations.some(each => isControllable(each) && each.controls.length > 0)) break\n\n const targets = controlGates.map(each => each.bit)\n serializedStep.push({type: controlGates[0].operationType, targets})\n break\n }\n case BlochDisplayElement: {\n const blochDisplays = sameOps as BlochDisplayElement[]\n const targets = sameOps.map(each => each.bit)\n serializedStep.push({type: blochDisplays[0].operationType, targets})\n break\n }\n case WriteGateElement: {\n const writeGates = sameOps as WriteGateElement[]\n for (const [, sameValueGates] of groupBy(writeGates, gate => gate.value)) {\n const targets = sameValueGates.map(each => each.bit)\n serializedStep.push({type: sameValueGates[0].operationType, targets})\n }\n break\n }\n case MeasurementGateElement: {\n const measurementGates = sameOps as MeasurementGateElement[]\n for (const [flag, sameFlagGates] of groupBy(measurementGates, gate => gate.flag)) {\n const targets = sameFlagGates.map(each => each.bit)\n const opType = sameFlagGates[0].operationType\n const serializedGate: SerializedMeasurementGate = {type: opType, targets}\n if (flag !== '') serializedGate.flag = flag\n serializedStep.push(serializedGate)\n }\n break\n }\n default:\n throw new DetailedError('Unrecognized operation', {klass})\n }\n }\n return serializedStep\n }\n\n private get operations(): Operation[] {\n return this.dropzones\n .filter(each => each.occupied)\n .map(each => each.operation)\n .filter((each): each is NonNullable => each !== null)\n }\n\n toJson(): string {\n const jsons = this.dropzones.map(each => each.toJson())\n while (jsons.length > 0 && jsons[jsons.length - 1] === '1') {\n jsons.pop()\n }\n if (jsons.length === 0) {\n return '[1]'\n }\n return `[${jsons.join(',')}]`\n }\n}\n\ncontroller(CircuitStepElement)\n", "import {Angleable, Flaggable, Ifable, isAngleable, isIfable, isMenuable} from './mixin'\nimport {CircuitStepElement, isCircuitStepElement} from './circuit-step-element'\nimport {Interpreter, createMachine, interpret} from 'xstate'\nimport {Operation, isOperation} from './operation'\nimport {Util, describe} from '@qni/common'\nimport {attr, controller, target} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {InspectorButtonElement} from './inspector-button-element'\nimport {OperationInspectorElement} from './operation-inspector-element'\nimport {QuantumCircuitElement} from './quantum-circuit-element'\nimport {isFlaggable} from './mixin/flaggable'\n\ntype CircuitEditorContext = Record\ntype CircuitEditorEvent =\n | {type: 'ACTIVATE_OPERATION'; operation: Operation}\n | {type: 'SHOW_OPERATION_MENU'; operation: Operation}\n | {type: 'SHOW_OPERATION_INSPECTOR_IF'; operation: Ifable}\n | {type: 'SHOW_OPERATION_INSPECTOR_ANGLE'; operation: Angleable}\n | {type: 'SHOW_OPERATION_INSPECTOR_FLAG'; operation: Flaggable}\n | {type: 'SET_OPERATION_IF'; operation: Ifable; if: string}\n | {type: 'SET_OPERATION_ANGLE'; operation: Angleable; angle: string; reducedAngle: string}\n | {type: 'SET_OPERATION_FLAG'; operation: Flaggable; flag: string}\n | {type: 'GRAB_OPERATION'; operation: Operation}\n | {type: 'UNGRAB_OPERATION'; operation: Operation}\n | {type: 'END_DRAGGING_OPERATION'; operation: Operation}\n | {type: 'DROP_OPERATION'; operation: Operation}\n | {type: 'DELETE_OPERATION'}\n | {type: 'OPERATION_IN_SNAP_RANGE'; operation: Operation; x: number; y: number}\n | {type: 'MOUSE_ENTER_STEP'; step: CircuitStepElement}\n | {type: 'MOUSE_LEAVE_STEP'; step: CircuitStepElement}\n | {type: 'MOUSE_LEAVE_CIRCUIT'}\n | {type: 'CLICK_STEP'; step: CircuitStepElement}\n | {type: 'SNAP_STEP'; step: CircuitStepElement}\n | {type: 'UNSNAP_STEP'; step: CircuitStepElement}\n\nexport class CircuitEditorElement extends HTMLElement {\n @attr debug = false\n\n @target circuit!: QuantumCircuitElement\n @target inspectorButton!: InspectorButtonElement\n\n private circuitEditorMachine = createMachine(\n {\n id: 'circuit-editor',\n initial: 'inspectable',\n states: {\n inspectable: {\n type: 'compound',\n initial: 'unknown',\n on: {\n DROP_OPERATION: {\n target: 'inspectable',\n actions: ['initOperationMenu', 'resizeCircuit']\n },\n ACTIVATE_OPERATION: {\n target: 'inspectable',\n actions: ['maybeUpdateOperationInspector']\n },\n DELETE_OPERATION: {\n target: 'inspectable',\n actions: ['resizeCircuit']\n }\n },\n states: {\n unknown: {\n always: [\n {target: 'idle', cond: 'isIdle'},\n {target: 'editing', cond: 'isEditing'}\n ]\n },\n idle: {\n entry: 'enableDragging',\n on: {\n GRAB_OPERATION: {\n target: 'editing',\n actions: [\n 'startCircuitEdit',\n 'setOperationActive',\n 'addDocumentCursorGrabbingStyle',\n 'maybeAppendCircuitWire',\n 'setSnapTargets'\n ]\n },\n CLICK_STEP: {\n target: 'idle',\n actions: ['setBreakpoint']\n },\n MOUSE_ENTER_STEP: {\n target: 'idle',\n actions: ['activateStep']\n },\n MOUSE_LEAVE_STEP: {\n target: 'idle',\n actions: ['deactivateStep']\n },\n MOUSE_LEAVE_CIRCUIT: {\n target: 'idle',\n actions: ['deactivateAllSteps']\n },\n SHOW_OPERATION_MENU: {\n target: 'idle',\n actions: ['showOperationMenu']\n },\n SHOW_OPERATION_INSPECTOR_IF: {\n target: 'idle',\n actions: ['showOperationInspectorIf']\n },\n SHOW_OPERATION_INSPECTOR_ANGLE: {\n target: 'idle',\n actions: ['showOperationInspectorAngle']\n },\n SHOW_OPERATION_INSPECTOR_FLAG: {\n target: 'idle',\n actions: ['showOperationInspectorFlag']\n },\n SET_OPERATION_IF: {\n target: 'idle',\n actions: ['setOperationIf']\n },\n SET_OPERATION_ANGLE: {\n target: 'idle',\n actions: ['setOperationAngle']\n },\n SET_OPERATION_FLAG: {\n target: 'idle',\n actions: ['setOperationFlag']\n }\n }\n },\n editing: {\n on: {\n OPERATION_IN_SNAP_RANGE: {\n target: 'editing',\n actions: ['snapOperationIntoDropzone']\n },\n SNAP_STEP: {\n target: 'editing',\n actions: ['activateStep']\n },\n UNSNAP_STEP: {\n target: 'editing',\n actions: ['deactivateStep']\n },\n UNGRAB_OPERATION: {\n target: 'idle',\n actions: ['maybeRemoveLastEmptyWires', 'removeDocumentCursorGrabbingStyle', 'endCircuitEdit']\n },\n END_DRAGGING_OPERATION: {\n target: 'idle',\n actions: [\n 'maybeRemoveLastEmptyWires',\n 'removeDocumentCursorGrabbingStyle',\n 'endCircuitEdit',\n 'maybeDisableAllInspectorPanes'\n ]\n }\n }\n }\n }\n }\n }\n },\n {\n guards: {\n isIdle: () => {\n return !this.circuit.editing\n },\n isEditing: () => {\n return this.circuit.editing\n }\n },\n actions: {\n enableDragging: () => {\n this.circuit.draggable = true\n },\n startCircuitEdit: () => {\n this.circuit.editing = true\n },\n endCircuitEdit: () => {\n this.circuit.editing = false\n },\n setOperationActive: (_context, event) => {\n if (event.type !== 'GRAB_OPERATION') return\n\n this.circuit.activateOperation(event.operation)\n },\n snapOperationIntoDropzone: (_context, event) => {\n if (event.type !== 'OPERATION_IN_SNAP_RANGE') return\n\n const operation = event.operation\n const snapTarget = this.circuit.snapTargetAt(event.x, event.y)\n\n operation.snapped = true\n\n if (snapTarget.dropzone === null) {\n const stepIndex = snapTarget.stepIndex\n Util.notNull(stepIndex)\n\n const newStep = this.circuit.addShadowStepAfter(stepIndex)\n const newDropzone = newStep.dropzones[snapTarget.wireIndex]\n Util.notNull(newDropzone)\n\n // TODO: dropzone.operationName = ... etc. \u3092 dropzone \u5074\u3067\u3084\u308B\n newDropzone.append(operation)\n newDropzone.operationName = operation.tagName.toLocaleLowerCase()\n\n // TODO: addShadowStepAfter \u306E\u5F8C\u3067\u81EA\u52D5\u7684\u306B\u547C\u3076\n this.circuit.updateSnapTargets(newStep.dropzones)\n } else {\n snapTarget.dropzone.append(operation)\n }\n },\n addDocumentCursorGrabbingStyle: () => {\n document.documentElement.setAttribute('data-grabbing', '')\n },\n removeDocumentCursorGrabbingStyle: () => {\n document.documentElement.removeAttribute('data-grabbing')\n },\n maybeAppendCircuitWire: () => {\n if (this.circuit.wireCount < this.circuit.maxWireCount) {\n this.circuit.appendWire()\n }\n },\n maybeRemoveLastEmptyWires: () => {\n this.circuit.removeLastEmptyWires()\n },\n resizeCircuit: () => {\n this.circuit.resize()\n },\n setSnapTargets: (_context, event) => {\n if (event.type !== 'GRAB_OPERATION') return\n\n this.circuit.setSnapTargets(event.operation)\n },\n setBreakpoint: (_context, event) => {\n if (event.type !== 'CLICK_STEP') return\n\n this.circuit.setBreakpoint(event.step)\n },\n activateStep: (_context, event) => {\n if (event.type !== 'MOUSE_ENTER_STEP' && event.type !== 'SNAP_STEP') return\n\n event.step.active = true\n },\n deactivateStep: (_context, event) => {\n if (event.type !== 'MOUSE_LEAVE_STEP' && event.type !== 'UNSNAP_STEP') return\n\n event.step.active = false\n },\n deactivateAllSteps: () => {\n this.circuit.deactivateAllSteps()\n },\n maybeDisableAllInspectorPanes: (_context, event) => {\n if (event.type !== 'END_DRAGGING_OPERATION') return\n\n const operation = event.operation\n if (operation.snapped) return\n if (!this.inspectorButton.isInspectorShown) return\n\n this.inspectorButton.inspector.disableAllPanes()\n },\n initOperationMenu: (_context, event) => {\n if (event.type !== 'DROP_OPERATION') return\n\n const operation = event.operation\n if (isMenuable(operation)) operation.initMenu()\n },\n showOperationMenu: (_context, event) => {\n if (event.type !== 'SHOW_OPERATION_MENU') return\n if (this.inspectorButton.isInspectorShown) return\n\n event.operation.showMenu()\n },\n showOperationInspectorIf: (_context, event) => {\n if (event.type !== 'SHOW_OPERATION_INSPECTOR_IF') return\n\n this.inspectorButton.showIfInspector(event.operation)\n },\n showOperationInspectorAngle: (_context, event) => {\n if (event.type !== 'SHOW_OPERATION_INSPECTOR_ANGLE') return\n\n this.inspectorButton.showAngleInspector(event.operation)\n },\n showOperationInspectorFlag: (_context, event) => {\n if (event.type !== 'SHOW_OPERATION_INSPECTOR_FLAG') return\n\n this.inspectorButton.showFlagInspector(event.operation)\n },\n setOperationIf: (_context, event) => {\n if (event.type !== 'SET_OPERATION_IF') return\n\n event.operation.if = event.if\n },\n setOperationAngle: (_context, event) => {\n if (event.type !== 'SET_OPERATION_ANGLE') return\n\n event.operation.angle = event.angle\n event.operation.reducedAngle = event.reducedAngle\n },\n setOperationFlag: (_context, event) => {\n if (event.type !== 'SET_OPERATION_FLAG') return\n\n event.operation.flag = event.flag\n },\n maybeUpdateOperationInspector: (_context, event) => {\n if (event.type !== 'ACTIVATE_OPERATION') return\n\n const operation = event.operation\n if (this.inspectorButton.isInspectorShown) {\n this.inspectorButton.showInspector(operation)\n }\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private circuitEditorService!: Interpreter\n\n connectedCallback(): void {\n this.circuitEditorService = interpret(this.circuitEditorMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`circuit-editor: ${describe(state.value)}`)\n }\n })\n .start()\n\n this.attachShadow({mode: 'open'})\n this.update()\n\n document.addEventListener('click', this.maybeDeactivateOperation.bind(this))\n this.addEventListener('operation-active', this.activateOperation)\n this.addEventListener('operation-show-menu', this.showOperationMenu)\n this.addEventListener('operation-menu-if', this.showOperationInspectorIf)\n this.addEventListener('operation-menu-angle', this.showOperationInspectorAngle)\n this.addEventListener('operation-menu-flag', this.showOperationInspectorFlag)\n this.addEventListener('operation-inspector-if-change', this.setOperationIf)\n this.addEventListener('operation-inspector-angle-change', this.setOperationAngle)\n this.addEventListener('operation-inspector-angle-update', this.setOperationAngle)\n this.addEventListener('operation-inspector-flag-change', this.setOperationFlag)\n this.addEventListener('operation-grab', this.grabOperation)\n this.addEventListener('operation-ungrab', this.ungrabOperation)\n this.addEventListener('operation-end-dragging', this.endDraggingOperation)\n this.addEventListener('operation-drop', this.dropOperation)\n this.addEventListener('operation-delete', this.deleteOperation)\n this.addEventListener('circuit-step-click', this.clickStep)\n this.addEventListener('circuit-step-snap', this.snapStep)\n this.addEventListener('circuit-step-unsnap', this.unsnapStep)\n this.addEventListener('operation-in-snap-range', this.operationInSnapRange)\n this.addEventListener('circuit-step-mouseenter', this.mouseEnterStep)\n this.addEventListener('circuit-step-mouseleave', this.mouseLeaveStep)\n this.addEventListener('quantum-circuit-mouseleave', this.mouseLeaveCircuit)\n\n this.addEventListener('quantum-circuit-init', () => {\n for (const each of this.circuit.operations) {\n each.initMenu()\n }\n })\n }\n\n update(): void {\n render(html``, this.shadowRoot!)\n }\n\n private get activeOperation(): Operation | null {\n return this.circuit.querySelector('circuit-dropzone > [data-active]')\n }\n\n private maybeDeactivateOperation(event: Event): void {\n const clickedEl = event.target as HTMLElement\n\n if (\n !isOperation(clickedEl) &&\n !this.inspectorButton.popup.popper.contains(clickedEl) &&\n !this.inspectorButton.popup.reference.contains(clickedEl) &&\n this.activeOperation !== null\n ) {\n this.activeOperation.active = false\n }\n }\n\n private activateOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'ACTIVATE_OPERATION', operation})\n }\n\n private showOperationMenu(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'SHOW_OPERATION_MENU', operation})\n }\n\n private showOperationInspectorIf(event: Event): void {\n const operation = event.target\n if (!isIfable(operation)) throw new Error(`${operation} isn't an Ifable Operation.`)\n\n this.circuitEditorService.send({type: 'SHOW_OPERATION_INSPECTOR_IF', operation})\n }\n\n private showOperationInspectorAngle(event: Event): void {\n const operation = event.target\n if (!isAngleable(operation)) throw new Error(`${operation} isn't an Angleable Operation.`)\n\n this.circuitEditorService.send({type: 'SHOW_OPERATION_INSPECTOR_ANGLE', operation})\n }\n\n private showOperationInspectorFlag(event: Event): void {\n const operation = event.target\n if (!isFlaggable(operation)) throw new Error(`${operation} isn't a Flaggable Operation.`)\n\n this.circuitEditorService.send({type: 'SHOW_OPERATION_INSPECTOR_FLAG', operation})\n }\n\n private setOperationIf(event: Event): void {\n const inspector = event.target as OperationInspectorElement\n const operation = this.activeOperation\n if (!isIfable(operation)) throw new Error('[data-if] not found.')\n\n this.circuitEditorService.send({type: 'SET_OPERATION_IF', operation, if: inspector.if})\n }\n\n private setOperationAngle(event: Event): void {\n const inspector = event.target as OperationInspectorElement\n const operation = this.activeOperation\n Util.notNull(operation)\n if (!isAngleable(operation)) throw new Error(`${operation.outerHTML}: [data-angle] not found.`)\n\n this.circuitEditorService.send({\n type: 'SET_OPERATION_ANGLE',\n operation,\n angle: inspector.angle,\n reducedAngle: inspector.reduceAngleFraction ? inspector.reducedAngle : ''\n })\n }\n\n private setOperationFlag(event: Event): void {\n const inspector = event.target as OperationInspectorElement\n const operation = this.activeOperation\n if (!isFlaggable(operation)) throw new Error('[data-flag] not found.')\n\n this.circuitEditorService.send({type: 'SET_OPERATION_FLAG', operation, flag: inspector.flag})\n }\n\n private grabOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'GRAB_OPERATION', operation})\n }\n\n private ungrabOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'UNGRAB_OPERATION', operation})\n }\n\n private endDraggingOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'END_DRAGGING_OPERATION', operation})\n }\n\n private dropOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n this.circuitEditorService.send({type: 'DROP_OPERATION', operation})\n }\n\n private deleteOperation(): void {\n this.circuitEditorService.send({type: 'DELETE_OPERATION'})\n }\n\n private clickStep(event: Event): void {\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n this.circuitEditorService.send({type: 'CLICK_STEP', step})\n }\n\n private snapStep(event: Event): void {\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n this.circuitEditorService.send({type: 'SNAP_STEP', step})\n }\n\n private unsnapStep(event: Event): void {\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n this.circuitEditorService.send({type: 'UNSNAP_STEP', step})\n }\n\n private operationInSnapRange(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new Error(`${operation} must be an Operation.`)\n\n const customEvent = event as CustomEvent\n const snapTargetInfo = customEvent.detail.snapTargetInfo\n const x = snapTargetInfo.x\n const y = snapTargetInfo.y\n this.circuitEditorService.send({type: 'OPERATION_IN_SNAP_RANGE', operation, x, y})\n }\n\n private mouseEnterStep(event: Event): void {\n if (this.circuit.editing) return\n\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n this.circuitEditorService.send({type: 'MOUSE_ENTER_STEP', step})\n }\n\n private mouseLeaveStep(event: Event): void {\n if (this.circuit.editing) return\n\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n this.circuitEditorService.send({type: 'MOUSE_LEAVE_STEP', step})\n }\n\n private mouseLeaveCircuit(): void {\n this.circuitEditorService.send({type: 'MOUSE_LEAVE_CIRCUIT'})\n }\n}\n\ncontroller(CircuitEditorElement)\n", "import {Interpreter, createMachine, interpret} from 'xstate'\nimport {Operation, isOperation} from './operation'\nimport {attr, controller} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {isHelpable} from './mixin'\n\ntype PaletteDropzoneContext = Record\ntype PaletteDropzoneEvent =\n | {type: 'GRAB_OPERATION'; operation: Operation}\n | {type: 'DELETE_OPERATION'; operation: Operation}\n\nexport class PaletteDropzoneElement extends HTMLElement {\n @attr debug = false\n\n private paletteDropzoneMachine = createMachine(\n {\n id: 'palette-dropzone',\n initial: 'idle',\n states: {\n idle: {\n on: {\n GRAB_OPERATION: {\n target: 'idle',\n actions: ['newOperation']\n },\n DELETE_OPERATION: {\n target: 'idle',\n actions: ['deleteOperation']\n }\n }\n }\n }\n },\n {\n actions: {\n newOperation: (_context, event) => {\n if (event.type !== 'GRAB_OPERATION') return\n\n const operation = event.operation\n const newOperation = operation.cloneNode(false)\n if (!isOperation(newOperation)) throw new TypeError(`${newOperation} isn't an operation.`)\n\n if (isHelpable(operation)) operation.disableHelp()\n this.prepend(newOperation)\n this.initOperation(newOperation)\n },\n deleteOperation: (_context, event) => {\n if (event.type !== 'DELETE_OPERATION') return\n\n this.removeChild(event.operation)\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private paletteDropzoneService!: Interpreter\n\n connectedCallback(): void {\n this.paletteDropzoneService = interpret(this.paletteDropzoneMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`palette-dropzone: ${state.value}`)\n }\n })\n .start()\n\n this.attachShadow({mode: 'open'})\n this.update()\n\n this.initOperation(this.operation)\n this.addEventListener('operation-grab', this.grabOperation)\n this.addEventListener('operation-delete', this.deleteOperation)\n }\n\n update(): void {\n render(\n html`\n\n `,\n this.shadowRoot!\n )\n }\n\n private initOperation(operation: Operation): void {\n operation.draggable = true\n operation.snapped = true\n operation.grabbed = false\n if (isHelpable(operation)) operation.initHelp()\n }\n\n private get operation(): Operation {\n const children = Array.from(this.children)\n const operations = children.filter((each): each is Operation => isOperation(each))\n\n if (operations.length === 0) {\n throw new Error('palette-dropzone must have an operation.')\n } else if (operations.length === 1) {\n return operations[0]\n } else {\n throw new Error('palette-dropzone cannot hold multiple operations.')\n }\n }\n\n private grabOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new TypeError(`${operation} isn't an operation.`)\n\n this.paletteDropzoneService.send({type: 'GRAB_OPERATION', operation})\n }\n\n private deleteOperation(event: Event): void {\n const operation = event.target\n if (!isOperation(operation)) throw new TypeError(`${operation} isn't an operation.`)\n\n this.paletteDropzoneService.send({type: 'DELETE_OPERATION', operation})\n }\n}\n\ncontroller(PaletteDropzoneElement)\n", "import {CircuitDropzoneElement, isCircuitDropzoneElement} from './circuit-dropzone-element'\nimport {CircuitStepElement, isCircuitStepElement} from './circuit-step-element'\nimport {HGateElement, HGateElementProps} from './h-gate-element'\nimport {Interpreter, createMachine, interpret} from 'xstate'\nimport {PhaseGateElement, PhaseGateElementProps} from './phase-gate-element'\nimport {RnotGateElement, RnotGateElementProps} from './rnot-gate-element'\nimport {RxGateElement, RxGateElementProps} from './rx-gate-element'\nimport {RyGateElement, RyGateElementProps} from './ry-gate-element'\nimport {RzGateElement, RzGateElementProps} from './rz-gate-element'\nimport {SerializedCircuitStep, Util} from '@qni/common'\nimport {TGateElement, TGateElementProps} from './t-gate-element'\nimport {XGateElement, XGateElementProps} from './x-gate-element'\nimport {YGateElement, YGateElementProps} from './y-gate-element'\nimport {ZGateElement, ZGateElementProps} from './z-gate-element'\nimport {attr, controller, targets} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {BlochDisplayElement} from './bloch-display-element'\nimport {CircuitBlockElement} from './circuit-block-element'\nimport {ControlGateElement} from './control-gate-element'\nimport {MeasurementGateElement} from './measurement-gate-element'\nimport {Operation} from './operation'\nimport {SwapGateElement} from './swap-gate-element'\nimport {WriteGateElement} from './write-gate-element'\n\nexport type SnapTarget = {\n dropzone: CircuitDropzoneElement | null\n stepIndex: number | null\n wireIndex: number\n}\n\ntype QuantumCircuitContext = Record\ntype QuantumCircuitEvent = {type: 'EDIT'} | {type: 'EDIT_DONE'}\n\nexport class QuantumCircuitElement extends HTMLElement {\n @attr minStepCount = 1\n @attr minWireCount = 1\n @attr maxWireCount = 10\n @attr editing = false\n @attr updateUrl = false\n @attr json = ''\n @attr circuitTitle = ''\n @attr debug = false\n\n // Controlled-H\n @attr chDisabled = false\n @attr chMaxControlGates = 0\n @attr chMaxTargetGates = 0\n // Controlled-NOT\n @attr cnotDisabled = false\n @attr cnotMaxControlGates = 0\n @attr cnotMaxTargetGates = 0\n // Controlled-Y\n @attr cyDisabled = false\n @attr cyMaxControlGates = 0\n @attr cyMaxTargetGates = 0\n // Controlled-Z\n @attr czDisabled = false\n @attr czMaxControlGates = 0\n @attr czMaxTargetGates = 0\n // Controlled-Phase\n @attr cphaseDisabled = false\n @attr cphaseMaxControlGates = 0\n @attr cphaseMaxTargetGates = 0\n // Controlled-T\n @attr ctDisabled = false\n @attr ctMaxControlGates = 0\n @attr ctMaxTargetGates = 0\n // Controlled-\u221AX\n @attr crnotDisabled = false\n @attr crnotMaxControlGates = 0\n @attr crnotMaxTargetGates = 0\n // Controlled-Rx\n @attr crxDisabled = false\n @attr crxMaxControlGates = 0\n @attr crxMaxTargetGates = 0\n // Controlled-Ry\n @attr cryDisabled = false\n @attr cryMaxControlGates = 0\n @attr cryMaxTargetGates = 0\n // Controlled-Rz\n @attr crzDisabled = false\n @attr crzMaxControlGates = 0\n @attr crzMaxTargetGates = 0\n // Controlled-Swap\n @attr cswapDisabled = false\n @attr cswapMaxControlGates = 0\n // Swap\n @attr swapDisabled = false\n // CZ\n @attr controlControlDisabled = false\n @attr controlControlMaxTargetGates = 0\n // CPHASE\n @attr phasePhaseDisabled = false\n @attr phasePhaseMaxTargetGates = 0\n\n @targets blocks!: CircuitBlockElement[]\n\n private quantumCircuitMachine = createMachine({\n id: 'quantum-circuit',\n initial: 'idle',\n states: {\n idle: {\n on: {\n EDIT: {target: 'editing'}\n }\n },\n editing: {\n on: {\n EDIT_DONE: {target: 'idle'}\n }\n }\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private quantumCircuitService!: Interpreter\n\n private snapTargets!: {\n [i: number]: {\n [j: number]: SnapTarget\n }\n }\n\n get wireCount(): number {\n return this.stepAt(0).wireCount\n }\n\n get activeStepIndex(): number | null {\n const step = this.activeStep\n if (step === null) return null\n\n return this.fetchStepIndex(step)\n }\n\n get activeStep(): CircuitStepElement | null {\n const step = this.steps.find(each => each.active)\n\n return step || null\n }\n\n fetchStepIndex(step: CircuitStepElement): number {\n const index = this.steps.indexOf(step)\n Util.need(index !== -1, `circuit-step index of ${step} not found.`)\n\n return index\n }\n\n get steps(): CircuitStepElement[] {\n return Array.from(this.querySelectorAll('circuit-step'))\n }\n\n private get emptySteps(): CircuitStepElement[] {\n return this.steps.filter(each => each.isEmpty)\n }\n\n private get nonEmptySteps(): CircuitStepElement[] {\n return this.steps.filter(each => !each.isEmpty)\n }\n\n private get largestStep(): CircuitStepElement | null {\n let step = null\n let max = 0\n\n for (const each of this.steps) {\n if (each.wireCount > 0 && each.wireCount > max) {\n step = each\n max = each.wireCount\n }\n }\n\n return step\n }\n\n private appendMinimumSteps(): void {\n const nsteps = this.minStepCount - this.steps.length\n\n for (let i = 0; i < nsteps; i++) {\n this.append(new CircuitStepElement())\n }\n }\n\n /**\n * @category Circuit Step\n */\n stepAt(stepIndex: number): CircuitStepElement {\n const step = this.steps[stepIndex]\n Util.notNull(step)\n\n return step\n }\n\n /**\n * @category Circuit Step\n */\n addShadowStepAfter(stepIndex: number): CircuitStepElement {\n const newStep = new CircuitStepElement()\n newStep.shadow = true\n for (let i = 0; i < this.wireCount; i++) {\n newStep.appendDropzone()\n }\n\n if (stepIndex === -1) {\n this.prepend(newStep)\n } else {\n const step = this.steps[stepIndex]\n Util.notNull(step.parentElement)\n\n step.parentElement.insertBefore(newStep, step.nextSibling)\n }\n\n return newStep\n }\n\n /**\n * @category Circuit Step\n */\n activateStep(step: CircuitStepElement): void {\n step.active = true\n }\n\n /**\n * @category Circuit Step\n */\n deactivateAllSteps(): void {\n for (const each of this.steps) {\n each.active = false\n }\n }\n\n /**\n * @category Circuit Step\n */\n setBreakpoint(step: CircuitStepElement): void {\n for (const each of this.steps) {\n each.breakpoint = false\n }\n step.breakpoint = true\n }\n\n get breakpoint(): CircuitStepElement | null {\n const step = this.steps.find(each => each.breakpoint)\n\n return step || null\n }\n\n private get dropzones(): CircuitDropzoneElement[] {\n return Array.from(this.querySelectorAll('circuit-dropzone')) as CircuitDropzoneElement[]\n }\n\n get operations(): Operation[] {\n return this.dropzones\n .map(each => each.operation)\n .filter((each: Operation | null) => each !== null) as Operation[]\n }\n\n private get isVertical(): boolean {\n return window.getComputedStyle(this).flexDirection === 'column'\n }\n\n connectedCallback(): void {\n this.quantumCircuitService = interpret(this.quantumCircuitMachine)\n .onTransition(state => {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(`quantum-circuit: ${state.value}`)\n }\n })\n .start()\n\n this.attachShadow({mode: 'open'})\n this.update()\n\n if (this.hasAttribute('data-update-url')) {\n const json = this.urlJson\n this.loadFromJson(json)\n }\n\n this.appendMinimumSteps()\n this.appendMinimumWires()\n this.updateAllWires()\n\n this.addEventListener('mouseleave', this.dispatchMouseleaveEvent)\n this.addEventListener('circuit-step-update', this.updateStep)\n this.addEventListener('circuit-step-snap', this.updateStep)\n this.addEventListener('circuit-step-snap', this.updateChangedWire)\n this.addEventListener('circuit-step-unsnap', this.updateStep)\n this.addEventListener('circuit-step-unsnap', this.updateChangedWire)\n this.addEventListener('circuit-step-delete-operation', this.updateStep)\n this.addEventListener('circuit-step-delete-operation', this.updateChangedWire)\n\n this.dispatchEvent(new Event('quantum-circuit-init', {bubbles: true}))\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return\n\n if (name === 'data-editing') {\n if (newValue !== null) {\n this.quantumCircuitService.send({type: 'EDIT'})\n } else {\n this.quantumCircuitService.send({type: 'EDIT_DONE'})\n }\n }\n\n if (name === 'data-json' && newValue !== '') {\n this.loadFromJson(newValue)\n }\n }\n\n private update(): void {\n render(html``, this.shadowRoot!)\n }\n\n private updateStep(event: Event): void {\n const step = event.target as CircuitStepElement\n this.updateStepOperationAttributes(step)\n }\n\n private updateStepOperationAttributes(step: CircuitStepElement): void {\n step.updateOperationAttributes({\n // Controlled-H\n disableCh: this.chDisabled,\n maxChControlGates: this.chMaxControlGates,\n maxChTargetGates: this.chMaxTargetGates,\n // Controlled-NOT\n disableCnot: this.cnotDisabled,\n maxCnotControlGates: this.cnotMaxControlGates,\n maxCnotTargetGates: this.cnotMaxTargetGates,\n // Controlled-Y\n disableCy: this.cyDisabled,\n maxCyControlGates: this.cyMaxControlGates,\n maxCyTargetGates: this.cyMaxTargetGates,\n // Controlled-Z\n disableCz: this.czDisabled,\n maxCzControlGates: this.czMaxControlGates,\n maxCzTargetGates: this.czMaxTargetGates,\n // Controlled-Phase\n disableCphase: this.cphaseDisabled,\n maxCphaseControlGates: this.cphaseMaxControlGates,\n maxCphaseTargetGates: this.cphaseMaxTargetGates,\n // Controlled-T\n disableCt: this.ctDisabled,\n maxCtControlGates: this.ctMaxControlGates,\n maxCtTargetGates: this.ctMaxTargetGates,\n // Controlled-\u221AX\n disableCrnot: this.crnotDisabled,\n maxCrnotControlGates: this.crnotMaxControlGates,\n maxCrnotTargetGates: this.crnotMaxTargetGates,\n // Controlled-Rx\n disableCrx: this.crxDisabled,\n maxCrxControlGates: this.crxMaxControlGates,\n maxCrxTargetGates: this.crxMaxTargetGates,\n // Controlled-Rx\n disableCry: this.cryDisabled,\n maxCryControlGates: this.cryMaxControlGates,\n maxCryTargetGates: this.cryMaxTargetGates,\n // Controlled-Rx\n disableCrz: this.crzDisabled,\n maxCrzControlGates: this.crzMaxControlGates,\n maxCrzTargetGates: this.crzMaxTargetGates,\n // Controlled-Swap\n disableCswap: this.cswapDisabled,\n maxCswapControlGates: this.cswapMaxControlGates,\n // Swap\n disableSwap: this.swapDisabled,\n // CZ\n disableControlControl: this.controlControlDisabled,\n maxControlControlTargetGates: this.controlControlMaxTargetGates,\n // CPHASE\n disablePhasePhase: this.phasePhaseDisabled,\n maxPhasePhaseTargetGates: this.phasePhaseMaxTargetGates\n })\n }\n\n private dispatchMouseleaveEvent(): void {\n this.dispatchEvent(new Event('quantum-circuit-mouseleave', {bubbles: true}))\n }\n\n resize(): void {\n this.removeEmptySteps()\n this.appendMinimumSteps()\n this.appendMinimumWires()\n this.removeLastEmptyWires()\n this.updateAllWires()\n }\n\n /**\n * @category Circuit Operation\n */\n h(...args: number[] | [HGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const h = new HGateElement()\n if (disabled) h.disable()\n return h\n }, ...targetBits)\n\n this.resize()\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n x(...args: number[] | [XGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const x = new XGateElement()\n if (disabled) x.disable()\n return x\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n y(...args: number[] | [YGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const y = new YGateElement()\n if (disabled) y.disable()\n return y\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n z(...args: number[] | [ZGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const z = new ZGateElement()\n if (disabled) z.disable()\n return z\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n phase(...args: number[] | [string, ...number[]] | [PhaseGateElementProps]): QuantumCircuitElement {\n let angle = ''\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else if (typeof args[0] === 'string') {\n angle = args[0]\n targetBits = args.slice(1) as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n const step = this.applyOperationToTargets(() => {\n const phase = new PhaseGateElement()\n phase.angle = angle\n if (disabled) phase.disable()\n return phase\n }, ...targetBits)\n if (targetBits.length > 1) this.updateStepOperationAttributes(step)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n t(...args: number[] | [TGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const t = new TGateElement()\n if (disabled) t.disable()\n return t\n }, ...targetBits)\n\n this.resize()\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n rnot(...args: number[] | [RnotGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const rnot = new RnotGateElement()\n if (disabled) rnot.disable()\n return rnot\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n rx(...args: number[] | [RxGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const rx = new RxGateElement()\n if (disabled) rx.disable()\n return rx\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n ry(...args: number[] | [RyGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const ry = new RyGateElement()\n if (disabled) ry.disable()\n return ry\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n rz(...args: number[] | [RzGateElementProps]): QuantumCircuitElement {\n let targetBits: number[]\n let disabled: boolean | undefined\n\n if (typeof args[0] === 'number') {\n targetBits = args as number[]\n } else {\n const props = args[0]\n targetBits = props.targets\n disabled = props.disabled\n }\n\n this.applyOperationToTargets(() => {\n const rz = new RzGateElement()\n if (disabled) rz.disable()\n return rz\n }, ...targetBits)\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n swap(...targetBits: number[]): QuantumCircuitElement {\n const step = this.applyOperationToTargets(() => new SwapGateElement(), ...targetBits)\n this.updateStepOperationAttributes(step)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n control(...targetBits: number[]): QuantumCircuitElement {\n const step = this.applyOperationToTargets(() => new ControlGateElement(), ...targetBits)\n this.updateStepOperationAttributes(step)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n bloch(...targetBits: number[]): QuantumCircuitElement {\n this.applyOperationToTargets(() => new BlochDisplayElement(), ...targetBits)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n write(value: '0' | '1', ...targetBits: number[]): QuantumCircuitElement {\n this.applyOperationToTargets(() => {\n const writeGate = new WriteGateElement()\n writeGate.value = value\n return writeGate\n }, ...targetBits)\n\n this.resize()\n\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n measure(...targetBits: number[]): QuantumCircuitElement {\n this.applyOperationToTargets(() => new MeasurementGateElement(), ...targetBits)\n this.resize()\n return this\n }\n\n private applyOperationToTargets(constructor: () => Operation, ...targetBits: number[]): CircuitStepElement {\n const nbit = Math.max(...targetBits) + 1\n const step = this.appendStepWithDropzones(nbit)\n\n for (const each of targetBits) {\n const operation = constructor()\n step.dropzoneAt(each).put(operation)\n }\n\n return step\n }\n\n /**\n * @category Circuit Operation\n */\n ch(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(HGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cnot(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(XGateElement, control, target)\n this.resize()\n return this\n }\n cx = this.cnot\n\n /**\n * @category Circuit Operation\n */\n cy(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(YGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cz(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(ZGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cphase(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(PhaseGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n ct(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(TGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n crnot(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(RnotGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n crx(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(RxGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cry(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(RyGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n crz(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(RzGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cswap(control: number | number[], target: number | number[]): QuantumCircuitElement {\n this.controlledU(SwapGateElement, control, target)\n return this\n }\n\n /**\n * @category Circuit Operation\n */\n cc(...targetBits: number[]): QuantumCircuitElement {\n const nbit = Math.max(...targetBits) + 1\n const step = this.appendStepWithDropzones(nbit)\n\n for (const each of targetBits) {\n step.dropzoneAt(each).put(new ControlGateElement())\n }\n\n this.appendMinimumWires()\n this.updateStepOperationAttributes(step)\n\n return this\n }\n\n private controlledU(\n constructor:\n | typeof HGateElement\n | typeof XGateElement\n | typeof YGateElement\n | typeof ZGateElement\n | typeof PhaseGateElement\n | typeof TGateElement\n | typeof RnotGateElement\n | typeof RxGateElement\n | typeof RyGateElement\n | typeof RzGateElement\n | typeof SwapGateElement,\n control: number | number[],\n target: number | number[]\n ): void {\n const controlBits = ([] as number[]).concat(...[control])\n const targetBits = ([] as number[]).concat(...[target])\n\n const bits = controlBits.concat(targetBits)\n const nbit = Math.max(...bits) + 1\n const step = this.appendStepWithDropzones(nbit)\n\n for (const each of controlBits) {\n step.dropzoneAt(each).put(new ControlGateElement())\n }\n for (const each of targetBits) {\n step.dropzoneAt(each).put(new constructor())\n }\n\n this.appendMinimumWires()\n this.updateStepOperationAttributes(step)\n }\n\n private appendStep(): CircuitStepElement {\n // const step = new CircuitStepElement()\n\n // this.append(step)\n // return step\n\n const el = new CircuitStepElement()\n\n const lastBlock = this.blocks.slice(-1)[0] || null\n if (lastBlock === null || lastBlock.finalized) {\n this.append(el)\n } else {\n lastBlock.append(el)\n }\n\n return el\n }\n\n private appendStepWithDropzones(nbit: number): CircuitStepElement {\n const step = new CircuitStepElement()\n this.append(step)\n\n for (let i = 0; i < nbit; i++) {\n const dropzone = new CircuitDropzoneElement()\n step.append(dropzone)\n }\n\n return step\n }\n\n private updateAllWires(): void {\n const firstStep = this.steps[0]\n if (firstStep === undefined) return\n\n const wireCount = firstStep.dropzones.length\n for (let i = 0; i < wireCount; i++) {\n this.updateWire(i)\n }\n }\n\n activateOperation(operation: Operation): void {\n for (const each of this.operations) {\n each.active = false\n }\n operation.active = true\n }\n\n appendWire(): void {\n for (const each of this.steps) {\n each.appendDropzone()\n }\n }\n\n removeLastEmptyWires(): void {\n while (this.steps.every(each => each.wireCount > this.minWireCount && !each.lastDropzone.occupied)) {\n for (const each of this.steps) {\n each.lastDropzone.remove()\n }\n }\n }\n\n private removeEmptySteps(): void {\n for (const each of this.emptySteps) {\n each.remove()\n }\n }\n\n private loadFromJson(json: string): void {\n console.log('loadFromJson')\n\n this.innerHTML = ''\n // for (const each of this.steps) {\n // each.remove()\n // }\n\n // let json\n let circuitBlock = null\n\n // if (this.hasAttribute('data-update-url')) {\n // json = this.urlJson\n // } else {\n // json = this.json\n // }\n\n if (json === '') {\n if (this.hasAttribute('data-update-url')) {\n this.resize()\n }\n return\n }\n\n const circuit = JSON.parse(json)\n this.circuitTitle = (circuit.title || '').trim()\n\n for (const step of circuit.cols) {\n const newStep = this.appendStep()\n for (const operation of step) {\n switch (true) {\n case /^\\|0>$/.test(operation): {\n const writeGate = new WriteGateElement()\n writeGate.hoverable = true\n writeGate.value = '0'\n newStep.appendOperation(writeGate)\n break\n }\n case /^\\|1>$/.test(operation): {\n const writeGate = new WriteGateElement()\n writeGate.hoverable = true\n writeGate.value = '1'\n newStep.appendOperation(writeGate)\n break\n }\n case /^H/.test(operation): {\n const hGate = new HGateElement()\n hGate.hoverable = true\n hGate.if = this.ifVariable(operation.slice(1))\n newStep.appendOperation(hGate)\n break\n }\n case /^X$/.test(operation) || /^X<(.+)$/.test(operation): {\n const xGate = new XGateElement()\n xGate.hoverable = true\n xGate.if = operation.slice(2).trim()\n newStep.appendOperation(xGate)\n break\n }\n case /^Y/.test(operation): {\n const yGate = new YGateElement()\n yGate.hoverable = true\n yGate.if = this.ifVariable(operation.slice(1))\n newStep.appendOperation(yGate)\n break\n }\n case /^Z/.test(operation): {\n const zGate = new ZGateElement()\n zGate.hoverable = true\n zGate.if = this.ifVariable(operation.slice(1))\n newStep.appendOperation(zGate)\n break\n }\n case /^P/.test(operation): {\n const phaseGate = new PhaseGateElement()\n phaseGate.hoverable = true\n phaseGate.angle = this.angleParameter(operation.slice(1))\n newStep.appendOperation(phaseGate)\n break\n }\n case /^T/.test(operation): {\n const tGate = new TGateElement()\n tGate.hoverable = true\n tGate.if = this.ifVariable(operation.slice(1))\n newStep.appendOperation(tGate)\n break\n }\n case /^X\\^\u00BD/.test(operation): {\n const rnotGate = new RnotGateElement()\n rnotGate.hoverable = true\n rnotGate.if = this.ifVariable(operation.slice(3))\n newStep.appendOperation(rnotGate)\n break\n }\n case /^Rx/.test(operation): {\n const rxGate = new RxGateElement()\n rxGate.hoverable = true\n rxGate.angle = this.angleParameter(operation.slice(2))\n newStep.appendOperation(rxGate)\n break\n }\n case /^Ry/.test(operation): {\n const ryGate = new RyGateElement()\n ryGate.hoverable = true\n ryGate.angle = this.angleParameter(operation.slice(2))\n newStep.appendOperation(ryGate)\n break\n }\n case /^Rz/.test(operation): {\n const rzGate = new RzGateElement()\n rzGate.hoverable = true\n rzGate.angle = this.angleParameter(operation.slice(2))\n newStep.appendOperation(rzGate)\n break\n }\n case /^Swap$/.test(operation): {\n const swapGate = new SwapGateElement()\n swapGate.hoverable = true\n newStep.appendOperation(swapGate)\n break\n }\n case /^\u2022$/.test(operation): {\n const controlGate = new ControlGateElement()\n controlGate.hoverable = true\n newStep.appendOperation(controlGate)\n break\n }\n case /^Bloch$/.test(operation): {\n const blochDisplay = new BlochDisplayElement()\n blochDisplay.hoverable = true\n newStep.appendOperation(blochDisplay)\n break\n }\n case /^Measure/.test(operation): {\n const measurementGate = new MeasurementGateElement()\n const flag = ((/^>(.+)$/.exec(operation.slice(7)) || [])[1] || '').trim()\n measurementGate.hoverable = true\n measurementGate.flag = flag\n newStep.appendOperation(measurementGate)\n break\n }\n case /^[[{](.+)$/.test(operation): {\n const comment = operation.slice(1)\n newStep.remove()\n circuitBlock = new CircuitBlockElement()\n circuitBlock.comment = comment\n circuitBlock.setAttribute('data-targets', 'quantum-circuit.blocks')\n this.append(circuitBlock)\n break\n }\n case /^[\\]}]$/.test(operation): {\n newStep.remove()\n circuitBlock!.finalize()\n break\n }\n default: {\n if (operation === 1) {\n if (newStep.dropzones.length === newStep.freeDropzones.length) {\n newStep.keep = true\n } else {\n newStep.keep = false\n }\n } else {\n throw new Error(`Unknown operation: ${operation}`)\n }\n newStep.appendDropzone()\n }\n }\n // circuitStep.updateConnections()\n newStep.updateOperationAttributes()\n }\n }\n\n this.resize()\n }\n\n private ifVariable(operation: string): string {\n return ((/^<(.+)$/.exec(operation) || [])[1] || '').trim()\n }\n\n private angleParameter(operation: string): string {\n return ((/^\\((.+)\\)$/.exec(operation) || [])[1] || '').trim().replace('_', '/')\n }\n\n private appendMinimumWires(): void {\n const largestStep = this.largestStep\n const largestWireCount =\n largestStep && largestStep.wireCount > this.minWireCount ? largestStep.wireCount : this.minWireCount\n\n for (const each of this.steps) {\n const nDropzone = largestWireCount - each.wireCount\n for (let i = 0; i < nDropzone; i++) {\n each.appendDropzone()\n }\n }\n }\n\n private updateWire(wireIndex: number): void {\n let wireQuantum = false\n\n for (const step of this.steps) {\n const dropzone = step.dropzoneAt(wireIndex)\n\n dropzone.inputWireQuantum = wireQuantum\n if (dropzone.operationName === 'write-gate') {\n dropzone.inputWireQuantum = wireQuantum\n dropzone.outputWireQuantum = true\n wireQuantum = true\n } else if (dropzone.operationName === 'measurement-gate') {\n dropzone.inputWireQuantum = wireQuantum\n dropzone.outputWireQuantum = false\n wireQuantum = false\n } else if (dropzone.operationName === 'swap-gate') {\n const swapDropzones = step.dropzones.filter(each => each.operationName === 'swap-gate')\n if (swapDropzones.length === 2) {\n const dropzoneBits = swapDropzones.map(each => step.bit(each))\n const bit = step.bit(dropzone)\n const otherDropzoneBit = dropzoneBits[0] === bit ? dropzoneBits[1] : dropzoneBits[0]\n const otherDropzone = step.dropzoneAt(otherDropzoneBit)\n dropzone.inputWireQuantum = wireQuantum\n dropzone.outputWireQuantum = otherDropzone.inputWireQuantum\n wireQuantum = otherDropzone.inputWireQuantum\n } else {\n dropzone.inputWireQuantum = wireQuantum\n dropzone.outputWireQuantum = wireQuantum\n }\n } else {\n dropzone.inputWireQuantum = wireQuantum\n dropzone.outputWireQuantum = wireQuantum\n }\n }\n }\n\n private updateChangedWire(event: Event): void {\n const step = event.target\n if (!isCircuitStepElement(step)) throw new Error(`${step} isn't a circuit-step.`)\n\n const dropzone = (event as CustomEvent).detail.dropzone\n if (!isCircuitDropzoneElement(dropzone)) throw new Error(`${dropzone} isn't a circuit-dropzone.`)\n\n const wireIndex = step.dropzones.indexOf(dropzone)\n Util.need(wireIndex !== -1, 'circuit-dropzone not found.')\n\n this.updateWire(wireIndex)\n }\n\n /**\n * @category Drag and Drop\n */\n set draggable(value: boolean) {\n for (const each of this.operations) {\n each.draggable = value\n }\n }\n\n /**\n * @category Drag and Drop\n */\n snapTargetAt(x: number, y: number): SnapTarget {\n if (this.isVertical) {\n return this.snapTargets[y][x]\n } else {\n return this.snapTargets[x][y]\n }\n }\n\n /**\n * @category Drag and Drop\n */\n setSnapTargets(operation: Operation): void {\n const freeDropzones = this.dropzones.filter(each => !each.occupied)\n const snapTargets = []\n this.snapTargets = {}\n\n const myDropzone = operation.dropzone\n if (isCircuitDropzoneElement(myDropzone)) freeDropzones.push(myDropzone)\n\n for (const [dropzoneIndex, each] of Object.entries(this.dropzones)) {\n const snapTarget = each.snapTarget\n const i = this.isVertical ? snapTarget.y : snapTarget.x\n const j = this.isVertical ? snapTarget.x : snapTarget.y\n const wireIndex = parseInt(dropzoneIndex) % this.wireCount\n\n const prevI = i - operation.snapRange * 0.75\n const nextI = i + operation.snapRange * 0.75\n\n if (parseInt(dropzoneIndex) < this.wireCount) {\n if (this.isVertical) {\n snapTargets.push({x: j, y: prevI})\n } else {\n snapTargets.push({x: prevI, y: j})\n }\n if (this.snapTargets[prevI] === undefined) this.snapTargets[prevI] = {}\n if (this.snapTargets[prevI][j] === undefined)\n this.snapTargets[prevI][j] = {\n dropzone: null,\n stepIndex: -1,\n wireIndex\n }\n }\n\n if (this.isVertical) {\n snapTargets.push({x: j, y: nextI})\n } else {\n snapTargets.push({x: nextI, y: j})\n }\n if (this.snapTargets[nextI] === undefined) this.snapTargets[nextI] = {}\n if (this.snapTargets[nextI][j] === undefined)\n this.snapTargets[nextI][j] = {\n dropzone: null,\n stepIndex: Math.floor(parseInt(dropzoneIndex) / this.wireCount),\n wireIndex\n }\n\n if (!each.occupied || each === myDropzone) {\n snapTargets.push(snapTarget)\n }\n\n if (this.snapTargets[i] === undefined) this.snapTargets[i] = {}\n if (this.snapTargets[i][j] === undefined)\n this.snapTargets[i][j] = {\n dropzone: each,\n stepIndex: null,\n wireIndex\n }\n }\n\n operation.snapTargets = snapTargets\n }\n\n /**\n * @category Drag and Drop\n */\n updateSnapTargets(newDropzones: CircuitDropzoneElement[]): void {\n const firstDropzone = newDropzones[0]\n Util.notNull(firstDropzone)\n\n const baseI = this.isVertical ? firstDropzone.snapTarget.y : firstDropzone.snapTarget.x\n\n for (const [i, jv] of Object.entries(this.snapTargets)) {\n if (parseInt(i) <= baseI) continue\n\n for (const j in jv) {\n const snapTarget = jv[j]\n if (snapTarget.stepIndex === null) continue\n snapTarget.stepIndex += 1\n }\n }\n\n for (const [wireIndex, each] of Object.entries(newDropzones)) {\n const snapTarget = each.snapTarget\n const i = this.isVertical ? snapTarget.y : snapTarget.x\n const j = this.isVertical ? snapTarget.x : snapTarget.y\n\n Util.notNull(this.snapTargets[i])\n\n this.snapTargets[i][j] = {\n dropzone: each,\n stepIndex: null,\n wireIndex: parseInt(wireIndex)\n }\n }\n }\n\n serialize(): SerializedCircuitStep[] {\n return this.steps.map(each => each.serialize())\n }\n\n private get urlJson(): string {\n const json = window.location.href.toString().split(window.location.host)[1].slice(1)\n return decodeURIComponent(json)\n }\n\n clear(): void {\n history.pushState('', '', encodeURIComponent('{\"cols\":[]}'))\n location.reload()\n }\n\n toJson(): string {\n let isInBlock = false\n const cols = []\n\n for (const each of this.nonEmptySteps) {\n if (each.isInBlock) {\n if (!isInBlock) {\n const block = each.block\n cols.push(`[\"[${block.comment}\"]`)\n isInBlock = true\n }\n } else {\n if (isInBlock) {\n cols.push('[\"]\"]')\n isInBlock = false\n }\n }\n cols.push(each.toJson())\n }\n\n if (isInBlock) {\n cols.push('[\"]\"]')\n }\n\n if (this.circuitTitle !== '') {\n return `{\"cols\":[${cols.join(',')}],\"title\":\"${this.circuitTitle}\"}`\n } else {\n return `{\"cols\":[${cols.join(',')}]}`\n }\n }\n}\n\ncontroller(QuantumCircuitElement)\n", "import {Complex, DetailedError, Util} from '@qni/common'\nimport {attr, controller, target, targets} from '@github/catalyst'\nimport {html, render} from '@github/jtml'\nimport {isBlochDisplayElement, isMeasurementGateElement} from './operation'\nimport {isControllable, isIfable} from './mixin'\nimport {CircleNotationElement} from './circle-notation-element'\nimport {QuantumCircuitElement} from './quantum-circuit-element'\nimport {RunCircuitButtonElement} from './run-circuit-button-element'\n\ntype MessageEventData = {\n type: 'step' | 'finish'\n blochVectors: {[bit: number]: [number, number, number]}\n measuredBits: {[bit: number]: number}\n step: number\n amplitudes: Array<[number, number]>\n flags: {[key: string]: boolean}\n}\n\nexport class QuantumSimulatorElement extends HTMLElement {\n @attr updateUrl = false\n\n @target circuit!: QuantumCircuitElement\n @target circleNotation!: CircleNotationElement\n @targets runCircuitButtons!: RunCircuitButtonElement[]\n\n private visibleQubitCircleKets!: number[]\n\n declare worker: Worker\n\n connectedCallback(): void {\n this.worker = new Worker('./serviceworker.js')\n this.visibleQubitCircleKets = []\n\n this.worker.addEventListener('message', this.handleServiceWorkerMessage.bind(this))\n this.addEventListener('operation-inspector-if-change', this.run)\n this.addEventListener('operation-inspector-angle-change', this.run)\n this.addEventListener('operation-inspector-angle-update', this.maybeUpdateUrl)\n this.addEventListener('operation-inspector-flag-change', this.run)\n this.addEventListener('circuit-step-mouseenter', this.runUnlessEditing)\n this.addEventListener('circuit-step-mouseleave', this.runUnlessEditing)\n this.addEventListener('circuit-step-snap', this.run)\n this.addEventListener('circuit-step-unsnap', this.run)\n this.addEventListener('circuit-step-update', this.run)\n this.addEventListener('circle-notation-visibility-change', this.updateVisibleQubitCircleKets)\n this.addEventListener('circle-notation-visibility-change', this.run)\n this.addEventListener('run-circuit-button-click', this.run)\n\n this.addEventListener('circuit-step-snap', this.maybeUpdateUrl)\n this.addEventListener('circuit-step-unsnap', this.maybeUpdateUrl)\n\n this.attachShadow({mode: 'open'})\n this.update()\n this.maybeUpdateUrl()\n\n this.circuit.setBreakpoint(this.circuit.stepAt(0))\n this.run()\n }\n\n update(): void {\n render(html``, this.shadowRoot!)\n }\n\n clearCircuit(): void {\n this.circuit.clear()\n }\n\n private handleServiceWorkerMessage(event: MessageEvent): void {\n const data = event.data as MessageEventData\n const stepIndex = this.activeStepIndex\n\n switch (data.type) {\n case 'step': {\n const step = this.circuit.stepAt(data.step)\n\n for (const bitStr in data.blochVectors) {\n const bit = parseInt(bitStr)\n const blochDisplay = step.dropzoneAt(bit).operation\n if (isBlochDisplayElement(blochDisplay)) {\n const blochVector = data.blochVectors[bit]\n blochDisplay.x = blochVector[0]\n blochDisplay.y = blochVector[1]\n blochDisplay.z = blochVector[2]\n }\n }\n\n if (data.measuredBits) {\n const measuredBits = data.measuredBits\n for (const bitStr in measuredBits) {\n const bit = parseInt(bitStr)\n const measurementGate = step.dropzoneAt(bit).operation\n if (isMeasurementGateElement(measurementGate)) {\n measurementGate.value = measuredBits[bit].toString()\n }\n }\n }\n\n for (const each of step.dropzones) {\n const operation = each.operation\n if (!isIfable(operation)) continue\n if (operation.if === '') continue\n\n operation.disabled = !data.flags[operation.if]\n }\n\n if (stepIndex === data.step) {\n const complexAmplitudes: {[ket: number]: Complex} = {}\n for (const ket in data.amplitudes) {\n const c = data.amplitudes[ket]\n complexAmplitudes[ket] = new Complex(c[0], c[1])\n }\n this.circleNotation?.setAmplitudes(complexAmplitudes)\n }\n break\n }\n case 'finish': {\n for (const each of this.runCircuitButtons) {\n each.running = false\n }\n break\n }\n default:\n throw new DetailedError('Unknown service worker message', {data})\n }\n }\n\n private run(): void {\n if (this.circleNotation === null) return\n\n const stepIndex = this.activeStepIndex\n const serializedSteps = this.circuit.serialize()\n Util.need(serializedSteps.length > 0, 'non-zero step length')\n\n const maxControlTargetBit = Math.max(\n ...serializedSteps.map(serializedStep =>\n Math.max(\n ...serializedStep.map(operation => {\n let controls: number[] = []\n if (isControllable(operation)) controls = operation.controls\n\n return Math.max(...operation.targets.concat(controls))\n })\n )\n )\n )\n const qubitCount = maxControlTargetBit >= 0 ? maxControlTargetBit + 1 : 1\n\n this.circleNotation.qubitCount = qubitCount\n this.worker.postMessage({\n qubitCount,\n stepIndex,\n steps: serializedSteps,\n targets: this.visibleQubitCircleKets\n })\n }\n\n private runUnlessEditing(): void {\n if (this.circuit.editing) return\n this.run()\n }\n\n private get activeStepIndex(): number {\n const activeStep = this.circuit.activeStep\n const breakpoint = this.circuit.breakpoint\n let step = activeStep || breakpoint\n\n if (step === null) {\n step = this.circuit.stepAt(0)\n this.circuit.setBreakpoint(step)\n }\n\n return this.circuit.fetchStepIndex(step)\n }\n\n private updateVisibleQubitCircleKets(event: Event): void {\n const ketNumbers = (event as CustomEvent).detail as number[]\n Util.notNull(ketNumbers)\n\n this.visibleQubitCircleKets = ketNumbers\n }\n\n private maybeUpdateUrl(): void {\n if (!this.updateUrl) return\n Util.notNull(this.circuit)\n\n const json = this.circuit.toJson()\n history.pushState('', '', encodeURIComponent(json))\n }\n}\n\ncontroller(QuantumSimulatorElement)\n", "if (navigator.serviceWorker) {\n if (location.hostname === 'localhost') {\n navigator.serviceWorker.register('/serviceworker.js', { scope: './' }).catch(function (error) {\n console.log('[Companion]', 'Service worker registration failed: ' + error)\n })\n } else {\n navigator.serviceWorker\n .register('/qni/serviceworker.js', { scope: '/qni/' })\n .catch(function (error) {\n console.log('[Companion]', 'Service worker registration failed: ' + error)\n })\n }\n}\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAuCA,IAAC,UAAS,MAAM;AAEd;AAKA,UAAI,gBAAgB;AAGpB,UAAI,IAAI;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA;AAGP,2BAAqB,MAAM;AAEzB,oCAA4B;AAC1B,cAAI,OAAO,MAAM,MAAM,MAAM;AAC7B,eAAK,UAAU,KAAK,UAAU;AAC9B,eAAK,WAAW,KAAK;AACrB,eAAK,aAAa,KAAK;AAAA;AAJhB;AAYT,yCAAiC;AAAA;AAAxB;AACT,8BAAsB,YAAY,MAAM;AACxC,yBAAiB,YAAY,IAAI;AAEjC,eAAO;AAAA;AAlBA;AAqBT,UAAI,iBAAiB,SAAS,oBAAoB,YAAY;AAC9D,UAAI,mBAAmB,SAAS,sBAAsB,YAAY;AAElE,sBAAgB,GAAG,GAAG;AAEpB,YAAI,MAAM,IAAI,SAAS,GAAG,MAAM;AAC9B;AAAA;AAEF,eAAO,IAAI;AAAA;AALJ;AAQT,mCAA6B;AAC3B,cAAM,IAAI;AAAA;AADH;AAIT,yBAAmB,KAAK;AAEtB,YAAI,UAAU;AAEd,YAAI,IAAI;AACR,YAAI,IAAI;AACR,YAAI,IAAI;AAER,eAAO,KAAK,GAAG;AAEb,iBAAO,IAAI,MAAM,GAAG;AAClB,iBAAK;AACL,oBAAQ,KAAM,SAAQ,MAAM,KAAK;AAAA;AAEnC,eAAK,IAAI,IAAI;AAAA;AAGf,YAAI,MAAM,KAAK;AACb,cAAI,IAAI;AACR,oBAAQ,KAAM,SAAQ,MAAM,KAAK;AAAA,eAC5B;AACL,kBAAQ,OAAQ,SAAQ,QAAQ,KAAK;AAAA;AAEvC,eAAO;AAAA;AAvBA;AA0BT,UAAI,QAAQ,gCAAS,IAAI,IAAI;AAE3B,YAAI,IAAI,GAAG,KAAI,GAAG,IAAI;AACtB,YAAI,IAAI,GAAG,KAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAI;AAEpC,YAAI,KAAI,GAAG,IAAI;AACf,YAAI,IAAI,GAAG,KAAI;AAEf,YAAI,KAAI;AACR,YAAI;AAEJ,YAAI,OAAO,UAAa,OAAO,MAAM;AAAA,mBAE1B,OAAO,QAAW;AAC3B,cAAI;AACJ,eAAI;AACJ,cAAI,IAAI;AAAA;AAER,kBAAQ,OAAO;AAAA,iBAER,UACH;AACE,kBAAI,OAAO,MAAM,OAAO,IAAI;AAC1B,oBAAI,GAAG;AACP,qBAAI,GAAG;AACP,oBAAI,OAAO;AACT,uBAAK,GAAG;AAAA,yBACD,KAAK,IAAI;AAClB,oBAAI,GAAG;AACP,oBAAI,KAAK;AACP,uBAAI,GAAG;AAAA,qBACJ;AACL;AAAA;AAEF,kBAAI,IAAI;AACR;AAAA;AAAA,iBAEC,UACH;AACE,kBAAI,KAAK,GAAG;AACV,oBAAI;AACJ,qBAAK,CAAC;AAAA;AAGR,kBAAI,KAAK,MAAM,GAAG;AAChB,oBAAI;AAAA,yBACK,KAAK,GAAG;AAEjB,oBAAI,MAAM,GAAG;AACX,uBAAI,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK;AACpD,wBAAM;AAAA;AAMR,uBAAO,KAAK,MAAK,MAAK,IAAG;AACvB,uBAAK,MAAI,KAAM,KAAI;AAEnB,sBAAI,OAAO,IAAG;AACZ,wBAAI,IAAI,MAAK,IAAG;AACd,0BAAI,KAAI;AACR,2BAAI,IAAI;AAAA,+BACC,KAAI,GAAG;AAChB,0BAAI;AACJ,2BAAI;AAAA,2BACC;AACL,0BAAI;AACJ,2BAAI;AAAA;AAEN;AAAA,yBAEK;AAEL,wBAAI,KAAK,IAAG;AACV,4BAAK;AACL,2BAAK;AAAA,2BACA;AACL,2BAAK;AACL,4BAAK;AAAA;AAGP,wBAAI,IAAI,IAAG;AACT,0BAAI;AACJ,2BAAI;AAAA,2BACC;AACL,0BAAI;AACJ,2BAAI;AAAA;AAAA;AAAA;AAIV,qBAAK;AAAA,yBACI,MAAM,OAAO,MAAM,KAAK;AACjC,qBAAI,IAAI;AAAA;AAEV;AAAA;AAAA,iBAEC,UACH;AACE,kBAAI,GAAG,MAAM;AAEb,kBAAI,MAAM;AACR;AAEF,kBAAI,EAAE,QAAO,KAAK;AAChB,oBAAI;AACJ;AAAA,yBACS,EAAE,QAAO,KAAK;AACvB;AAAA;AAGF,kBAAI,EAAE,WAAW,KAAI,GAAG;AACtB,qBAAI,OAAO,EAAE,OAAM;AAAA,yBACV,EAAE,KAAI,OAAO,OAAO,EAAE,QAAO,KAAK;AAE3C,oBAAI,EAAE,QAAO,KAAK;AAChB,sBAAI,OAAO,EAAE,OAAM;AAAA;AAErB;AAGA,oBAAI,KAAI,MAAM,EAAE,UAAU,EAAE,KAAI,OAAO,OAAO,EAAE,KAAI,OAAO,OAAO,EAAE,KAAI,OAAO,OAAO,EAAE,KAAI,OAAO,KAAK;AACtG,uBAAI,OAAO,EAAE,KAAI;AACjB,sBAAI,KAAK,IAAI,IAAI,EAAE,IAAG;AACtB;AAAA;AAIF,oBAAI,EAAE,QAAO,OAAO,EAAE,KAAI,OAAO,OAAO,EAAE,QAAO,OAAO,EAAE,KAAI,OAAO,KAAK;AACxE,sBAAI,OAAO,EAAE,KAAI,IAAI;AACrB,uBAAI,KAAK,IAAI,IAAI,EAAE,KAAI,GAAG,UAAU;AACpC,wBAAK;AAAA;AAAA,yBAGE,EAAE,KAAI,OAAO,OAAO,EAAE,KAAI,OAAO,KAAK;AAC/C,qBAAI,OAAO,EAAE,KAAI;AACjB,oBAAI,OAAO,EAAE,KAAI,IAAI;AACrB,sBAAK;AAAA,yBACI,EAAE,KAAI,OAAO,OAAO,EAAE,KAAI,OAAO,KAAK;AAC/C,oBAAI,OAAO,EAAE,KAAI;AACjB,qBAAI,OAAO,EAAE,KAAI,IAAI;AACrB,oBAAI,OAAO,EAAE,KAAI,IAAI;AACrB,sBAAK;AAAA;AAGP,kBAAI,EAAE,UAAU,IAAG;AACjB,qBAAI,IAAI;AACR,oBACA,IAAI,IAAI,KAAI,IAAI,KAAI;AACpB;AAAA;AAAA;AAAA;AAMJ;AAAA;AAGN,YAAI,OAAM,GAAG;AACX,gBAAM,IAAI;AAAA;AAGZ,UAAE,OAAO,IAAI,IAAI,KAAK;AACtB,UAAE,OAAO,KAAK,IAAI;AAClB,UAAE,OAAO,KAAK,IAAI;AAAA,SApKR;AAuKZ,sBAAgB,GAAG,GAAG,IAAG;AAEvB,YAAI,IAAI;AACR,eAAO,IAAI,GAAG,IAAK,IAAI,IAAK,IAAG,MAAM,GAAG;AAEtC,cAAI,IAAI,GAAG;AACT,gBAAK,IAAI,IAAK;AAAA;AAAA;AAGlB,eAAO;AAAA;AATA;AAaT,wBAAkB,GAAG,IAAG;AAEtB,eAAO,KAAI,MAAM,GACf,MAAK,GAAG;AAAA;AAGV,eAAO,KAAI,MAAM,GACf,MAAK,GAAG;AAAA;AAGV,YAAI,OAAM;AACR,iBAAO;AAOT,YAAI,MAAM,KAAK;AACf,YAAI,IAAI;AAER,eAAO,QAAQ,GAAG,KAAK;AACrB,gBAAM,MAAM,KAAK;AAEjB,cAAI,IAAI;AACN,mBAAO;AAAA;AAEX,eAAO;AAAA;AA3BA;AA+BT,0BAAoB,GAAG,IAAG,KAAK;AAE7B,YAAI,OAAO;AACX,YAAI,OAAO,OAAO,IAAI,KAAK;AAE3B,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAG5B,cAAI,SAAS;AACX,mBAAO;AAET,iBAAO,OAAO,KAAK;AACnB,iBAAO,OAAO,KAAK;AAAA;AAErB,eAAO;AAAA;AAdA;AAiBT,mBAAa,GAAG,GAAG;AAEjB,YAAI,CAAC;AACH,iBAAO;AACT,YAAI,CAAC;AACH,iBAAO;AAET,eAAO,GAAG;AACR,eAAK;AACL,cAAI,CAAC;AACH,mBAAO;AACT,eAAK;AACL,cAAI,CAAC;AACH,mBAAO;AAAA;AAAA;AAbJ;AAeR;AASD,wBAAkB,GAAG,GAAG;AAEtB,YAAI,CAAE,iBAAgB,WAAW;AAC/B,iBAAO,IAAI,SAAS,GAAG;AAAA;AAGzB,cAAM,GAAG;AAET,YAAI,IAAI,EAAE,MAAM,EAAE;AAElB,aAAK,OAAO,EAAE;AACd,aAAK,OAAO,EAAE,OAAO;AACrB,aAAK,OAAO,EAAE,OAAO;AAAA;AAZd;AAeT,eAAS,YAAY;AAAA,QAEnB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAOL,OAAO,WAAW;AAEhB,iBAAO,IAAI,SAAS,KAAK,MAAM,KAAK;AAAA;AAAA,QAQtC,OAAO,WAAW;AAEhB,iBAAO,IAAI,SAAS,CAAC,KAAK,OAAO,KAAK,MAAM,KAAK;AAAA;AAAA,QAQnD,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AACT,iBAAO,IAAI,SACT,KAAK,OAAO,KAAK,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MACxD,KAAK,OAAO,EAAE;AAAA;AAAA,QASlB,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AACT,iBAAO,IAAI,SACT,KAAK,OAAO,KAAK,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MACxD,KAAK,OAAO,EAAE;AAAA;AAAA,QASlB,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AACT,iBAAO,IAAI,SACT,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MACnC,KAAK,OAAO,EAAE;AAAA;AAAA,QASlB,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AACT,iBAAO,IAAI,SACT,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MACnC,KAAK,OAAO,EAAE;AAAA;AAAA,QASlB,SAAS,WAAW;AAClB,iBAAO,IAAI,SAAS;AAAA;AAAA,QAQtB,OAAO,SAAS,GAAG,GAAG;AAEpB,cAAI,MAAM,KAAK,SAAS,MAAM,KAAK,OAAO;AACxC,mBAAO,IAAI,SAAS;AAAA;AAGtB,cAAI,MAAM,QAAW;AACnB,mBAAO,IAAI,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM;AAAA;AAGzD,gBAAM,GAAG;AACT,cAAI,AAAM,EAAE,SAAR,KAAgB,AAAM,KAAK,SAAX,GAAiB;AACnC,qBAAS,GAAG;AAAA;AAiBd,iBAAO,IAAI,SACT,KAAK,OAAQ,GAAE,OAAO,KAAK,QAAS,GAAE,OAAO,KAAK,OAClD,EAAE,OAAO,KAAK;AAAA;AAAA,QASlB,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AAIT,iBAAO,IAAI,SAAS,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,EAAE,MAAM,KAAK,OAAO,EAAE,OAAO,KAAK;AAAA;AAAA,QAQrF,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AAIT,cAAI,EAAE,SAAS,KAAK,KAAK,SAAS,GAAG;AACnC,mBAAO,IAAI;AAAA;AAEb,iBAAO,IAAI,SAAS,EAAE,OAAO,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,EAAE,MAAM,KAAK;AAAA;AAAA,QAQpF,QAAQ,SAAS,QAAQ;AAEvB,mBAAS,KAAK,IAAI,IAAI,UAAU;AAEhC,cAAI,MAAM,KAAK,SAAS,MAAM,KAAK,OAAO;AACxC,mBAAO,IAAI,SAAS;AAAA;AAEtB,iBAAO,IAAI,SAAS,KAAK,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA;AAAA,QAQ7E,SAAS,SAAS,QAAQ;AAExB,mBAAS,KAAK,IAAI,IAAI,UAAU;AAEhC,cAAI,MAAM,KAAK,SAAS,MAAM,KAAK,OAAO;AACxC,mBAAO,IAAI,SAAS;AAAA;AAEtB,iBAAO,IAAI,SAAS,KAAK,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA;AAAA,QAQ9E,SAAS,SAAS,QAAQ;AAExB,mBAAS,KAAK,IAAI,IAAI,UAAU;AAEhC,cAAI,MAAM,KAAK,SAAS,MAAM,KAAK,OAAO;AACxC,mBAAO,IAAI,SAAS;AAAA;AAEtB,iBAAO,IAAI,SAAS,KAAK,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA;AAAA,QAQ9E,WAAW,WAAW;AAEpB,iBAAO,IAAI,SAAS,KAAK,OAAO,KAAK,MAAM,KAAK;AAAA;AAAA,QAQlD,OAAO,SAAS,GAAG,GAAG;AAEpB,gBAAM,GAAG;AAIT,cAAI,EAAE,SAAS,GAAG;AAEhB,gBAAI,EAAE,OAAO,GAAG;AACd,qBAAO,IAAI,SAAS,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,EAAE;AAAA,mBAC9E;AACL,qBAAO,IAAI,SAAS,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,EAAE;AAAA;AAAA;AAUvF,cAAI,KAAK,OAAO;AAAG,mBAAO;AAG1B,cAAI,KAAI,UAAU,KAAK;AACvB,cAAI,KAAI,UAAU,KAAK;AAGvB,cAAI,IAAI;AACR,cAAI,KAAI;AACR,mBAAS,MAAK,IAAG;AACf,gBAAI,OAAM;AAAK;AACf,gBAAI,OAAM,KAAK;AACb,kBAAI;AACJ;AAAA;AAEF,eAAE,OAAK,EAAE;AAET,gBAAI,GAAE,MAAK,EAAE,SAAS,GAAG;AACvB,iBAAE,OAAK,EAAE;AAAA;AACJ,qBAAO;AACd,iBAAI,KAAK,IAAI,IAAG,GAAE;AAAA;AAGpB,mBAAS,MAAK,IAAG;AACf,gBAAI,OAAM;AAAK;AACf,eAAE,OAAK,EAAE;AAET,gBAAI,GAAE,MAAK,EAAE,SAAS,GAAG;AACvB,iBAAE,OAAK,EAAE;AAAA;AACJ,qBAAO;AACd,kBAAI,KAAK,IAAI,IAAG,GAAE;AAAA;AAGpB,cAAI,EAAE,OAAO,GAAG;AACd,mBAAO,IAAI,SAAS,IAAG;AAAA;AAEzB,iBAAO,IAAI,SAAS,GAAG;AAAA;AAAA,QAQzB,UAAU,SAAS,GAAG,GAAG;AAEvB,gBAAM,GAAG;AACT,iBAAO,KAAK,OAAO,KAAK,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,KAAK;AAAA;AAAA,QAQnE,WAAW,SAAS,GAAG,GAAG;AAExB,gBAAM,GAAG;AACT,cAAI,IAAK,KAAK,OAAO,KAAK,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK;AACjE,iBAAQ,KAAI,KAAM,KAAI;AAAA;AAAA,QAGxB,YAAY,SAAS,KAAK;AAIxB,cAAI,MAAM,KAAK,SAAS,MAAM,KAAK,OAAO;AACxC,mBAAO;AAAA;AAGT,cAAI,OAAO,KAAK,SAAS;AAEzB,gBAAM,OAAO;AAEb,uBAAa,GAAG;AACd,gBAAI,EAAE,WAAW;AACf,qBAAO,IAAI,SAAS,EAAE;AACxB,mBAAO,IAAI,EAAE,MAAM,IAAI,aAAa,OAAO,EAAE;AAAA;AAHtC;AAMT,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,gBAAI,MAAM,IAAI,KAAK,MAAM,GAAG,IAAI;AAChC,gBAAI,IAAI,OAAO,KAAK,UAAU,SAAS,YAAY,KAAK;AACtD,qBAAO,IAAI,OAAO,KAAK;AAAA;AAAA;AAG3B,iBAAO;AAAA;AAAA,QAQT,aAAa,SAAS,GAAG,GAAG;AAE1B,gBAAM,GAAG;AACT,iBAAO,CAAE,EAAE,GAAE,OAAO,KAAK,SAAW,KAAK,OAAO,EAAE,OAAS,GAAE,OAAO,KAAK;AAAA;AAAA,QAQ3E,WAAW,WAAW;AAEpB,iBAAO,KAAK,OAAO,KAAK,OAAO,KAAK;AAAA;AAAA,QAQtC,cAAc,SAAS,cAAc;AAEnC,cAAI,OAAO,MAAM;AACjB,cAAI,IAAI,KAAK;AACb,cAAI,KAAI,KAAK;AACb,cAAI,KAAK,OAAO,GAAG;AACjB,mBAAO;AAAA;AAGT,cAAI,OAAM,GAAG;AACX,mBAAO;AAAA,iBACF;AAEL,gBAAI,gBAAiB,SAAQ,KAAK,MAAM,IAAI,OAAM,GAAG;AACnD,qBAAO;AACP,qBAAO;AACP,mBAAK;AAAA;AAGP,mBAAO;AACP,mBAAO;AACP,mBAAO;AAAA;AAET,iBAAO;AAAA;AAAA,QAQT,WAAW,SAAS,cAAc;AAEhC,cAAI,OAAO,MAAM;AACjB,cAAI,IAAI,KAAK;AACb,cAAI,KAAI,KAAK;AACb,cAAI,KAAK,OAAO,GAAG;AACjB,mBAAO;AAAA;AAGT,cAAI,OAAM,GAAG;AACX,mBAAO;AAAA,iBACF;AAEL,gBAAI,gBAAiB,SAAQ,KAAK,MAAM,IAAI,OAAM,GAAG;AACnD,qBAAO;AACP,mBAAK;AAAA;AAGP,mBAAO;AACP,mBAAO;AACP,mBAAO;AACP,mBAAO;AACP,mBAAO;AAAA;AAET,iBAAO;AAAA;AAAA,QAQT,eAAe,WAAW;AAExB,cAAI;AACJ,cAAI,IAAI,KAAK;AACb,cAAI,IAAI,KAAK;AACb,cAAI,MAAM;AAEV,cAAI,MAAM,MAAM,MAAM,IAAI;AACxB,mBAAO;AAAA;AAGT,aAAG;AACD,gBAAI,KAAK,KAAK,MAAM,IAAI;AACxB,gBAAI,IAAI;AACR,gBAAI;AACJ,gBAAI;AAAA,mBACG,MAAM;AAEf,iBAAO;AAAA;AAAA,QAQT,YAAY,SAAS,KAAK;AAExB,cAAI;AACJ,cAAI,KAAI,KAAK;AACb,cAAI,KAAI,KAAK;AAEb,cAAI,MAAM,OAAM,MAAM,KAAI;AACxB,mBAAO;AAAA;AAGT,gBAAM,OAAO;AAEb,cAAI,SAAS,SAAS,IAAG;AACzB,cAAI,SAAS,WAAW,IAAG,IAAG;AAE9B,cAAI,MAAM,KAAK,SAAS,KAAK,MAAM;AAEnC,iBAAO,KAAI,KAAI;AAEf,gBAAK;AACL,gBAAK;AAEL,cAAI;AACF,mBAAO;AAET,cAAI,QAAQ;AAEV,qBAAS,IAAI,QAAQ,OAAM;AACzB,qBAAO,KAAI,KAAI;AACf,oBAAK;AACL,oBAAK;AAAA;AAEP,mBAAO;AACP,qBAAS,IAAI,QAAQ,OAAM;AACzB,qBAAO,KAAI,KAAI;AACf,oBAAK;AACL,oBAAK;AAAA;AAEP,mBAAO;AAAA,iBACF;AACL,qBAAS,IAAI,KAAK,MAAK,OAAM;AAC3B,qBAAO,KAAI,KAAI;AACf,oBAAK;AACL,oBAAK;AAAA;AAAA;AAGT,iBAAO;AAAA;AAAA;AAIX,UAAI,OAAO,WAAW,cAAc,OAAO,QAAQ;AACjD,eAAO,IAAI,WAAW;AACpB,iBAAO;AAAA;AAAA,iBAEA,OAAO,YAAY,UAAU;AACtC,eAAO,eAAe,UAAU,cAAc,EAAE,SAAS;AACzD,iBAAS,aAAa;AACtB,iBAAS,cAAc;AACvB,eAAO,aAAa;AAAA,aACf;AACL,aAAK,cAAc;AAAA;AAAA,OAGpB;AAAA;AAAA;;;AC93BH,sBAAA;ACiBA,IAAM,IAAuB,OAAO,UAAU,SAAS,KAAK;AAA5D,IACM,IAA4B;AADlC,IAEM,IAA0B;AAGzB,WAAkB,GAAgB,IAAiB,GAAiC;AACzF,SACE,EAAkB,MAAU,EAAsB,GAAO,MAAmB,EAAiB,GAAO;;AAFjG;AAMP,WAA2B,GAAgB;AACzC,MAAI,MAAU;AAAM,WAAO;AAC3B,MAAI,MAAU;AAAW,WAAO;AAChC,MAAI,OAAO,KAAU;AAAU,WAAO,IAAI;AAC1C,MAAI,OAAO,KAAU;AAAU,WAAO,OAAO;;AAJ/C;AASA,WAA+B,GAAgB,GAAwB;AACrE,MAAI,MAAmB;AAAG,WAAO;AACjC,MAAI,aAAiB;AAAK,WAAO,EAAY,GAAO;AACpD,MAAI,aAAiB;AAAK,WAAO,EAAY,GAAO;AAOpD,MANoB,QACb,EAAwB,OAAO,cAAc,QAKrC;AAAQ,WAAO,EAAiB,GAAO;;AAVxD;AAeA,WAA0B,GAAgB,GAAwB;AAChE,MAAM,IAAgB,OAAO;AAC7B,SAAI,MAAkB,IAA6B,IAE5C,EAAe,GAAO;;AAJ/B;AAOA,WAAqB,GAA4B,GAAe;AAC9D,MAAM,IAAU;AAChB,WAAW,CAAC,GAAG,MAAM,EAAI,WAAW;AAClC,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,QAAM,IAAU,EAAS,GAAG,IAAQ,IAC9B,IAAU,EAAS,GAAG,IAAQ;AACpC,MAAQ,KAAK,GAAG,MAAY;;AAE9B,SAAO,OAAO,EAAQ,KAAK;;AAX7B;AAcA,WAAqB,GAAmB,GAAe;AACrD,MAAM,IAAU;AAChB,WAAW,KAAK,GAAK;AACnB,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,MAAQ,KAAK,EAAS,GAAG,IAAQ;;AAEnC,SAAO,OAAO,EAAQ,KAAK;;AAT7B;AAYA,WAA0B,GAAwB,GAAuB;AACvE,MAAM,IAAU;AAChB,WAAW,KAAK,GAAK;AACnB,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,MAAQ,KAAK,EAAS,GAAG,IAAQ;;AAGnC,SAAO,GADQ,MAAM,QAAQ,KAAO,KAAK,EAAI,YAAY,QACrC,EAAQ,KAAK;;AAVnC;AAaA,WAAwB,GAAgB,GAAe;AACrD,MAAM,IAAU;AAChB,WAAW,KAAK,GAAkC;AAChD,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAO;AAC/C;AAEF,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,QAAM,IAAK,EAAkC,IACvC,IAAU,EAAS,GAAG,IAAQ,IAC9B,IAAU,EAAS,GAAG,IAAQ;AACpC,MAAQ,KAAK,GAAG,MAAY;;AAG9B,MAAM,IAAY,EAAkC,YAAY;AAEhE,SAAO,GADQ,MAAa,GAAG,YAAY,OAAO,KAAK,UAAU,QAC7C,EAAQ,KAAK;;AAlBnC;AChFA,IAAI,IAA4B;AAAhC,IAEO,IAAA,qCAA4B,MAAM;EAIvC,YAAY,GAAiB,GAAqB;AAChD,UAAM;AAEN,SAAK,aAAa,GAClB,KAAK,OAAO,SACZ,KAAK,UAAU,GACf,KAAK,QAAQ,IAAI,QAAQ,OACrB,KAAK,UAAU,UACjB,MAAK,QAAQ,KAAK,MAAM,QAAQ,oDAAoD;SAGtF;AACA,QAAI;AACF,WAAK,UACH,MAA8B,IAC1B,EAAS,KAAK,cACd;aACC,GADD;AAGN,cAAQ,MAAM,IACd,KAAK,UAAU;cAAA;AAEf;;;GA1BC;ACFA,IAAM,IAAoB,CAC/B,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,QACxD,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,QACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,uBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,uBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,QAAQ,OAAO;AAlBpD,IAyBA,IAAA,6BAAa;SA2BX,WAAW,GAAsB;AACtC,QAAI,EAAK,WAAW;AAClB,YAAM,IAAI,MAAM,kBAAkB;AAEpC,QAAI,EAAK,OAAO;AACd,aAAO,CAAC,EAAO,WAAW,EAAK,OAAO;AAExC,QAAI,EAAK,OAAO;AACd,aAAO,KAAK,KAAK,EAAO,WAAW,EAAK,OAAO;AAGjD,QAAM,IAAW,EAAO,qBAAqB,OAAK,EAAE,cAAc;AAClE,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAS,WAAW;AAC1B,QAAI,MAAM;AACR,YAAM,IAAI,MAAM,kBAAkB;AAEpC,WAAO;;SAUF,mBAAmB,GAAe,GAAyB;AAChE,QAAI,IAAQ;AACV,aAAO,CAAC,EAAO,mBAAmB,CAAC,GAAO;AAG5C,QAAM,IAAI,IAAQ;AAClB,QAAI,KAAK,KAAW,IAAI,KAAK;AAC3B,aAAO,KAAK,MAAM;AAGpB,QAAM,IAAW,EAAO,qBAAqB,OAAK,KAAK,IAAI,EAAE,QAAQ,MAAU;AAC/E,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAe,EAAO,qBAAqB,OAAK,KAAK,IAAI,KAAK,KAAK,EAAE,SAAS,MAAU;AAC9F,WAAI,MAAiB,SACZ,KAAK,KAAK,EAAa,SAGzB;;SASF,qBAAqB,GAAiF;AAC3G,aAAW,KAAQ;AACjB,UAAI,EAAU;AAAO,eAAO;;EAgBhC,YACE,GACA,GACA,GACA,GACA;AACA,SAAK,oBAAoB,GACzB,KAAK,uBAAuB,GAC5B,KAAK,cAAc,GACnB,KAAK,gBAAgB;;EAGvB,YAAY,GAAmB;AAC7B,WAAI,KAAK,oBACA,KAAK,gBAAgB,GAAG,KAAK,sBAAsB,KAAK,eAE7D,KAAK,gBAAgB,SAChB,EAAE,QAAQ,KAAK,eAEjB,OAAO;;EAWR,gBAAgB,GAAe,IAAU,GAAG,IAA6B,QAAmB;AAClG,QAAI,KAAK,IAAI,KAAS;AAAS,aAAO;AACtC,QAAI,IAAQ;AAAG,aAAO,IAAI,KAAK,gBAAgB,CAAC,GAAO,GAAS;AAEhE,QAAM,IAAW,EAAO,qBAAqB,OAAK,KAAK,IAAI,EAAE,QAAQ,MAAU;AAC/E,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAe,EAAO,qBAAqB,OAAK,KAAK,IAAI,KAAK,KAAK,EAAE,SAAS,MAAU;AAC9F,WAAI,MAAiB,SACZ,SAAS,EAAa,cAG3B,IAAQ,MAAM,KAAK,MAAW,SACzB,EAAM,QAAQ,KAGhB,EAAM;;GAxJV;AAzBA,IAyBA,IAAA;AAAA,EAMW,aAAa,IAAI,EAAO,OAAO,GAAG,GAAG,OANhD,EAWW,QAAQ,IAAI,EAAO,MAAM,GAAG,QAAW,OAXlD,EAgBW,WAAW,IAAI,EAAO,MAAM,GAAG,QAAW,MAhBrD,EAqBW,aAAa,IAAI,EAAO,MAAM,MAAQ,GAAG;AChDpD,IAAA,IAAA,6BAAW;SACT,KAAK,GAA+B,GAAiB,GAAwB;AAClF,QAAI,MAAe,MAAM;AACvB,UAAM,IAAU,MAAS,SAAY,mBAAmB,IAAI,MAAM,UAAU,MAAM,KAAK,GAAM,KAAK,UAE5F,IAAM;;WADI,MAAY,SAAY,mBAAmB;;QACQ;AACnE,YAAM,IAAI,MAAM;;;SAIb,QAAW,GAAmC;AACnD,MAAK,KAAK,KAAM,MAAyB;;SAGpC,cAAc,GAA2B;AAC9C,QAAM,IAAO,KAAK,KAAK,GACjB,IAAI,KAAK,MAAM,IAAU;AAC/B,QAAI,IAAI,MAAS,GAAS;AACxB,UAAM,IAAI,KAAK,KAAK;AAWpB,aAVc,CACZ,CAAC,GAAG,IACJ,CAAC,GAAG,IACJ,CAAC,GAAG,IACJ,CAAC,CAAC,GAAG,IACL,CAAC,IAAI,IACL,CAAC,CAAC,GAAG,CAAC,IACN,CAAC,GAAG,KACJ,CAAC,GAAG,CAAC,IAEM,IAAI;;AAEnB,WAAO,CAAC,KAAK,IAAI,IAAU,KAAK,IAAI;;GA/BjC;ACIA,IAAA,IAAA,6BAAc;SAQZ,KAAK,GAA8B;AACxC,QAAI,aAAa;AACf,aAAO;AAET,QAAI,OAAO,KAAM;AACf,aAAO,IAAI,EAAQ,GAAG;AAExB,UAAM,IAAI,EAAc,4BAA4B,EAAC,GAAA;;SAGhD,MAAM,GAAmB,GAAwB;AACtD,QAAM,CAAC,GAAK,KAAO,EAAK,cAAc;AACtC,WAAO,IAAI,EAAQ,IAAY,GAAK,IAAY;;SAG3C,WAAW,GAA6B;AAC7C,QAAI,aAAa;AACf,aAAO,EAAE;AAEX,QAAI,OAAO,KAAM;AACf,aAAO;AAET,UAAM,IAAI,EAAc,4BAA4B,EAAC,GAAA;;SAGhD,WAAW,GAA6B;AAC7C,QAAI,aAAa;AACf,aAAO,EAAE;AAEX,QAAI,OAAO,KAAM;AACf,aAAO;AAET,UAAM,IAAI,EAAc,4BAA4B,EAAC,GAAA;;EAGvD,YAAY,GAAc,GAAc;AACtC,SAAK,OAAO,GACZ,KAAK,OAAO;;SAGP,iBAAiB,GAAqB,GAAqB,GAAgC;AAKhG,QAJA,IAAI,EAAQ,KAAK,IACjB,IAAI,EAAQ,KAAK,IACjB,IAAI,EAAQ,KAAK,IAEb,EAAE,UAAU,IAAI;AAClB,UAAI,CAAC,EAAE,UAAU;AACf,eAAO,CAAC,EAAE,MAAM,IAAI,UAAU;AAEhC,UAAI,CAAC,EAAE,UAAU;AACf,eAAO;AAET,YAAM,MAAM;;AAGd,QAAM,IAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,SAC7C,IAAM,EAAE,MAAM,KACd,IAAQ,EAAE,MAAM;AACtB,WAAO,EAAK,IAAI,OAAK,EAAI,MAAM,GAAG,UAAU;;EAG9C,UAAU,GAAyB;AACjC,WAAI,aAAiB,IACZ,KAAK,SAAS,EAAM,QAAQ,KAAK,SAAS,EAAM,OAErD,OAAO,KAAU,WACZ,KAAK,SAAS,KAAS,KAAK,SAAS,IAEvC;;EAGT,uBAAuB,GAAmC,GAA0B;AAClF,QAAI,aAAiB,KAAW,OAAO,KAAU,UAAU;AACzD,UAAM,IAAI,KAAK,MAAM,EAAQ,KAAK;AAClC,aAAO,KAAK,IAAI,EAAE,SAAS,KAAW,KAAK,IAAI,EAAE,SAAS,KAAW,EAAE,SAAS;;AAElF,WAAO;;EAGT,QAAgB;AACd,WAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;;EAGlD,MAAc;AACZ,WAAO,KAAK,KAAK,KAAK;;EAGxB,OAAgB;AACd,QAAM,IAAI,KAAK;AACf,WAAI,IAAI,OACC,EAAQ,MAAM,GAAG,KAAK,WAExB,KAAK,UAAU,KAAK,KAAK;;EAGlC,KAAK,GAA8B;AACjC,QAAM,IAAI,EAAQ,KAAK;AACvB,WAAO,IAAI,EAAQ,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE;;EAGvD,MAAM,GAA8B;AAClC,QAAM,IAAI,EAAQ,KAAK;AACvB,WAAO,IAAI,EAAQ,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE;;EAGvD,MAAM,GAA8B;AAClC,QAAM,IAAI,EAAQ,KAAK;AACvB,WAAO,IAAI,EAAQ,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE;;EAGjG,UAAU,GAA8B;AACtC,QAAM,IAAI,EAAQ,KAAK,IACjB,IAAI,EAAE;AACZ,QAAI,MAAM;AACR,YAAM,IAAI,MAAM;AAGlB,QAAM,IAAI,KAAK,MAAM,EAAE;AACvB,WAAO,IAAI,EAAQ,EAAE,OAAO,GAAG,EAAE,OAAO;;EAG1C,QAAwC;AACtC,QAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,OAC1B,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI;AAC1C,QAAI,MAAM;AACR,aAAO,CAAC,EAAQ;AAElB,QAAI,MAAM,KAAK,IAAI;AACjB,aAAO,CAAC,IAAI,EAAQ,GAAG,IAAI,IAAI,EAAQ,GAAG,CAAC;AAG7C,QAAM,IAAI,KAAK,UAAU,GACnB,IAAI,EAAQ,MAAM,GAAG;AAC3B,WAAO,CAAC,GAAG,EAAE,MAAM;;EAGrB,YAAqB;AACnB,WAAO,IAAI,EAAQ,KAAK,MAAM,CAAC,KAAK;;EAGtC,SAAS,GAAyB;AAChC,WAAA,IAAS,KAAU,EAAO,OACnB,EAAO,oBAAoB,KAAK,yBAAyB,KAAU,KAAK,mBAAmB;;EAGpG,MAAe;AACb,WAAO,IAAI,EAAQ,CAAC,KAAK,MAAM,CAAC,KAAK;;EAGvC,SAAS,GAAqC;AAC5C,WAAI,MAAa,OAAO,KAAK,SAAS,KAAK,KAAK,QAAQ,IAC/C,IAAI,EAAQ,KAAK,KAAK,KAAK,OAAO,KAEvC,EAAQ,KAAK,UAAU,KAClB,EAAQ,MAEb,KAAK,UAAU,EAAQ,QAClB,EAAQ,OAEV,KAAK,KAAK,MAAM,EAAQ,KAAK,IAAW;;EAGjD,MAAe;AACb,WAAO,EAAQ,MAAM,KAAK,IAAI,KAAK,OAAO,KAAK;;EAGjD,MAAe;AACb,QAAM,IAAI,KAAK,MAAM,EAAQ;AAC7B,WAAO,EAAE,MAAM,KAAK,EAAE,MAAM,OAAO,MAAM;;EAG3C,MAAe;AACb,QAAM,IAAI,KAAK,MAAM,EAAQ;AAC7B,WAAO,EAAE,MAAM,MAAM,EAAE,MAAM,OAAO,UAAU,IAAI,EAAQ,GAAG;;EAG/D,MAAe;AACb,WAAO,KAAK,MAAM,UAAU,KAAK;;EAGnC,KAAc;AACZ,WAAO,IAAI,EAAQ,KAAK,IAAI,KAAK,QAAQ,KAAK;;EAGhD,QAAgB;AACd,WAAO,KAAK,MAAM,KAAK,MAAM,KAAK;;EAG5B,yBAAyB,GAAwB;AACvD,WAAI,KAAK,IAAI,KAAK,SAAS,EAAO,uBACzB,EAAO,YAAY,KAAK,QAE7B,KAAK,IAAI,KAAK,SAAS,EAAO,uBAC5B,KAAK,IAAI,KAAK,OAAO,MAAM,EAAO,uBAC7B,MAEL,KAAK,IAAI,KAAK,OAAO,MAAM,EAAO,uBAC7B,OAEF,GAAG,EAAO,YAAY,KAAK,WAG7B,KAAK,mBAAmB;;EAGzB,mBAAmB,GAAwB;AACjD,QAAM,IAAY,KAAK,QAAQ,IAAI,MAAM,KACnC,IACJ,EAAO,qBAAqB,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,MAAM,EAAO,uBACpE,KACA,EAAO,YAAY,KAAK,IAAI,KAAK;AAEvC,WAAO,GADQ,GAAO,qBAAqB,EAAO,gBAAgB,UAAa,KAAK,OAAO,IAAI,KAAK,OACjF,EAAO,YAAY,KAAK,QAAQ,IAAY;;GA5N5D;AAAA,IAAA,IAAA;AAAA,EACW,OAAO,IAAI,EAAQ,GAAG,IADjC,EAEW,MAAM,IAAI,EAAQ,GAAG,IAFhC,EAGW,IAAI,IAAI,EAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;AiBvBrC,IAAA,KAAA,GAAA,CAAA,IAAA,OAAA;AAuCC,EAAA,UAAS,GAAM;AAEd;AAKA,QAAI,IAAgB,KAGhB,IAAI,EACN,GAAK,GACL,GAAK,GACL,GAAK;AAGP,eAAqB,GAAM;AAEzB,mBAA4B;AAC1B,YAAI,KAAO,MAAM,MAAM,MAAM;AAC7B,WAAK,OAAU,KAAK,OAAU,GAC9B,KAAK,QAAW,GAAK,OACrB,KAAK,UAAa,GAAK;;AAJzB;AAAS,SAAA,GAAA;AAYT,mBAAiC;;AAAjC;AAAS,aAAA,GAAA,GAAA,0BACT,EAAsB,YAAY,MAAM,WACxC,EAAiB,YAAY,IAAI,KAE1B;;AAlBT;AAAS,OAAA,GAAA;AAqBT,QAAI,IAAiB,GAAS,iBAAoB,EAAY,mBAC1D,KAAmB,GAAS,mBAAsB,EAAY;AAElE,gBAAgB,GAAG,GAAG;AAEpB,aAAI,MAAM,IAAI,SAAS,GAAG,QACxB,KAEK,IAAI;;AALb;AAAS,OAAA,IAAA;AAQT,iBAA6B;AAC3B,YAAM,IAAI;;AADZ;AAAS,OAAA,GAAA;AAIT,eAAmB,GAAK;AAQtB,eANI,IAAU,IAEV,IAAI,GACJ,KAAI,GACJ,IAAI,GAED,KAAK,KAAG;AAEb,eAAO,IAAI,OAAM;AACf,eAAK,IACL,EAAQ,MAAM,GAAQ,OAAM,KAAK;AAEnC,aAAK,IAAI,IAAI;;AAGf,aAAI,MAAM,IACJ,IAAI,KACR,GAAQ,KAAM,GAAQ,MAAM,KAAK,KAEjC,EAAQ,KAAQ,GAAQ,MAAQ,KAAK,GAEhC;;AAvBT;AAAS,OAAA,GAAA;AA0BT,QAAI,IAAQ,GAAA,SAAS,GAAI,GAAI;AAE3B,UAAI,IAAI,GAAG,KAAI,GAAG,IAAI,GAClB,IAAI,GAAG,IAAI,GAAG,KAAI,GAAG,IAAI,GAAG,IAAI,GAEhC,IAAI,GAAG,IAAI,GACX,KAAI,GAAG,KAAI,GAEX,IAAI,KACJ;AAEJ,UAAwB,KAAO;AAExB,YAAI,MAAO;AAChB,cAAI,GACJ,KAAI,GACJ,IAAI,IAAI;;AAER,kBAAQ,OAAO;iBAER,UACH;AACM,qBAAO,KAAM,OAAO,IACtB,KAAI,EAAG,GACP,KAAI,EAAG,GACH,OAAO,KACT,MAAK,EAAG,MACD,KAAK,IACd,KAAI,EAAG,IACH,KAAK,KACP,MAAI,EAAG,OAET,KAEF,IAAI,IAAI;AACR;;iBAEC,UACH;AAME,kBALI,IAAK,KACP,KAAI,GACJ,IAAK,CAAC,IAGJ,IAAK,MAAM;AACb,oBAAI;uBACK,IAAK,GAAG;AAUjB,qBARI,KAAM,KACR,KAAI,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI,KAAM,KAAK,QACpD,KAAM,IAMD,KAAK,KAAK,MAAK;AAGpB,sBAFA,KAAK,KAAI,MAAM,KAAI,KAEf,MAAO,IAAG;AACR,wBAAI,MAAK,IACX,KAAI,IAAI,IACR,KAAI,IAAI,MACC,KAAI,IACb,KAAI,IACJ,KAAI,MAEJ,KAAI,GACJ,KAAI;AAEN;;AAII,wBAAK,KACP,MAAK,IACL,KAAK,MAEL,OAAK,GACL,MAAK,IAGH,IAAI,IACN,KAAI,IACJ,KAAI,MAEJ,KAAI,GACJ,KAAI;AAIV,qBAAK;;AACI,gBAAA,OAAM,MAAO,MAAM,OAC5B,MAAI,IAAI;AAEV;;iBAEC;AAgDD,kBA9CA,IAAI,EAAG,MAAM,WAET,MAAM,QACR,KAEE,EAAE,OAAO,MACX,KAAI,IACJ,OACS,EAAE,OAAO,OAClB,KAGE,EAAE,WAAW,IAAI,IACnB,IAAI,GAAO,EAAE,MAAM,KACV,EAAE,IAAI,OAAO,OAAO,EAAE,OAAO,MAElC,GAAE,OAAO,OACX,KAAI,GAAO,EAAE,MAAM,KAErB,KAGI,KAAI,MAAM,EAAE,UAAU,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,QACjG,KAAI,GAAO,EAAE,IAAI,IACjB,IAAI,KAAK,IAAI,IAAI,EAAE,GAAG,SACtB,MAIE,GAAE,OAAO,OAAO,EAAE,IAAI,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,IAAI,OAAO,QACnE,MAAI,GAAO,EAAE,IAAI,IAAI,IACrB,IAAI,KAAK,IAAI,IAAI,EAAE,IAAI,GAAG,UAAU,GACpC,KAAK,MAGE,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,MAC1C,KAAI,GAAO,EAAE,IAAI,IACjB,IAAI,GAAO,EAAE,IAAI,IAAI,IACrB,KAAK,KACI,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,OAC1C,KAAI,GAAO,EAAE,IAAI,IACjB,IAAI,GAAO,EAAE,IAAI,IAAI,IACrB,IAAI,GAAO,EAAE,IAAI,IAAI,IACrB,KAAK,IAGH,EAAE,UAAU,GAAG;AACjB,qBAAI,IAAI,GACR,IACA,IAAI,KAAI,KAAI,IAAI,IAAI;AACpB;;;AAMJ;;AAGN,UAAI,OAAM;AACR,cAAM,IAAI;AAGZ,QAAE,IAAO,IAAI,IAAI,KAAK,GACtB,EAAE,IAAO,KAAK,IAAI,IAClB,EAAE,IAAO,KAAK,IAAI;OApKR;AAuKZ,gBAAgB,GAAG,GAAG,GAAG;AAGvB,eADI,KAAI,GACD,IAAI,GAAG,IAAK,IAAI,IAAK,GAAG,MAAM;AAE/B,YAAI,KACN,MAAK,KAAI,IAAK;AAGlB,aAAO;;AATT;AAAS,OAAA,IAAA;AAaT,gBAAkB,GAAG,GAAG;AAEtB,aAAO,IAAI,MAAM,GACf,KAAK;AAAG;AAGV,aAAO,IAAI,MAAM,GACf,KAAK;AAAG;AAGV,UAAI,MAAM;AACR,eAAO;AAUT,eAHI,IAAM,KAAK,GACX,KAAI,GAED,MAAQ,GAAG;AAGhB,YAFA,IAAM,IAAM,KAAK,GAEb,KAAI;AACN,iBAAO;AAEX,aAAO;;AA3BT;AAAS,OAAA,IAAA;AA+BT,gBAAoB,GAAG,GAAG,GAAK;AAK7B,eAHI,KAAO,GACP,IAAO,GAAO,IAAI,GAAK,IAElB,IAAI,GAAG,IAAI,KAAK,KAAK;AAG5B,YAAI,OAAS;AACX,iBAAO;AAET,aAAO,KAAO,KAAK,GACnB,IAAO,IAAO,KAAK;;AAErB,aAAO;;AAdT;AAAS,OAAA,IAAA;AAiBT,gBAAa,GAAG,GAAG;AAEjB,UAAI,CAAC;AACH,eAAO;AACT,UAAI,CAAC;AACH,eAAO;AAET,iBAAU;AAER,YADA,KAAK,GACD,CAAC;AACH,iBAAO;AAET,YADA,KAAK,GACD,CAAC;AACH,iBAAO;;;AAbb;AAAS,OAAA,IAAA;AAwBT,gBAAkB,GAAG,GAAG;AAEtB,UAAI,CAAE,iBAAgB;AACpB,eAAO,IAAI,GAAS,GAAG;AAGzB,QAAM,GAAG,IAET,IAAI,GAAI,EAAE,GAAM,EAAE,IAElB,KAAK,IAAO,EAAE,GACd,KAAK,IAAO,EAAE,IAAO,GACrB,KAAK,IAAO,EAAE,IAAO;;AAZvB;AAAS,OAAA,IAAA,aAeT,GAAS,YAAY,EAEnB,GAAK,GACL,GAAK,GACL,GAAK,GAOL,KAAO,WAAW;AAEhB,aAAO,IAAI,GAAS,KAAK,GAAM,KAAK;OAQtC,KAAO,WAAW;AAEhB,aAAO,IAAI,GAAS,CAAC,KAAK,IAAO,KAAK,GAAM,KAAK;OAQnD,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAA,EAAM,GAAG,IACF,IAAI,GACT,KAAK,IAAO,KAAK,IAAO,EAAE,IAAO,EAAE,IAAO,KAAK,IAAO,EAAE,GACxD,KAAK,IAAO,EAAE;OASlB,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAA,EAAM,GAAG,IACF,IAAI,GACT,KAAK,IAAO,KAAK,IAAO,EAAE,IAAO,EAAE,IAAO,KAAK,IAAO,EAAE,GACxD,KAAK,IAAO,EAAE;OASlB,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAA,EAAM,GAAG,IACF,IAAI,GACT,KAAK,IAAO,EAAE,IAAO,KAAK,IAAO,EAAE,GACnC,KAAK,IAAO,EAAE;OASlB,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAA,EAAM,GAAG,IACF,IAAI,GACT,KAAK,IAAO,EAAE,IAAO,KAAK,IAAO,EAAE,GACnC,KAAK,IAAO,EAAE;OASlB,OAAS,WAAW;AAClB,aAAO,IAAI,GAAS;OAQtB,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAI,MAAM,KAAK,MAAS,MAAM,KAAK,KAC1B,IAAI,GAAS,OAGlB,MAAM,SACD,IAAI,GAAS,KAAK,IAAO,KAAK,IAAO,KAAK,GAAM,KAGzD,GAAM,GAAG,IACC,EAAE,MAAR,KAAsB,KAAK,MAAX,KAClB,GAAS,GAAG,IAiBP,IAAI,GACT,KAAK,IAAQ,GAAE,IAAO,KAAK,KAAS,GAAE,IAAO,KAAK,IAClD,EAAE,IAAO,KAAK;OASlB,KAAO,SAAS,GAAG,GAAG;AAEpB,aAAA,EAAM,GAAG,IAIF,IAAI,GAAS,GAAI,EAAE,GAAM,KAAK,KAAQ,GAAI,EAAE,GAAM,KAAK,IAAO,EAAE,IAAO,KAAK;OAQrF,KAAO,SAAS,GAAG,GAAG;AAMpB,aAJA,EAAM,GAAG,IAIL,EAAE,MAAS,KAAK,KAAK,MAAS,IACzB,IAAI,OAEN,IAAI,GAAS,EAAE,IAAO,KAAK,GAAM,GAAI,EAAE,GAAM,KAAK,KAAQ,GAAI,EAAE,GAAM,KAAK;OAQpF,MAAQ,SAAS,GAAQ;AAIvB,aAFA,IAAS,KAAK,IAAI,IAAI,KAAU,IAE5B,MAAM,KAAK,MAAS,MAAM,KAAK,KAC1B,IAAI,GAAS,OAEf,IAAI,GAAS,KAAK,KAAK,IAAS,KAAK,IAAO,KAAK,IAAO,KAAK,IAAO;OAQ7E,OAAS,SAAS,GAAQ;AAIxB,aAFA,IAAS,KAAK,IAAI,IAAI,KAAU,IAE5B,MAAM,KAAK,MAAS,MAAM,KAAK,KAC1B,IAAI,GAAS,OAEf,IAAI,GAAS,KAAK,MAAM,IAAS,KAAK,IAAO,KAAK,IAAO,KAAK,IAAO;OAQ9E,OAAS,SAAS,GAAQ;AAIxB,aAFA,IAAS,KAAK,IAAI,IAAI,KAAU,IAE5B,MAAM,KAAK,MAAS,MAAM,KAAK,KAC1B,IAAI,GAAS,OAEf,IAAI,GAAS,KAAK,MAAM,IAAS,KAAK,IAAO,KAAK,IAAO,KAAK,IAAO;OAQ9E,SAAW,WAAW;AAEpB,aAAO,IAAI,GAAS,KAAK,IAAO,KAAK,GAAM,KAAK;OAQlD,KAAO,SAAS,GAAG,GAAG;AAMpB,UAJA,EAAM,GAAG,IAIL,EAAE,MAAS;AAEb,eAAI,EAAE,IAAO,IACJ,IAAI,GAAS,KAAK,IAAI,KAAK,IAAO,KAAK,GAAM,EAAE,IAAO,KAAK,IAAI,KAAK,GAAM,EAAE,MAE5E,IAAI,GAAS,KAAK,IAAI,KAAK,IAAO,KAAK,GAAM,EAAE,IAAO,KAAK,IAAI,KAAK,GAAM,EAAE;AAUvF,UAAI,KAAK,IAAO;AAAG,eAAO;AAG1B,UAAI,IAAI,EAAU,KAAK,IACnB,KAAI,EAAU,KAAK,IAGnB,IAAI,GACJ,IAAI;AACR,eAAS,KAAK;AACZ,YAAI,MAAM,KACV;AAAA,cAAI,MAAM,KAAK;AACb,gBAAI;AACJ;;AAIF,cAFA,EAAE,MAAK,EAAE,GAEL,EAAE,KAAK,EAAE,MAAS;AACpB,cAAE,MAAK,EAAE;;AACJ,mBAAO;AACd,eAAI,KAAK,IAAI,GAAG,EAAE;;AAGpB,eAAS,KAAK;AACZ,YAAI,MAAM,KAGV;AAAA,cAFA,GAAE,MAAK,EAAE,GAEL,GAAE,KAAK,EAAE,MAAS;AACpB,eAAE,MAAK,EAAE;;AACJ,mBAAO;AACd,eAAI,KAAK,IAAI,GAAG,GAAE;;AAGpB,aAAI,EAAE,IAAO,IACJ,IAAI,GAAS,GAAG,KAElB,IAAI,GAAS,GAAG;OAQzB,QAAU,SAAS,GAAG,GAAG;AAEvB,aAAA,EAAM,GAAG,IACF,KAAK,IAAO,KAAK,IAAO,EAAE,MAAS,EAAE,IAAO,EAAE,IAAO,KAAK;OAQnE,SAAW,SAAS,GAAG,GAAG;AAExB,QAAM,GAAG;AACT,UAAI,IAAK,KAAK,IAAO,KAAK,IAAO,EAAE,IAAO,EAAE,IAAO,EAAE,IAAO,KAAK;AACjE,aAAQ,KAAI,KAAM,KAAI;OAGxB,UAAY,SAAS,GAAK;AAIxB,UAAI,MAAM,KAAK,MAAS,MAAM,KAAK;AACjC,eAAO;AAGT,UAAI,IAAO,KAAK,MAAS;AAEzB,UAAM,KAAO;AAEb,iBAAa,GAAG;AACd,eAAI,EAAE,WAAW,IACR,IAAI,GAAS,EAAE,MACjB,EAAI,EAAE,MAAM,IAAI,UAAa,IAAO,EAAE;;AAH/C;AAAS,SAAA,GAAA;AAMT,eAAS,KAAI,GAAG,KAAI,EAAK,QAAQ,MAAK;AACpC,YAAI,IAAM,EAAI,EAAK,MAAM,GAAG,KAAI;AAChC,YAAI,EAAI,IAAO,KAAK,OAAU,MAAS,YAAY;AACjD,iBAAO,EAAI,IAAO,KAAK;;AAG3B,aAAO;OAQT,WAAa,SAAS,GAAG,GAAG;AAE1B,aAAA,EAAM,GAAG,IACF,CAAE,EAAE,GAAE,IAAO,KAAK,MAAW,KAAK,IAAO,EAAE,IAAS,GAAE,IAAO,KAAK;OAQ3E,SAAW,WAAW;AAEpB,aAAO,KAAK,IAAO,KAAK,IAAO,KAAK;OAQtC,YAAc,SAAS,GAAc;AAEnC,UAAI,GAAO,IAAM,IACb,KAAI,KAAK,GACT,IAAI,KAAK;AACb,aAAI,KAAK,IAAO,KACd,MAAO,MAGL,MAAM,IACR,KAAO,KAGH,MAAiB,KAAQ,KAAK,MAAM,KAAI,MAAM,KAChD,MAAO,GACP,KAAO,KACP,MAAK,IAGP,KAAO,IACP,KAAO,KACP,KAAO,IAEF;OAQT,SAAW,SAAS,GAAc;AAEhC,UAAI,GAAO,IAAM,IACb,KAAI,KAAK,GACT,IAAI,KAAK;AACb,aAAI,KAAK,IAAO,KACd,MAAO,MAGL,MAAM,IACR,KAAO,KAGH,MAAiB,KAAQ,KAAK,MAAM,KAAI,MAAM,KAChD,MAAO,GACP,MAAK,IAGP,KAAO,WACP,KAAO,IACP,KAAO,MACP,KAAO,GACP,KAAO,MAEF;OAQT,aAAe,WAAW;AAExB,UAAI,GACA,IAAI,KAAK,GACT,IAAI,KAAK,GACT,KAAM;AAEV,UAAI,MAAM,MAAM,MAAM;AACpB,eAAO;AAGT;AACE,WAAI,KAAK,KAAK,MAAM,IAAI,KACxB,IAAI,IAAI,GACR,IAAI,GACJ,IAAI;aACG,MAAM;AAEf,aAAO;OAQT,UAAY,SAAS,GAAK;AAExB,UAAI,GACA,IAAI,KAAK,GACT,KAAI,KAAK;AAEb,UAAI,MAAM,MAAM,MAAM;AACpB,eAAO;AAGT,UAAM,KAAO;AAEb,UAAI,IAAS,GAAS,GAAG,KACrB,IAAS,GAAW,GAAG,IAAG,IAE1B,IAAM,KAAK,MAAS,KAAK,MAAM;AAUnC,UARA,KAAO,IAAI,KAAI,GAEf,KAAK,IACL,KAAK,IAED,KACF,MAAO,MAEL,GAAQ;AAEV,iBAAS,KAAI,GAAQ;AACnB,eAAO,IAAI,KAAI,GACf,KAAK,IACL,KAAK;AAEP,aAAO;AACP,iBAAS,KAAI,GAAQ;AACnB,eAAO,IAAI,KAAI,GACf,KAAK,IACL,KAAK;AAEP,aAAO;;AAEP,iBAAS,KAAI,GAAK,KAAK;AACrB,eAAO,IAAI,KAAI,GACf,KAAK,IACL,KAAK;AAGT,aAAO;SAIP,OAAO,UAAW,cAAc,OAAO,MACzC,OAAO,IAAI,WAAW;AACpB,aAAO;SAEA,OAAO,MAAY,WAC5B,QAAO,eAAe,IAAU,cAAc,EAAE,OAAS,SACzD,GAAS,UAAa,IACtB,GAAS,WAAc,IACvB,GAAO,UAAa,MAEpB,EAAK,WAAc;KAGpB;;AAAA,IAAA,KAAA,GAAA,CAAA,IAAA,OAAA;AE93BH,EAAA,UAAA,GAAA;AAAA,WAAA,MAAA,YAAA,OAAA,MAAA,cAAA,GAAA,UAAA,MAAA,OAAA,UAAA,cAAA,OAAA,MAAA,OAAA,IAAA,KAAA,QAAA,UAAA,cAAA,SAAA,OAAA,UAAA,cAAA,SAAA,OAAA,QAAA,cAAA,OAAA,MAAA,WAAA;KAAA,WAAA;AAAA,QACA,IAAA;AAAA,WAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,UAAA,QAAA,EAAA,UCDe,SAAC,GAAA;AAAD,aAAA,CAAA,EAAmB,KAAA,CAAS,EAAM,WAAW,aAAiB,EAAM;;AAAA,QAAA,IAAA;AAAA,WAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,OAAA,GAAA,EAAA,YC4B5E,SAAoB,GAAA;AACzB,aAAI,IAAA,EAAA,SAAS,KACJ,IAGQ,GAAK,iBAAiB,GAEvB,eAAe,EAAI;OAAA,EAAA,SAAA,EAAA,aAAA;AAjC9B,QAAI,IAAA;AAAa,MAAA,aAAA;AAExB,QAAI,IAAA;AAGG,eAAe,GAAA;AAGpB,QAAA,aAAA,IAAa;AAGb,UAAM,KAAK,EAAO,SAAS,eAAe;AAGtC,SAAG,kBAAkB,EAAO,YAAmC,OAAhB,EAAO,QAAS,cAAc,EAAO,KAAK,QAAQ,MAEnG,KAAS,EAAO,KAAK,KAGvB,EAAA,SAAA,IAAM;;AAdD;AAAS,OAAA,GAAA,MAcR,EAAA,SAAA,GAGc,OAAX,UAAW,eAAiB,UACrC,EAAK;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA,MAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACpBP,QAIM,IAAS,GAAA,SAAC,GAAA;AAAD,aAAA,CAAA,CAAqD,KAAS,GAAO,OAAU;OAA/E,MAET,IAAO,GAAA,SAAC,GAAA;AAAD,aAAmE,OAAV,KAAU;OAAnE,MAAyD,IA2BvD,EACb,QAlCa,SAAC,GAAA;AAAD,aAAiC,MAAU,EAAI,UAAU,IAAA,EAAA,SAAS;OAmC/E,SAjCc,SAAC,GAAA;AAAD,aAA2C,EAAO,MAAU,EAAM,aAAa;OAkC7F,QAAA,GACA,MAAA,GACA,QA9Ba,SAAC,GAAA;AAAD,aAAkD,OAAV,KAAU;OA+B/D,MA7BW,SAAC,GAAA;AAAD,aAAmD,OAAV,KAAU;OA8B9D,QA5Ba,SAAC,GAAA;AAAD,aAAkD,OAAV,KAAU;OA6B/D,SA3Bc,SAAC,GAAA;AACf,UAAA,CAAK,KAAS,GAAO,OAAU;AAC7B,eAAA;AAIF,UAAM,KAAU,EAAI,UAAU,MAAU,EAAI;AAE5C,aAAO,kBAAkB,KAAlB,GAA8B,GAAQ,YACzC,aAAiB,GAAQ,UACzB,EAAM,aAAa,KAA+B,OAAnB,EAAM,YAAa;OAkBtD,aAfiC,SAAC,GAAA;AAAD,aACjC,EAAO,MAAA,CAAA,CAAY,EAAM,eAAe,oBAAoB,KAAK,EAAM,YAAY;OAenF,OAbY,SAAoB,GAAA;AAApB,aACZ,EAAO,MAAiB,EAAM,WAAvB,UAAiD,EAAK,EAAM;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACGrE,gBAAA,GAAA;AAAsC,UAAf,KAAe,EAAf;AACrB,UAAI,GAAY,SAAS,SAAS,QAAlC;AAEA,YAAM,IAAO,GAAY,SAAS;AAE9B,cAAS,MACX,IAAY,OAAO,IAAI,KAAK,IAAI,GAAY,OAAO,MAAM,KAAK,GAC9D,GAAY,OAAO,IAAI,OAAO,IAAI,GAAY,OAAO,MAAM,OAAO,GAElE,GAAY,OAAO,SAAS,OAAO,IAAI,GACvC,GAAY,OAAO,SAAS,KAAK,IAAI,KAC5B,MAAS,OAClB,IAAY,OAAO,IAAI,KAAK,IAAI,GAAY,OAAO,MAAM,KAAK,GAC9D,GAAY,OAAO,IAAI,OAAO,IAAI,GAAY,OAAO,MAAM,OAAO,GAElE,GAAY,OAAO,SAAS,OAAO,IAAI,GACvC,GAAY,OAAO,SAAS,KAAK,IAAI;;;AAhBzC;AAAS,OAAA,IAAA;AAoBT,gBAAA,GAAA;AAAwC,UAAvB,KAAuB,EAAvB,QAAQ,IAAe,EAAf;AACvB,UAAI,EAAY,SAAS,SAAS,QAAlC;AAEA,YAAM,IAAO,EAAY,SAAS;AAElC,YAAI,MAAS,OAAO,MAAS,KAAK;AAChC,cAAM,KAAW,MAAS,MAAM,MAAM;AAEtC,aAAO,KAAK,MAAY,EAAY,OAAO,MAAM,KAAK,KACtD,GAAO,OAAO,MAAY,EAAY,OAAO,MAAM,OAAO,KAC1D,GAAO,MAAM,MAAY;;;;AAV7B;AAAS,OAAA,IAAA,MAUoB,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AA2C7B,QA4BM,KAAe,EACnB,IAAI,gBACJ,SAlHF,SAAkB,GAAA;AAAc,UACtB,KAAoC,EAApC,SAAS,IAA2B,EAA3B,cAAc,IAAa,EAAb;AAE/B,QAAa,UAAU,YAAY,GAAK,WAExC,GAAQ,IAAI,OAAO,IACnB,GAAQ,WAAW,OAAO,aAE1B,EAAS,QAAQ,OAAO,GAAK;OA2G7B,WAAW,EACT,mCAAmC,IACnC,8BAA8B,IAG9B,4BAA4B,IAC5B,oBAAoB,SAAC,GAAA;AAAQ,UACnB,KAAuC,EAAvC,aAAa,IAA0B,EAA1B,cAAc,IAAY,EAAZ,SAC7B,KAAc,EAAa,QAAQ;AAEzC,UACI,MAAe,GAAY,WAAA,EAE5B,GAAY,iBAAA,CACX,gBAAgB,KAAK,GAAY,gBAChC,KAAU,EAAa,QAAQ,KAAK,iBAAkB;AAU3D,eALA,EAAI,SAAS,EACX,MAAM,QACN,MAAM,GAAY,aAAa,UAAU,GAAY,YAAY,GAAY,YAAA;SAMnF,WA3DiC,SAEjC,GAAA;AAEA,aAAI,GAAA,QAAG,OAAO,KACZ,MAAK,QAAQ,KAAK,UAAU,EAAQ,YAAlB,OAClB,KAAK,aAAa,QAAQ,IAC1B,KAAK,YAAY,QAAQ,IAErB,mBAAmB,KAAK,EAAQ,aAClC,MAAK,QAAQ,KAAK,WAAW,EAAQ,WAEnC,aAAa,KAAK,EAAQ,cAC5B,MAAK,QAAQ,KAAK,YAAY,EAAQ,YAGjC,QAGL,GAAA,QAAG,KAAK,KACV,MAAK,QAAQ,KAAK,UAAU,GAErB,QAGF,KAAK,QAAQ;OAmCpB,YAAA,IACA,MAAA,IACA,UAAU,EACR,WAAW,MACX,UAAU,QAGZ,WAvCmB,WAAA;AAwCjB,aAAO;SAAA,KAII;AAAA,OAAA,UAAA;AAAA,QAAA,IAAA;AAAA,WAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,UAAA;ACxLf,QAAM,IAYF,EACF,MAiBF,SAAe,GAAA;AACb,UAAM,KAAM;AAEZ,QAAW,WAAW,GAAI,UAC1B,EAAW,mBAAmB,GAAI,oBAAoB,GACtD,EAAW,aAAa,GAAI,cAAc,GAC1C,EAAW,gBAAgB,GAAI,iBAAiB,GAChD,EAAW,qBAAqB,GAAI,sBAAsB,GAC1D,EAAW,UAAU,GAAI,WAAW,GACpC,EAAW,cAAc,GAAI,eAAe,EAAW,SAEvD,EAAW,QAAQ,GAAI,OACvB,EAAW,QAAQ,GAAI,SAAS,GAChC,EAAW,eAAe,GAAI,gBAAgB,GAAI;OA7BlD,UAAU,MACV,kBAAkB,MAClB,YAAY,MACZ,eAAe,MACf,oBAAoB,MACpB,SAAS,MACT,aAAa,MACb,OAAO,MACP,OAAO,MACP,cAAc;AAGhB,iBAAS;;AAAT;AAAS,OAAA,GAAA;AAAA,QAAA,KAEM;AAAA,MAAA,UAAA;AAAA,QAAA,IAAA;AAAA,WAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,UAAA;ACzBf,QAAM,IAAU,EACd,MAmBF,SAAe,GAAA;AACb,UAAM,KAAU,EAAA,QAAW,SACrB,IAAgC,EAAO,aAAa;AAG1D,QAAQ,gBACN,kBAAkB,KACjB,GAAA,QAAG,KAAK,EAAO,kBAAkB,EAAA,QAAW,oBAAoB,EAAO,eAG1E,EAAQ,uBAAuB,EAAU,mBAAjC,SAAiC,CAAA,CAA8B,EAAA,QAAW,cAElF,EAAQ,QAAQ,iBAAiB,KAAK,EAAU,WAGhD,EAAQ,SAAS,iBAAiB,KAAK,EAAU,aAAa,YAAY,KAAK,EAAU,aAEzF,EAAQ,QAAQ,SAAS,KAAK,EAAU,YAGxC,EAAQ,gBACN,EAAU,YAAY,WAAW,EAAQ,iBAAiB,SAAS,KAAK,EAAU,YAGpF,EAAQ,0BAA2B,aAAa,GAAQ,YACpD,YACA,2BAA2B,GAAQ,YACjC,0BACA,wBAAwB,GAAQ,YAC9B,uBACA,sBAAsB,GAAQ,YAC5B,qBACA,qBAEV,EAAQ,cAAc,EAAQ,uBAC1B,EAAA,QAAW,iBAAiB,EAAO,iBACjC,EACA,IAAI,eACJ,MAAM,iBACN,MAAM,aACN,KAAK,YACL,MAAM,iBACN,QAAQ,sBAER,EACA,IAAI,aACJ,MAAM,eACN,MAAM,eACN,KAAK,cACL,MAAM,eACN,QAAQ,oBAEV,MAGJ,EAAQ,aAAa,EAAA,QAAW,YAAY,kBAAkB,EAAA,QAAW,WAAW,eAAe;OAzEnG,eAAe,MACf,sBAAsB,MACtB,QAAQ,MACR,OAAO,MACP,OAAO,MACP,eAAe,MACf,yBAAyB,MACzB,aAAa,MAQb,YAAY,QAAA,IA6DC;AAAA,MAAA,UAAA;AAAA,QAAA,KAAA;AC9CR,eAAqB,GAAA;AAC1B,UAAI,KAAS,EAAK;AAElB,UAAI,GAAA,QAAG,QAAQ,KAAS;AAGtB,eAAQ,MAAU,GAAe,SAAS,GAAA,QAAG,QAAQ;AAAA;AAIrD,eAAO;;AAGT,aAAO;;AAbF;AAAS,OAAA,GAAA;AAgBT,eAA0B,GAAkB,IAAA;AAMjD,aAJI,EAAI,WAAW,EAAI,cACrB,MAAW,GAAS,QAAQ,aAAa,OAGpC,EAAQ,EAAA,QAAQ,yBAAyB;;AAN3C;AAAS,OAAA,GAAA,MAMkC,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAlD3C,SAAuB,GAAc,IAAA;AAC1C,UAAI,EAAO;AACT,eAAO,EAAO,SAAS;AAGzB,aAAO,MAAO;AACZ,YAAI,OAAU;AACZ,iBAAA;AAGF,aAAS,GAAe;;AAG1B,aAAA;OAAO,GAAA,UAGF,SAAkB,GAAe,IAAA;AACtC,aAAO,GAAA,QAAG,QAAQ,MAAU;AAC1B,YAAI,EAAgB,GAAS;AAC3B,iBAAO;AAGT,YAAU,EAAW;;AAGvB,aAAO;OAAA,GAAA,aAAA,GAAA,GAAA,kBAAA,GAAA,GAAA,wBA+BF,SAAgC,GAAA;AAIrC,eAFI,IADA,IAA6B,IAGxB,IAAI,GAAG,IAAI,EAAS,QAAQ,KAAK;AACxC,YAAM,KAAc,EAAS,IACvB,KAAoB,EAAS;AAGnC,YAAK,MAAe,MAAM;AAI1B,cAAK,IAAL;AAKA,gBAAM,KAAoB,EAAU,KAC9B,KAAoB,EAAU;AAIpC,gBAAI,OAAsB,GAAY;AAIjC,kBAAI,OAAsB,GAAY;AAM3C,oBAAI,OAAsB,IAA1B;AASA,sBAAqB,EAAmB,SAAS,IAAqB,EAAe;AAErF,sBAAI,IAAA;AAGJ,sBACE,cAAuB,EAAA,QAAW,eAClC,cAAuB,EAAA,QAAW,cAAA,CAChC,eAAuB,EAAA,QAAW,gBACpC;AAEA,wBAAI,OAAgB;AAClB;AAGF,wBAAgB,GAAY;;AAE5B,wBAAgB;AAOlB,2BAJM,IAAqB,EAAe,GAAe,GAAY,gBACjE,IAAc,GAIhB,EAAmB,MACnB,EAAmB,OAAiB,EAAmB;AAEvD;AAGF,sBAAM,IAAU,CACd,EAAmB,IAAc,IACjC,EAAmB,IACnB,EAAmB;AAGrB,sBAAI,EAAQ;AAGV,6BAFI,KAAQ,EAAQ,GAAG,WAEhB,MAAO;AACZ,0BAAI,OAAU,EAAQ,IAAI;AACxB,6BAAmB,GACnB,IAAqB;AAErB;;AACK,0BAAI,OAAU,EAAQ;AAC3B;AAGF,2BAAQ,GAAM;;;AAqBO,uBA/EA,IA+EkB,KA/EL,IAgFpB,UAAS,EAAI,UAAU,IAAY,iBAAiB,IAAY,QAAQ,OAAO,MAChF,UAAS,EAAI,UAAU,IAAW,iBAAiB,IAAW,QAAQ,OAAO,MAhF1F,MAAmB;;AAPrB,qBAAmB;;AAdnB,iBAAmB;;AAmGzB,UAA6B,IAAkB;AAhB7C,aAAO;OAAA,GAAA,cAuBF,SAAsB,GAAkB,IAAkB,GAAA;AAC/D,aAAO,GAAA,QAAG,QAAQ,MAAU;AAC1B,YAAI,EAAgB,GAAS;AAC3B,iBAAA;AAKF,YAFA,KAAU,EAAW,QAEL;AACd,iBAAO,EAAgB,GAAS;;AAIpC,aAAA;OAAO,GAAA,mBAGF,SAA2B,GAAA;AAChC,aAAQ,EAAuB,2BAA2B;OAAA,GAAA,cAAA,IAAA,GAAA,uBAAA,IAAA,GAAA,iBA2BrD,SAAyB,GAAA;AAC9B,UAAM,KAAa,GAAqB;AAExC,UAAA,CAAK,EAAA,QAAQ,UAAU,IAAY;AACjC,YAAM,IAAS,GAAY,EAAI,UAAU;AAEzC,WAAW,QAAQ,EAAO,GAC1B,GAAW,SAAS,EAAO,GAC3B,GAAW,OAAO,EAAO,GACzB,GAAW,UAAU,EAAO;;AAG9B,aAAO;OAAA,GAAA,UAGF,SAAkB,GAAA;AAGvB,eAFM,KAAO,IAEN;AACL,WAAK,KAAK,IACV,IAAO,EAAW;AAGpB,aAAO;OAAA,GAAA,cAGF,SAAsB,GAAA;AAC3B,aAAA,CAAA,CAAK,GAAA,QAAG,OAAO,MAKf,GAAA,QAAW,SAAS,cAAc,IAAA;;AAvMpC,QAAM,IAAY,GAAA,SAAC,GAAA;AAAD,aAAsC,EAAG,cAAe,EAAkB;OAA1E;AAuGlB,eAAyB,GAAY,IAAA;AAKnC,eAFI,GAFE,IAAkB,IACpB,KAAe,GAGX,KAAe,EAAU,QAAY,OAAW,MAAS,MAAiB,GAAO;AACvF,UAAQ,QAAQ,KAChB,KAAS;AAGX,aAAO;;AAVT;AAAS,OAAA,GAAA;AAwCF,gBAAsB,GAAA;AAE3B,aAAO,EACL,GAFF,KAAiB,KAAkB,EAAI,QAEnB,WAAW,EAAe,SAAS,gBAAgB,YACrE,GAAG,EAAe,WAAW,EAAe,SAAS,gBAAgB;;AAJlE;AAAS,OAAA,IAAA;AAQT,gBAA+B,GAAA;AACpC,UAAM,KACJ,aAAmB,EAAA,QAAW,aAAa,EAAQ,0BAA0B,EAAQ,iBAAiB;AAExG,aACE,MAAc,EACZ,MAAM,GAAW,MACjB,OAAO,GAAW,OAClB,KAAK,GAAW,KAChB,QAAQ,GAAW,QACnB,OAAO,GAAW,SAAS,GAAW,QAAQ,GAAW,MACzD,QAAQ,GAAW,UAAU,GAAW,SAAS,GAAW;;AAX3D;AAAS,OAAA,IAAA;AAWkD,QAAA,IAAA;AAAA,WAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,UC9NnD,SAAsC,GAAsB,IAAA;AACzE,eAAW,KAAQ;AACd,UAAuB,KAAQ,GAAO;AAK3C,aAFY;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;ACSP,gBAAgC,GAAY,IAAoB,GAAA;AACrE,aAAI,MAAU,WACL,IAAA,GAAA,YAAW,KAGhB,MAAU,SACL,GAAO,QAAQ,KAGjB,IAAA,GAAA,SAAQ,GAAS;;AATnB;AAAS,OAAA,IAAA,MASU,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,wBAAA,IAAA,GAAA,kBAGnB,SACL,GACA,IACA,GACA,GAAA;AAEA,UAAA,IAAI,KAAmB;AAWvB,aAVI,GAAA,QAAG,OAAO,MACZ,KAAc,GAAsB,IAAa,IAAQ,KAChD,GAAA,QAAG,KAAK,OACjB,MAAc,GAAW,MAAA,QAAX,SAAA,IAAA;AAAA,YAAA,MAAA,QAAA;AAAA,iBAAA,GAAA;QAAA,KAAe,MAAA,SAAA,IAAA;AAAA,YAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA;AAAA,iBAAA,MAAA,KAAA;QAAA,OAAA,SAAA,IAAA,IAAA;AAAA,YAAA,IAAA;AAAA,cAAA,OAAA,MAAA;AAAA,mBAAA,GAAA,IAAA;AAAA,cAAA,IAAA,OAAA,UAAA,SAAA,KAAA,IAAA,MAAA,GAAA;AAAA,iBAAA,MAAA,YAAA,GAAA,eAAA,KAAA,GAAA,YAAA,OAAA,MAAA,SAAA,MAAA,QAAA,MAAA,KAAA,MAAA,MAAA,eAAA,2CAAA,KAAA,KAAA,GAAA,IAAA,MAAA;;QAAA,OAAA,WAAA;AAAA,cAAA,IAAA,UAAA;;aAG3B,GAAA,QAAG,QAAQ,OACb,MAAc,IAAA,GAAA,gBAAe,MAGxB;OAAA,GAAA,WAGF,SAAmB,GAAA;AACxB,aACE,KAAQ,EACN,GAAG,OAAO,IAAO,EAAK,IAAI,EAAK,MAC/B,GAAG,OAAO,IAAO,EAAK,IAAI,EAAK;OAAA,GAAA,aAK9B,SAAsD,GAAA;AAU3D,aAAA,CATI,KAAU,UAAU,KAAQ,SAAS,KACvC,MAAO,IAAA,EAAA,SAAO,IAAI,IAEb,OAAO,EAAK,KAAK,GACtB,EAAK,MAAM,EAAK,KAAK,GACrB,EAAK,QAAQ,EAAK,SAAS,EAAK,OAAO,EAAK,OAC5C,EAAK,SAAS,EAAK,UAAU,EAAK,MAAM,EAAK,SAGxC;OAAA,GAAA,aAGF,SAAqB,GAAA;AAU1B,aAAA,CATI,KAAU,OAAO,KAAQ,OAAO,KAClC,MAAO,IAAA,EAAA,SAAO,IAAI,IAEb,IAAI,EAAK,QAAQ,GACtB,EAAK,IAAI,EAAK,OAAO,GACrB,EAAK,QAAQ,EAAK,SAAU,GAAK,SAAS,KAAK,EAAK,GACpD,EAAK,SAAS,EAAK,UAAW,GAAK,UAAU,KAAK,EAAK,IAGlD;OAAA,GAAA,WAGF,SAAmB,GAAoB,IAAY,GAAA;AACpD,QAAM,QACR,IAAK,QAAQ,EAAM,IAEjB,EAAM,SACR,IAAK,SAAS,EAAM,IAElB,EAAM,OACR,IAAK,OAAO,EAAM,IAEhB,EAAM,UACR,IAAK,UAAU,EAAM,IAGvB,GAAK,QAAQ,GAAK,QAAQ,GAAK,MAC/B,GAAK,SAAS,GAAK,SAAS,GAAK;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UC1FpB,SACb,GACA,IACA,GAAA;AAEA,UAAM,IAAiB,EAAO,QAAgB,IAExC,KADe,KAAiB,EAAc,UACrB,EAAO,QAAQ,QAExC,KAAa,IAAA,GAAA,iBAAgB,IAAQ,GAAQ,IAAS,CAAC,KAAU;AAEvE,aAAO,IAAA,GAAA,UAAS,OAAe,EAAE,GAAG,GAAG,GAAG;;AAAA,QAAA,KAAA;AC+B5C,gBAAgB,GAAA;AACd,aAAO,EAAK,OAAO,MAAM;;AAD3B;AAAS,OAAA,IAAA,MACkB,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAxCZ,GAAA,kCACb,IACA,GACA,GAAA;AAQA,UANA,IAAS,KAAU,IAEf,GAAA,QAAG,OAAO,OAAS,GAAK,OAAO,SAArB,MACZ,MAAO,GAAM,MAGX,GAAA,QAAG,MAAM;AACX,eAAO,GAAK,OAA4B,SAAC,GAAK,GAAA;AAAN,iBAAY,IAAA,EAAA,SAAO,GAAK,EAAU,GAAG,GAAW;WAAU;AASpG,UALI,GAAA,QAAG,OAAO,OACZ,KAAY,IACZ,KAAO,KAGL,GAAA,QAAG,KAAK;AACV,UAAO,MAAQ,EAAO,OAAS,IAC/B,EAAO,IAAM,KAAK;eACT,GAAA,QAAG,MAAM;AAClB,iBAAA,KAAA,GAAA,KAAgB,EAAhB,QAAA,MAA2B;AAAA,cAAA;AAAA,eAAX,EAAW,KACzB,EAAU,IADe,IACN;;eAEZ,GAAA,QAAG,OAAO;AACnB,iBAAW,MAAU,GAAW;AAC9B,cAAM,KAAgB,GAAM,IAAQ,IAAI,SAAC,GAAA;AAAD,mBAAA,GAAA,OAAU,IAAV,OAAiB;;AAEzD,YAAU,IAAe,EAAU,KAAS;;AAIhD,aAAO;OApCM,MAAA;AAoCN,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,GAAA,UC7CM,SAAC,GAAW,IAAA;AAAZ,aAA0B,KAAK,KAAK,IAAI,IAAI,KAAI;;AAAA,QAAA,KAAA;ACA/D,gBAA2B,GAAkB,IAAA;AAC3C,eAAW,KAAQ,IAAQ;AACzB,YAAM,IAAkB,GAAc,iBAClC,KAAA;AAGJ,iBAAW,MAAU;AACnB,cAAI,EAAK,QAAQ,QAAY,KAAK,EAAgB,IAAQ,KAAK,IAAO;AACpE,iBAAA;AACA;;AAIC,cAAsC,OAAjB,GAAO,MAAU,cACzC,GAAK,KAAQ,GAAO;;AAGxB,aAAO;;AAjBT;AAAS,OAAA,IAAA,MAiBA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAGT,GAAc,kBAAkB,EAC9B,QAAQ,kDACR,KAAK;AAAA,QAAA,KAGQ;AAAA,OAAA,UAAA;AAAA,QAAA,IAAA;ACsBR,gBAA0B,GAAA;AAC/B,aAAO,aAAmB,EAAA,QAAI,SAAS,aAAmB,EAAA,QAAI;;AADzD;AAAS,OAAA,IAAA;AAKT,gBAAgB,GAAc,IAAsC,GAAA;AAOzE,aALA,IAAO,KAAQ,QADf,KAAK,KAAO,IAGT,IAAI,GAAS,IAAO,MACvB,EAAG,IAAI,GAAS,IAAO,MAEhB;;AAPF;AAAS,OAAA,IAAA;AAUT,gBAAoB,GAAsC,IAAA;AAa/D,aAZA,KAAO,MAAQ,EAAE,GAAG,GAAG,GAAG,KAGtB,EAAA,QAAQ,iBAAiB,GAAgB,KAC3C,IAAM,UAAU,GAAS,KAEzB,GAAK,KAAK,OAAO,SACjB,GAAK,KAAK,OAAO,WAEjB,GAAM,QAAQ,GAAS,KAGlB;;AAbF;AAAS,OAAA,IAAA;AAgBT,gBAAsB,GAAsB,IAAA;AAUjD,aATA,KAAS,MAAW,IAEhB,EAAA,QAAQ,iBAAiB,GAAgB,KAE3C,GAAM,UAAU,GAAS,MAEzB,GAAM,UAAU,GAAS,KAGpB;;AAVF;AAAS,OAAA,IAAA;AA0BT,gBAAuB,GAAA;AAC5B,UAAM,KAAyB;AAuB/B,aApBI,GAAA,QAAG,MAAM,KACX,IAAQ,KAAK,EAAM,IACnB,GAAQ,KAAK,EAAM,MAIf,EAAM,SAAS,aACb,EAAM,QAAQ,WAAW,IAC3B,IAAQ,KAAK,EAAM,QAAQ,IAC3B,GAAQ,KAAK,EAAM,eAAe,MACzB,EAAM,QAAQ,WAAW,KAClC,IAAQ,KAAK,EAAM,eAAe,IAClC,GAAQ,KAAK,EAAM,eAAe,MAGpC,IAAQ,KAAK,EAAM,QAAQ,IAC3B,GAAQ,KAAK,EAAM,QAAQ,KAIxB;;AAxBF;AAAS,OAAA,IAAA;AA2BT,gBAAyB,GAAA;AAY9B,eAXM,KAAU,EACd,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,KAKX,IAAA,GAAA,IAAsB,EAAtB,QAAA,KAAgC;AAAA,YAArB,IAAW,EAAU;AAC9B,iBAAW,MAAQ;AACjB,aAAQ,OAAsB,EAAQ;;AAG1C,eAAW,MAAQ;AACjB,WAAQ,OAAsB,EAAS;AAGzC,aAAO;;AArBF;AAAS,OAAA,IAAA,MAqBP,OAAA,eAAA,GAAA,cAAA,EAAA,OAAA,SAAA,EAAA,aA9IF,SAAqB,GAAuB,IAAA;AACjD,QAAK,OAAO,EAAK,QAAS,IAC1B,EAAK,KAAK,IAAI,GAAI,KAAK,GACvB,EAAK,KAAK,IAAI,GAAI,KAAK,GAEvB,EAAK,SAAS,EAAK,UAAW,IAC9B,EAAK,OAAO,IAAI,GAAI,OAAO,GAC3B,EAAK,OAAO,IAAI,GAAI,OAAO,GAE3B,EAAK,YAAY,GAAI;OAAA,EAAA,iBAGhB,SAAyB,GAA4B,IAAuB,GAAA;AACjF,QAAU,KAAK,IAAI,EAAI,KAAK,IAAI,GAAK,KAAK,GAC1C,EAAU,KAAK,IAAI,EAAI,KAAK,IAAI,GAAK,KAAK,GAC1C,EAAU,OAAO,IAAI,EAAI,OAAO,IAAI,GAAK,OAAO,GAChD,EAAU,OAAO,IAAI,EAAI,OAAO,IAAI,GAAK,OAAO,GAChD,EAAU,YAAY,EAAI,YAAY,GAAK;OAAA,EAAA,mBAGtC,SAA2B,GAA4B,IAAA;AAC5D,UAAM,IAAK,KAAK,IAAI,GAAM,YAAY,KAAM;AAE5C,QAAU,KAAK,IAAI,GAAM,KAAK,IAAI,GAClC,EAAU,KAAK,IAAI,GAAM,KAAK,IAAI,GAClC,EAAU,OAAO,IAAI,GAAM,OAAO,IAAI,GACtC,EAAU,OAAO,IAAI,GAAM,OAAO,IAAI,GACtC,EAAU,YAAY;OAAA,EAAA,gBAGjB,SAAwB,GAAA;AAC7B,QAAU,KAAK,IAAI,GACnB,EAAU,KAAK,IAAI,GACnB,EAAU,OAAO,IAAI,GACrB,EAAU,OAAO,IAAI;OAAA,EAAA,kBAAA,IAAA,EAAA,QAAA,IAAA,EAAA,YAAA,IAAA,EAAA,cAAA,IAAA,EAAA,eA+ChB,SAAuB,GAAA;AAC5B,aAAO,GAAA,QAAG,OAAO,EAAQ,aAAa,EAAQ,YAAa,EAAQ;OAAA,EAAA,YAG9D,SAAoB,GAAuB,IAAiB,GAAA;AACjE,UAAM,IAAU,GAAS,SAAS,IAAI,GAAe,MAAY,GAAS;AAE1E,SAAU,GAAS,EAAK,OACxB,GAAY,GAAS,EAAK,SAE1B,EAAK,YAAY;OAAA,EAAA,eAAA,IAAA,EAAA,iBAAA,IAAA,EAAA,YAsDZ,SAAoB,GAAA;AACzB,UAAA,CAAK,EAAM;AACT,eAAO;AAGT,UAAM,KAAU,GAAa,IACvB,IAAO,KAAK,IAAI,GAAQ,GAAG,OAAO,GAAQ,GAAG,QAC7C,IAAO,KAAK,IAAI,GAAQ,GAAG,OAAO,GAAQ,GAAG,QAC7C,KAAO,KAAK,IAAI,GAAQ,GAAG,OAAO,GAAQ,GAAG,QAC7C,KAAO,KAAK,IAAI,GAAQ,GAAG,OAAO,GAAQ,GAAG;AAEnD,aAAO,EACL,GAAG,GACH,GAAG,GACH,MAAM,GACN,KAAK,GACL,OAAO,IACP,QAAQ,IACR,OAAO,KAAO,GACd,QAAQ,KAAO;OAAA,EAAA,gBAIZ,SAAwB,GAAmC,IAAA;AAChE,UAAM,IAAW,KAAc,KACzB,IAAW,KAAc,KACzB,KAAU,GAAa,IAEvB,KAAK,GAAQ,GAAG,KAAW,GAAQ,GAAG,IACtC,KAAK,GAAQ,GAAG,KAAW,GAAQ,GAAG;AAE5C,aAAO,IAAA,GAAA,SAAM,IAAI;OAAA,EAAA,aAGZ,SAAqB,GAAmC,IAAA;AAC7D,UAAM,IAAW,KAAc,KACzB,IAAW,KAAc,KACzB,KAAU,GAAa,IACvB,KAAK,GAAQ,GAAG,KAAW,GAAQ,GAAG,IACtC,KAAK,GAAQ,GAAG,KAAW,GAAQ,GAAG;AAG5C,aAFe,MAAM,KAAK,MAAM,IAAI,MAAO,KAAK;OAAA,EAAA,iBAK3C,SAAyB,GAAA;AAC9B,aAAO,GAAA,QAAG,OAAO,EAAQ,eACrB,EAAQ,cACR,GAAA,QAAG,OAAO,EAAQ,eAChB,CAAA,QAAC,QAAsB,SAAS,OAAO,SAAS,EAAQ,eAG1D,QAAQ,KAAK,EAAQ,QAAQ,OAAO,aAAmB,EAAA,QAAI,QACvD,UACA;OAAA,EAAA,kBAIH,SAA0B,GAAA;AAC/B,UAAM,KAAO,GAAA,QAAG,KAAK,EAAM,gBACtB,EAAM,iBACL,EAA0C;AAEhD,aAAO,CACL,GAAS,iBAAiB,KAAO,GAAK,KAAM,EAAM,SAClD,GAAS,iBAAiB,EAAM;OAAA,EAAA,YAI7B,WAAA;AACL,aAAO,EACL,MAAM,EAAE,GAAG,GAAG,GAAG,KACjB,QAAQ,EAAE,GAAG,GAAG,GAAG,KACnB,WAAW;OAAA,EAAA,gBAIR,SAAwB,GAAA;AA0C7B,aAzCc,EACZ,QAAA,OACA,OAAA;AACE,eAAO,KAAK,OAAO;aAErB,SAAA;AACE,eAAO,KAAK,OAAO;aAErB,YAAA;AACE,eAAO,KAAK,OAAO;aAErB,QAAA;AACE,eAAO,KAAK,OAAO,KAAK;aAE1B,QAAA;AACE,eAAO,KAAK,OAAO,KAAK;aAE1B,UAAA;AACE,eAAO,KAAK,OAAO,OAAO;aAE5B,UAAA;AACE,eAAO,KAAK,OAAO,OAAO;aAE5B,YAAA;AACE,eAAO,KAAK,OAAO;aAErB,SAAA;AACE,eAAO,KAAK,OAAO;aAErB,OAAA;AACE,eAAO,KAAK,OAAO;aAErB,cAAA;AACE,eAAO,KAAK,OAAO;aAErB,UAAA;AACE,eAAO,KAAK,OAAO;SAErB,gBAtCY,WAAA;;OAAA,OAAA,eAAA,GAAA,iBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,MAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,YAAA;AAAA,QCrOH,KAAA,WAAA;AAUX,iBAAa,GAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAA6B,MAAA,IAAA,GAAA,MAAA,QAAA,SAAA,GAAA,MAAA,UAAA,SAAA,GAAA,MAAA,iBAAA,SAAA,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,aAAA,SAAA,GAAA,MAAA,+BAAA,QAAA,GAAA,MAAA,sBAAA,QACxC,KAAK,eAAe;;AADtB;AAAA,SAAA,GAAA;AACsB,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,kBAAA,OAGtB,WAAA;WAAA,EAAA,KAAA,mBAAA,OAKA,WAAA;AACE,aAAK,qBAAA;WAAqB,EAAA,KAAA,4BAAA,OAM5B,WAAA;AACE,aAAK,8BAA8B,KAAK,qBAAA;eAAqB,GAAA,GAAA,WAAA,IAAA;;AA3BpD,OAAA,YAAA,IAuCb,OAAO,eAAe,GAAU,WAAW,eAAe,EACxD,KADwD,WAAA;AAEtD,aAAO,KAAK,aAAa;OAE3B,KAJwD,WAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,OAAA,GAAA,YAAA,GAAA,OAAA,GAAA,QAAA,GAAA,SAAA,GAAA,WAAA,QAAA,GAAA,WCzClC,SAAI,GAAY,IAAA;AAAhB,aAA8B,EAAM,QAAQ,QAA5C;OAA4C,GAAA,SAE9C,SAAI,GAAY,IAAA;AAAhB,aAA8B,EAAM,OAAO,EAAM,QAAQ,KAAS;;AAEjF,QAAM,KAAQ,GAAA,SAAO,GAAsB,IAAA;AAChD,eAAA,IAAA,GAAA,IAAmB,GAAnB,QAAA,KAA2B;AAAA,YAAhB,IAAQ,GAAQ;AACzB,UAAO,KAAK;;AAGd,aAAO;OALY;AAKZ,OAAA,QAAA,IAAA,GAAA,OAGW,SAAU,GAAA;AAAV,aAAmC,GAAM,IAAW;;AAEjE,QAAM,KAAY,GAAA,SAAI,GAAY,IAAA;AACvC,eAAS,IAAI,GAAG,IAAI,EAAM,QAAQ;AAChC,YAAI,GAAK,EAAM,IAAI,GAAG;AACpB,iBAAO;AAIX,aAAA;OAPuB;AAOf,OAAA,YAAA,IAAA,GAAA,OAGU,SAAU,GAAY,IAAA;AAAtB,aAA0C,EAAM,GAAU,GAAO;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,MAAA,OAAA,kBAAA,SAAA,GAAA,GAAA;AAAA,eAAA,EAAA,YAAA,GAAA;SAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,CAAA,MAAA,GAAA,QAAA,YAAA,OAAA,MAAA,aAAA,GAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,UAAA,MAAA;AAAA,cAAA,IAAA,eAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,iBAAA,OAAA,iBAAA,SAAA,IAAA;AAAA,eAAA,GAAA,aAAA,OAAA,eAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,YAAA;AAAA,QClBxE,KAAA,SAAA,GAAA;AAAA,MAAA,UAAA,IAAA,GAAA;AAAA,YAAA,OAAA,KAAA,cAAA,MAAA;AAAA,gBAAA,IAAA,UAAA;AAAA,WAAA,YAAA,OAAA,OAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,IAAA,UAAA,MAAA,cAAA,WAAA,KAAA,GAAA,IAAA;SAAA,IAAA;AAAA,UAAA,IAAA,GAAA,GAAA,IAAA,KAAA,KAAA,IAAA,KAAA,WAAA;AAAA,YAAA,OAAA,WAAA,eAAA,CAAA,QAAA,aAAA,QAAA,UAAA;AAAA,iBAAA;AAAA,YAAA,OAAA,SAAA;AAAA,iBAAA;AAAA,YAAA;AAAA,iBAAA,QAAA,UAAA,QAAA,KAAA,QAAA,UAAA,SAAA,IAAA,WAAA;eAAA;iBAAA,IAAA;AAAA,iBAAA;;WAAA,WAAA;AAAA,YAAA,IAAA,IAAA,GAAA;AAAA,YAAA,IAAA;AAAA,cAAA,IAAA,GAAA,MAAA;AAAA,eAAA,QAAA,UAAA,GAAA,WAAA;;AAAA,eAAA,EAAA,MAAA,MAAA;AAAA,eAAA,GAAA,MAAA;;AAaX,kBAAa,IAAsB,GAAkC,GAAA;AAAc,YAAA;AAAA,QAAA,UAAA,IAAA,GAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAA,MAAA,KAAA,GAAA,GACjF,IAAA,GAAA,KAAA,MAAM,EAAU,gBADiE,UAAA,SAAA,GAAA,GAAA,IAAA,YAAA,SAAA,GAAA,GAAA,IAAA,aAAA,SAAA,GAAA,GAAA,IAAA,iBAAA,SAAA,GAAA,GAAA,IAAA,aAAA,SAAA,GAAA,GAAA,IAAA,aAAA,SAAA,GAAA,GAAA,IAAA,sBAAA,QAAA,GAAA,GAAA,IAAA,+BAAA;AAAA,YAAA,IAGnD,MAAS,cAAc,GAAU,OAAO,GAAU,KAAxE,KAHyE,EAGzE,SAAS,KAHgE,EAGhE;AAHgE,eAKjF,EAAK,OAAO,GACZ,EAAK,SAAS,IACd,EAAK,gBAAgB,IACrB,EAAK,WAAW,IAChB,EAAK,YAAY,GACjB,EAAK,gBAAgB,EAAU,QAC/B,EAAK,YAAY,EAAU,cAC3B,EAAK,YAAY,EAAU,WAZsD;;AAAnF;AAAA,aAAA,GAAA,IAAA,MAAmF,KAAA,IAAA,KAAA,CAAA,EAAA,KAAA,UAAA,OAsBnF,WAAA;AAAU,YAAA,KAAA,MACA,IAAc,KAAK,aAAnB;AAER,YACE,KAAK,SAAS,kBACZ,KAAK,YAAY,EAAU,IAAI,aAAa,KAAK,YAAY,EAAU,IAAI,YAAY,KAAK;AAahG,cARA,EAAU,KAAK,WAAW,KAAK,UAC/B,EAAU,KAAK,UAAU,KAAK,QAE9B,EAAU,WAAA,MACV,EAAU,OAAO,QAAQ,MAEzB,KAAK,4BAED,KAAK,SAAS,gBAAgB;AAChC,gBAAM,IAAc,EAAU,aACxB,IAAQ,GAAI,UAChB,GACA,SAAA,IAAA;AAAA,kBAAG,KAAH,GAAG,UAAU,KAAb,GAAa;AAAb,qBAA2B,OAAa,GAAK,YAAY,OAAY,GAAK;;AAG5E,cAAU,YAAY,OAAO,GAAO;AAEpC,gBAAM,IAAkB,IAAI,GAAU,GAAW,KAAK,WAAW;AAEjE,cAAgB,WAAW,KAAK,UAChC,EAAgB,SAAS,KAAK,QAE9B,KAAK,SAAS,KAAK;;AAEnB,iBAAK,SAAS,KAAK,IAAI,GAAU,GAAW,KAAK,WAAW;WAAA,EAAA,KAAA,kBAAA,OAIhE,WAAA;WAAA,EAAA,KAAA,mBAAA,OAEA,WAAA;AACE,aAAK,qBAAA;WAAqB,EAAA,KAAA,4BAAA,OAG5B,WAAA;AACE,aAAK,8BAA8B,KAAK,qBAAA;eAAqB,GAAA,GAAA,WAAA,IAAA;MAhFlC,GAAA;AAAA,OAAA,YAAA;AAAA,QAAA,KAAA;ACsQ/B,gBAA+B,GAA2B,IAAA;AAExD,eAAA,IAAA,GAAA,IAAoC,EAAY,QAAhD,QAAA,KAAyD;AAAA,YAAA,IAArB,EAAY,QAAS,IAA5C,KAA4C,EAA5C,UAAU,KAAkC,EAAlC;AACrB,WAAM,WAAW,IAGjB,GAAM,SAAS,IACf,GAAS,KAAK,KACd,GAAM,qBAAqB,GAAM,8BAAA;;;AARrC;AAAS,OAAA,IAAA;AAeT,gBAAyB,GAAc,IAAA;AAIrC,eAFM,IA1DR,SAAA,IAAiD,IAAA;AAI/C,iBAJuB,KAAmD,GAAnD,eACjB,IAAsB,IAG5B,IAAA,GAAA,IAAuB,GAAc,KAArC,QAAA,KAA2C;AAAA,cAAhC,IAAY,GAAc,KAAM;AACzC,cAAK,EAAS,QAAQ,KAAK,SAA3B;AAIA,gBAAM,IAAS,EAAS,QAAQ,KAAK;AAGrC,gBAAA,CACG,IAAA,QAAG,QAAQ,MAAW,MAAW,MACjC,GAAA,QAAG,OAAO,MAAA,CAAY,GAAS,gBAAgB,IAAkB,MACjE,GAAA,QAAG,KAAK,MAAA,CAAY,EAAO,EAAE,UAAA,GAAU,kBAAA;AAY1C,uBANM,KAAgB,GAAA,QAAG,OAAO,EAAS,UACrC,EAAS,SAAS,iBAAiB,EAAS,UAC5C,GAAA,QAAG,MAAM,EAAS,UAChB,EAAS,SACT,CAAC,EAAS,SAEhB,KAAA,GAAA,KAA8B,GAA9B,QAAA,MAA4C;AAAA,oBAAjC,KAAmB,GAAc;AACtC,uBAAoB,MACtB,EAAM,KAAK,EACT,UAAA,GACA,SAAS,IACT,MAAM,EAAS,QAAQ;;;;AAM/B,eAAO;QAoB0B,GAAO,KAExC,IAAA,GAAA,IAAyB,EAAzB,QAAA,KAAsC;AAAA,YAA3B,KAAc,EAAa;AACpC,WAAW,OAAO,GAAW,SAAS,QAAQ,GAAW;;AAG3D,aAAO;;AART;AAAS,OAAA,IAAA;AAWT,gBAAA,GAEE,IACA,GAAA;AAKA,eAPE,IAGF,EAHE,WAAyB,KAG3B,EAHa,cAAkC,KAG/C,EAHsC,SAIhC,KAAa,IAGnB,KAAA,GAAA,KAA2D,EAAU,YAArE,QAAA,MAAkF;AAAA,YAAA,IAAvB,EAAU,YAAa,KAArE,IAAqE,EAArE,UAAmB,IAAkD,EAA3D,SAA0B,IAAiC,EAAjC;AAC/C,WAAW,KACT,EAAS,UAAU,IAAW,GAAc,IAAW,IAAa,GAAiB,KACjF,IACA;;AAKR,UAAM,KAAY,GAAS,sBAAsB;AAEjD,aAAO,EAAU,YAAY,OAAc;;AAnB7C;AAAS,OAAA,IAAA;AAsBT,gBAAwB,GAA0B,IAAe,GAAA;AAAsB,UAC7E,IAAc,EAAd,WACF,KAAa,EACjB,OAAO,MACP,OAAO,MACP,UAAU,MACV,YAAY,MACZ,MAAM,MACN,MAAM;AAgBR,aAbI,EAAU,SAAS,eACrB,IAAW,WAAW,IAAI,GAAA,UAAU,GAAW,GAAW,iBAE1D,GAAW,SAAS,SAAS,MAC7B,GAAW,SAAS,WAAW,OAE7B,EAAU,SAAS,aACrB,IAAW,aAAa,IAAI,GAAA,UAAU,GAAW,GAAW,mBAE5D,GAAW,WAAW,SAAS,MAC/B,GAAW,WAAW,WAAW,OAG/B,EAAU,YAIV,GAAU,IAAI,YAAY,EAAU,KAAK,WAEvC,GAAU,KAAK,YACjB,IAAW,QAAQ,IAAI,GAAA,UAAU,GAAW,GAAW,cAEvD,EAAU,YAAY,GAAW,MAAM,SAAS,EAAU,KAAK,SAC/D,EAAU,eAAe,GAAW,MAAM,WAAW,EAAU,KAAK,WAGlE,EAAU,IAAI,YAChB,IAAW,QAAQ,IAAI,GAAA,UAAU,GAAW,GAAW,cAEvD,EAAU,YAAY,EAAU,IAAI,SACpC,EAAU,WAAW,EAAU,IAAI,YAInC,EAAU,SAAS,aAAa,EAAU,IAAI,YAChD,IAAW,OAAO,IAAI,GAAA,UAAU,GAAW,GAAW,SAEtD,EAAU,WAAW,EAAU,IAAI,UACnC,EAAU,gBAAgB,EAAU,IAAI,UAEtC,EAAU,SAAS,cAAc,EAAU,IAAI,YACjD,IAAW,OAAO,IAAI,GAAA,UAAU,GAAW,GAAW,aAEtD,GAAW,KAAK,WAAW,GAC3B,EAAU,WAAW,EAAU,IAAI,YA9B5B;;AAzBX;AAAS,OAAA,IAAA;AAiET,gBAAyB,GAA0B,IAAA;AAAyB,UAClE,IAAc,EAAd,WACA,IAA2B,EAA3B,aAAa,KAAc,EAAd,KAAK,KAAS,EAAT;AAEtB,SAAO,SACT,GAAK,SAAS,KAAK,GAAO,QAExB,GAAO,SACT,GAAI,SAAS,KAAK,GAAO,QAEvB,GAAO,QACT,GAAI,SAAS,KAAK,GAAO,OAEvB,GAAO,QACT,GAAI,SAAS,KAAK,GAAO,OAGvB,GAAO,cACT,GAAqB,GAAa,GAAO,aAG3C,EAAU,KAAK,WAAW,GAAI,UAC9B,EAAU,KAAK,UAAU,GAAI;;AAtB/B;AAAS,OAAA,IAAA;AAyBT,gBAAA,GAAyF,IAAA;AAAc,UAA5E,IAA4E,EAA5E,aAAa,IAA+D,EAA/D,QAAQ,KAAuD,EAAvD;AAC9C,UAAI,EAAO,SAAS,cAAc,EAAO,SAAS,WAAlD;AADqG,YAK7F,KAAc,EAAd;AAEJ,WAAM,eACR,IAAU,cAAc,GAAe,IAAO,EAAY;AAG5D,YAAM,KAAY,GACZ,KAAa,GAAQ,GAAa,IAAW;AAGnD,WAAU,WACR,GAAU,YAAA,CAAA,CACR,MACF,GAAW,aAAa,GAAU,IAAI,YACtC,GAAW,YAAY,GAAU,IAAI,SAEvC,GAAU,IAAI,WAAW,MAAc,GAAW,UAClD,GAAU,IAAI,UAAU,MAAc,GAAW,SAEjD,GAAU,SAAS,GAAc,GAAa,GAAO;;;AAxBvD;AAAS,OAAA,IAAA,OAwB8C,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAoJvD,QAAM,KAAe,EACnB,IAAI,gBACJ,SAxdF,SAAkB,GAAA;AAAc,UAE5B,KAME,EANF,SAEgB,IAId,EAJF,gBAEA,IAEE,EAFF,cACA,KACE,EADF;AAGF,QAAM,UAAU,GAAA,UA0ChB,EAAa,UAAU,WAAW,SAA8B,IAAA;AAC9D,eAkRJ,SAAyB,IAA4B,IAAA;AACnD,cAAI,GAAA,QAAG,OAAO,KAAU;AAGtB,gBAFA,GAAa,QAAQ,KAAK,UAAU,GAAQ,YAAlB,OAEtB,GAAQ,WAAW;AACrB,kBAAM,IAAa,IAAA,GAAA,SAAmB,GAAQ,YAExC,IAAY,OAAO,KAAK,GAAY,OAAO,SAAC,GAAK,GAAA;AASrD,uBAFA,EANsB,iBAAiB,KAAK,KAAtB,OAAA,OACX,KACP,8BAA8B,KAAK,KAAnC,OAAA,OACS,KACP,KAEe,EAAW,IAEzB;iBACN;AAEH,iBAAa,IAAI,GAAa,QAAQ,KAAK,YAC3C,GAAa,GAAG,IAChB,GAAa,QAAQ,KAAK,YAAY;;AAkCxC,mBA/BI,GAAA,QAAG,KAAK,GAAQ,WAClB,GAAa,GAAG,QAAQ,GAAQ,SAE9B,GAAA,QAAG,KAAK,GAAQ,mBAClB,GAAa,GAAG,gBAAgB,GAAQ,iBAEtC,GAAA,QAAG,KAAK,GAAQ,qBAClB,GAAa,GAAG,kBAAkB,GAAQ,mBAExC,GAAA,QAAG,KAAK,GAAQ,gBAClB,GAAa,GAAG,aAAa,GAAQ,cAEnC,GAAA,QAAG,KAAK,GAAQ,gBAClB,GAAa,GAAG,aAAa,GAAQ,cAEnC,GAAA,QAAG,KAAK,GAAQ,eAClB,GAAa,GAAG,YAAY,GAAQ,aAGlC,qBAAqB,KAAK,GAAQ,WACpC,GAAa,QAAQ,KAAK,UAAU,GAAQ,UACnC,GAAA,QAAG,OAAO,GAAQ,YAC3B,IAAa,QAAQ,KAAK,UAAU,KAAK,IAAI,KAAK,IAAI,GAAG,GAAQ,UAAU,KAEzE,YAAY,MACd,IAAa,QAAQ,KAAK,SAAS,GAAQ,SAEzC,aAAa,MACf,IAAa,QAAQ,KAAK,UAAU,GAAQ,UAGvC;;AAGT,iBAAI,GAAA,QAAG,KAAK,MACV,IAAa,QAAQ,KAAK,UAAU,IAE7B,MAGF,GAAa,QAAQ;UAlVJ,MAAM;SAkB9B,EAAa,UAAU,YAAY,SAEjC,IACA,IACA,IACA,GACA,GACA,GAAA;AAEA,eA0TJ,SACE,GACA,IACA,IACA,IACA,GACA,GACA,IAAA;AAEA,cAAI,KAAA;AAIJ,cAAA,CAAM,MAAO,MAAQ,EAAa,QAAQ;AACxC,mBAAA,CAAA,CAAO,EAAa,QAAQ,KAAK,WAC7B,EAAa,QAAQ,KAAK,QAC1B,IACA,IACA,IACA,GACA,GACA,IACA;AAKN,cAAM,KAAc,EAAa,QAAQ,KAAK;AAE9C,cAAI,OAAgB,WAAW;AAC7B,gBAAM,KAAS,IAAA,GAAA,SAAY,IAAW,GAAkB,SAClD,KAAO,EAAa,UAAU;AAEpC,eAAK,KAAK,GAAO,GACjB,GAAK,KAAK,GAAO;AAEjB,gBAAM,KAAa,GAAK,IAAI,GAAK,QAAQ,GAAK,IAAI,GAAK,OACjD,KAAW,GAAK,IAAI,GAAK,OAAO,GAAK,IAAI,GAAK;AAEpD,iBAAU,MAAc;;AAG1B,cAAM,KAAW,GAAU,QAAQ;AAEnC,cAAI,MAAY,OAAgB,UAAU;AACxC,gBAAM,KAAK,GAAS,OAAO,GAAS,QAAQ,GACtC,KAAK,GAAS,MAAM,GAAS,SAAS;AAE5C,iBAAU,MAAM,GAAK,QAAQ,MAAM,GAAK,SAAS,MAAM,GAAK,OAAO,MAAM,GAAK;;AAyBhF,iBAtBI,MAAY,GAAA,QAAG,OAAO,OAOxB,MALE,KAAK,IAAI,GAAG,KAAK,IAAI,GAAK,OAAO,GAAS,SAAS,KAAK,IAAI,GAAK,MAAM,GAAS,SAChF,KAAK,IAAI,GAAG,KAAK,IAAI,GAAK,QAAQ,GAAS,UAAU,KAAK,IAAI,GAAK,KAAK,GAAS,QAE/C,IAAS,QAAQ,GAAS,WAEpC,KAGxB,EAAa,QAAQ,KAAK,WAC5B,MAAU,EAAa,QAAQ,KAAK,QAClC,IACA,IACA,IACA,GACA,GACA,IACA,KAIG;UAnYkB,MAAM,IAAW,IAAO,IAAW,GAAkB,GAAa;SAW3F,EAAS,cAAc,SAAU,IAAA;AAC/B,eAAI,GAAA,QAAG,KAAK,MAKV,GAAM,cAAc,IAEb,KAEF,EAAM;SAGf,IAAA,EAAA,SAAO,GAAQ,gBAAgB,EAC7B,WAAA,MACA,WAAA,MACA,cAAA,MACA,gBAAA,MACA,UAAA,MACA,MAAA,SAEF,GAAQ,WAAW,OAAO,YAE1B,EAAM,cAAA,OAEN,GAAS,QAAQ,OAAO,GAAK;OAqW7B,WAAW,EACT,oCAAoC,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB;AACjC,SAAY,SAAS,SAAS,UAIlC,IAAY,YAAY,EACtB,KAAK,EACH,UAAU,MACV,SAAS,QAEX,MAAM,EACJ,UAAU,MACV,SAAS,QAEX,UAAU,MACV,QAAQ,MACR,aAAa;OAIjB,mCAAmC,SAAA,GAEjC,IAAA;AACG,UAFD,IAEC,EAFD,aAA4B,IAE3B,GAFY,OAEZ,EAFmB;AAGtB,UAAI,EAAY,SAAS,SAAS,QAAlC;AADG,YAKK,KAAc,EAAd;AAGR,WAAU,cAAc,MACxB,GAAU,SAAS,MACnB,GAAU,cAAc,GAAe,IAAO,EAAY,UAC1D,GAAU,SAAS,GAAc,GAAa,GAAO,IAEjD,GAAU,OAAO,YACnB,IAAqB,GAAU,aAAa,GAAU,OAAO,WAC7D,GAAM,KAAK,sBAAsB,EAAE,aAAA,GAAa,WAAA;;OAIpD,4BAA4B,IAE5B,kCAAkC,SAAA,GAEhC,IAAA;AACG,UAFD,IAEC,EAFD,aAAqB,IAEpB,EAFY;AAGX,QAAY,SAAS,SAAS,UAIlC,IAAe,GAAa,EAAY,UAAU,SAElD,GAAM,KAAK,qBAAqB,EAAE,aAAA,GAAa,WAAA,MAC/C,EAAY,UAAU,SAAS;OAGjC,2BAA2B,SAAC,GAAqC,IAAA;AAC/D,UAAI,EAAI,YAAY,SAAS,SAAS,QAAtC;AADyE,YAKjE,IAAmC,EAAnC,aAAqB,IAAc,EAAtB;AAErB,WAAe,GAAK,KACpB,GAAe,GAAa,EAAY,UAAU,SAClD,GAAM,KAAK,oBAAoB,EAAE,aAAA,GAAa,WAAA;;OAGhD,qBAAqB,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB;AACtB,UAAI,GAAY,SAAS,SAAS,QAAlC;AADwC,YAKhC,IAAc,GAAd;AAEJ,aACF,GAAU,cAAc,MACxB,EAAU,SAAS,MACnB,EAAU,IAAI,WAAW,MACzB,EAAU,IAAI,UAAU,MACxB,EAAU,KAAK,WAAW,MAC1B,EAAU,KAAK,UAAU,MACzB,EAAU,WAAA;;SAIhB,gBAAA,IACA,SAAA,IACA,eAAA,IACA,gBAAA,IACA,UAAU,EACR,SAAA,OACA,QAAQ,MACR,SAAS,eAAA,IAIE;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AC/jBf,gBAAA,GAAA;AAA+E,UAAhD,KAAgD,EAAhD,aAAa,IAAmC,EAAnC,QAAQ,IAA2B,EAA3B;AAClD,UAAI,GAAY,SAAS,SAAS,WAAlC;AAEA,YAAM,KAAW,GAAY,SAAS,IAAI,SAAC,GAAA;AAAD,iBAAO,EAAE;YAC7C,KAAW,MAAU,SACrB,KAAS,MAAU,OACnB,KAAc,GAAY,aAAa,QAAQ;AAIrD,YAFA,EAAO,UAAU,CAAC,GAAS,IAAI,GAAS,KAEpC;AACF,YAAO,WAAW,EAAa,cAAc,IAAU,KACvD,EAAO,MAAM,EAAa,UAAU,KACpC,EAAO,QAAQ,GACf,EAAO,KAAK,GACZ,EAAO,QAAQ,EAAa,WAAW,IAAU,KACjD,EAAO,KAAK,GAEZ,GAAY,QAAQ,gBAAgB,EAAO,UAC3C,GAAY,QAAQ,aAAa,EAAO;iBAC/B,IAAQ;AACjB,cAAM,IAAY,GAAY;AAE9B,YAAO,WAAW,EAAU,UAC5B,EAAO,MAAM,EAAU,KACvB,EAAO,QAAQ,EAAU,OACzB,EAAO,KAAK,GACZ,EAAO,QAAQ,EAAU,OACzB,EAAO,KAAK;;AAEZ,YAAO,WAAW,EAAa,cAAc,IAAU,KACvD,EAAO,MAAM,EAAa,UAAU,KACpC,EAAO,QAAQ,EAAO,WAAW,GAAY,QAAQ,eACrD,EAAO,QAAQ,EAAa,WAAW,IAAU,KAEjD,EAAO,KAAK,EAAO,QAAQ,GAAY,QAAQ,OAC/C,EAAO,KAAK,EAAO,QAAQ,GAAY,QAAQ;AAGjD,WAAY,QAAQ,WAAW,EAAO,UACtC,GAAY,QAAQ,QAAQ,EAAO,OAE/B,GAAA,QAAG,OAAO,EAAO,UAAU,EAAO,UAAU,IAAA,KAAA,CAAa,MAAM,EAAO,UACxE,IAAY,QAAQ,QAAQ,EAAO;;;AA3CvC;AAAS,OAAA,IAAA,OA2C8B,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAIvC,QAAM,KAAkB,EACtB,IAAI,mBACJ,QAAQ,CAAC,gBAAgB,mBACzB,SAvGF,SAAkB,GAAA;AAAc,UACtB,KAAoC,EAApC,SAAS,IAA2B,EAA3B,cAAc,IAAa,EAAb;AAyB/B,QAAa,UAAU,aAAa,SAElC,IAAA;AAEA,eAAI,GAAA,QAAG,OAAO,MACZ,MAAK,QAAQ,QAAQ,UAAU,GAAQ,YAAlB,OACrB,KAAK,aAAa,WAAW,KAC7B,KAAK,YAAY,WAAW,KAErB,QAGL,GAAA,QAAG,KAAK,MACV,MAAK,QAAQ,QAAQ,UAAU,IAExB,QAGF,KAAK,QAAQ;SAGtB,GAAQ,IAAI,UAAU,IACtB,GAAQ,WAAW,UAAU,cAE7B,EAAS,QAAQ,UAAU,GAAQ;OAsDnC,WAAW,EACT,6BAA6B,IAC7B,4BAA4B,IAC5B,2BAA2B,IAE3B,oBAAoB,SAAA,GAAA;AAAqB,QAAlB,YACT,UAAU,EACpB,OAAO,GACP,UAAU,GACV,OAAO,GACP,YAAY,GACZ,eAAe;OAInB,oBAAoB,SAAC,GAAA;AACnB,UAAA,CAAI,GAAI,YAAY,SAAS,SAAS,IAAtC;AAIA,YAAM,KAAiB,EAAI,aAAa,QAAQ;AAEhD,YAAM,MAAkB,GAAe;AAMvC,iBAFA,EAAI,SAAS,EAAE,MAAM,aAAA;;SAMzB,UAAU,IAEV,WAtCsB,WAAA;AAuCpB,aAAO;SAAA,KAII;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACcf,gBACE,GACA,IACA,GACA,GACA,IACA,IACA,IAAA;AAGA,UAAA,CAAK;AACH,eAAA;AAIF,UAAI,OAAJ,MAAoB;AAElB,YAAM,KAAQ,GAAA,QAAG,OAAO,GAAK,SAAS,GAAK,QAAQ,GAAK,QAAQ,GAAK,MAC/D,IAAS,GAAA,QAAG,OAAO,GAAK,UAAU,GAAK,SAAS,GAAK,SAAS,GAAK;AAoBzE,YAjBA,KAAS,KAAK,IAAI,IAAQ,KAAK,IAAK,OAAS,UAAU,MAAS,UAAU,KAAQ,KAAU,KAExF,KAAQ,KACN,OAAS,SACX,IAAO,UACE,MAAS,WAClB,KAAO,UAGP,IAAS,KACP,OAAS,QACX,IAAO,WACE,MAAS,YAClB,KAAO,SAIP,MAAS;AACX,iBAAO,EAAK,IAAK,OAAS,IAAI,GAAK,OAAO,GAAK,SAAS;AAE1D,YAAI,MAAS;AACX,iBAAO,EAAK,IAAK,MAAU,IAAI,GAAK,MAAM,GAAK,UAAU;AAG3D,YAAI,MAAS;AACX,iBAAO,EAAK,IAAK,OAAS,IAAI,GAAK,QAAQ,GAAK,QAAQ;AAE1D,YAAI,MAAS;AACX,iBAAO,EAAK,IAAK,MAAU,IAAI,GAAK,SAAS,GAAK,OAAO;;AAK7D,aAAA,CAAA,CAAK,GAAA,QAAG,QAAQ,MAIT,IAAA,QAAG,QAAQ,MAEhB,OAAU,IAEV,GAAI,YAAY,GAAS,IAAO;;AA9DpC;AAAS,OAAA,IAAA;AA6LT,gBAAA,GAAA;AAMG,UALD,KAKC,EALD,QACA,IAIC,EAJD;AAKA,UAAI,EAAY,SAAS,SAAS,YAAa,EAAY,YAA3D;AAEA,YACM,IAAc;AADJ,UAAY,aAAa,QAG7B,OAAO,SACb,GAAY,eAAe,MAC7B,EAAY,MAAM,IAAI,EAAY,MAAM,IAExC,EAAY,MAAM,IAAI,EAAY,MAAM,GAE1C,EAAY,OAAO,QAEnB,GAAY,OAAO,EAAY,YAE3B,EAAY,eAAe,MAC7B,EAAY,MAAM,IAAI,IACb,EAAY,eAAe,OACpC,GAAY,MAAM,IAAI;;;AAzB5B;AAAS,OAAA,IAAA,OAyBmB,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAK5B,QAAM,KAAiB,EACrB,IAAI,kBACJ,QAAQ,CAAC,iBACT,SAhYF,SAAkB,GAAA;AAAc,UAE5B,KAKE,EALF,SACA,IAIE,EAJF,SAEA,IAEE,EAFF,cACA,KACE,EADF;AAKF,SAAO,UA0NT,SAAsB,IAAA;AACpB,eAAO,GAAQ,QACX,EACA,GAAG,YACH,GAAG,YACH,IAAI,aAEJ,KAAK,YACL,MAAM,YACN,QAAQ,YACR,OAAO,YACP,SAAS,aACT,aAAa,aACb,UAAU,aACV,YAAY,gBAEZ,EACA,GAAG,aACH,GAAG,aACH,IAAI,eAEJ,KAAK,aACL,MAAM,aACN,QAAQ,aACR,OAAO,aACP,SAAS,eACT,aAAa,eACb,UAAU,eACV,YAAY;QAtPa,IAC7B,GAAO,gBAAgB,EAAQ,iBAAiB,EAAQ,uBAAuB,KAAK,IA+CpF,EAAa,UAAU,YAAY,SAA8B,IAAA;AAC/D,eA0EJ,SAAoB,IAA4B,IAAgD,GAAA;AAC9F,iBAAI,GAAA,QAAG,OAAO,MACZ,IAAa,QAAQ,OAAO,UAAU,GAAQ,YAAlB,OAC5B,GAAa,aAAa,UAAU,KACpC,GAAa,YAAY,UAAU,KAE/B,GAAA,QAAG,OAAO,GAAQ,SAAS,eAAe,KAAK,GAAQ,QACzD,GAAa,QAAQ,OAAO,OAAO,GAAQ,OAClC,GAAQ,SAAS,QAC1B,IAAa,QAAQ,OAAO,OAAO,EAAM,SAAS,QAAQ,OAAO,OAG/D,GAAA,QAAG,KAAK,GAAQ,uBAClB,GAAa,QAAQ,OAAO,sBAAsB,GAAQ,sBACjD,GAAA,QAAG,KAAK,GAAQ,WACzB,IAAa,QAAQ,OAAO,SAAS,GAAQ,SAGxC,MAEL,GAAA,QAAG,KAAK,MACV,IAAa,QAAQ,OAAO,UAAU,IAE/B,MAEF,GAAa,QAAQ;UAnGT,MAAM,IAAS;SAGlC,GAAQ,IAAI,SAAS,IACrB,GAAQ,WAAW,SAAS,aAE5B,GAAS,QAAQ,SAAS,GAAO;OA+TjC,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,QAAlB,YACT,aAAa;OAG3B,6BAA6B,SAAC,GAAA;AAhIlC,MAAA,UAAA,IAAA;AAAwG,YAAtF,IAAsF,GAAtF,QAAQ,IAA8E,GAA9E;AACxB,YAAI,EAAY,SAAS,SAAS,YAAa,EAAY,SAAS,OAApE;AAIA,cAAM,KAAc,GACd,KAAO,EAAY;AAEzB,YAAY,SAAS,EACnB,OAAO,IAAA,EAAA,SAAO,IAAI,KAClB,WAAW,IAAA,EAAA,SAAO,IAAI,KACtB,UAAU,IAAA,EAAA,SAAO,IAAI,KACrB,OAAO,EACL,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,QAAQ,GACR,QAAQ,OAIZ,GAAY,QAAQ,EAAY,SAAS,OACzC,GAAY,OAAO,EAAY,OAAO,WACtC,GAAY,YAAY,EAAY,OAAO;;SAyGjC,IACN,GAAgB;OAElB,4BAA4B,SAAC,GAAA;AAzGjC,MAAA,UAAA,IAAA;AAAuG,YAAtF,IAAsF,GAAtF,QAAQ,IAA8E,GAA9E;AACvB,YAAI,EAAY,SAAS,SAAS,YAAa,EAAY,SAAS,OAApE;AAEA,cAAM,KAAc,GAEd,KADgB,EAAY,aAAa,QAAQ,OAC1B,QACvB,KAAa,OAAW,gBAAgB,OAAW,UAEnD,KAAU,EAAY,MARyE,IASjC,EAAY,QAAjE,IATsF,EAS7F,OAAkB,IAT2E,EAS3E,WAAkB,IATyD,EAShE,OAAkB,KAT8C,EAS9C;AAIvD,cAFA,IAAA,EAAA,SAAO,IAAU,IAEb,IAAA;AAIF,gBAFA,IAAA,EAAA,SAAO,GAAW,KAEd,OAAW,cAAc;AAE3B,kBAAI,EAAU,MAAM,EAAU,QAAQ;AACpC,oBAAM,KAAO,EAAU;AAEvB,kBAAU,MAAM,EAAU,QAC1B,EAAU,SAAS;;AAErB,kBAAI,EAAU,OAAO,EAAU,OAAO;AACpC,oBAAM,KAAO,EAAU;AAEvB,kBAAU,OAAO,EAAU,OAC3B,EAAU,QAAQ;;;;AAKtB,cAAU,MAAM,KAAK,IAAI,GAAQ,KAAK,EAAU,SAChD,EAAU,SAAS,KAAK,IAAI,GAAQ,QAAQ,EAAU,MACtD,EAAU,OAAO,KAAK,IAAI,GAAQ,MAAM,EAAU,QAClD,EAAU,QAAQ,KAAK,IAAI,GAAQ,OAAO,EAAU;AAMtD,mBAAW,KAHX,EAAU,QAAQ,EAAU,QAAQ,EAAU,MAC9C,EAAU,SAAS,EAAU,SAAS,EAAU,KAE7B;AACjB,cAAU,KAAQ,EAAU,KAAQ,GAAS;AAG/C,aAAY,QAAQ,EAAY,SAAS,OACzC,GAAY,OAAO,GACnB,GAAY,YAAY;;SAyDf,IACL,GAAgB;OAElB,2BAzDJ,SAAA,GAAA;AAAsG,UAAtF,KAAsF,EAAtF,QAAQ,IAA8E,EAA9E;AACtB,UAAI,EAAY,SAAS,SAAS,YAAa,EAAY,SAAS,OAApE;AAEA,YAAM,IAAc;AAEpB,UAAY,QAAQ,EAAY,SAAS,OACzC,EAAY,OAAO,EAAY,OAAO,WACtC,EAAY,YAAY,EAAY,OAAO;;OAmDzC,oBA1UJ,SAAwB,GAAA;AAAK,UACnB,KAAsD,EAAtD,aAAa,IAAyC,EAAzC,cAAc,IAA2B,EAA3B,SAAS,KAAkB,EAAlB,MAAM,KAAY,EAAZ;AAElD,UAAK,IAAL;AAIA,YAAM,KAAO,IAAA,EAAA,SAAO,IAAI,GAAY,OAAO,IAAI,OACzC,KAAgB,EAAa,QAAQ;AAE3C,YACI,MAAiB,GAAc,WAAA,EAEhC,GAAY,iBAAA,CACX,gBAAgB,KAAK,GAAY,gBAChC,MAAU,GAAc,iBAAkB,IAL/C;AAWA,cAAI,GAAA,QAAG,OAAO,GAAc,QAAQ;AAClC,gBAAM,IAAc,EAClB,MAAA,OACA,OAAA,OACA,KAAA,OACA,QAAA;AAGF,qBAAW,KAAQ;AACjB,gBAAY,KAAQ,GAClB,GACA,GAAc,MAAM,IACpB,IACA,GAAY,eAAe,aAC3B,GACA,IACA,GAAc,UAAU,GAAO;AAInC,cAAY,OAAO,EAAY,QAAA,CAAS,EAAY,OACpD,EAAY,MAAM,EAAY,OAAA,CAAQ,EAAY,QAE9C,GAAY,QAAQ,EAAY,SAAS,EAAY,OAAO,EAAY,WAC1E,GAAI,SAAS,EACX,MAAM,UACN,OAAO;iBAGN;AACL,gBAAM,IAAQ,GAAc,SAAS,OAAO,GAAK,IAAI,GAAK,QAAQ,GAAO,eACnE,IAAS,GAAc,SAAS,OAAO,GAAK,IAAI,GAAK,SAAS,GAAO;AAEvE,YAAA,MAAS,MACX,GAAI,SAAS,EACX,MAAM,UACN,MAAO,KAAQ,MAAM,MAAO,KAAS,MAAM;;AAKjD,iBAAA,CAAO,EAAI,UAAA;;;SA+QX,UAAU,EACR,QAAA,OACA,qBAAA,OACA,MAAM,MAGN,QAAQ,KAMR,OAAO,MAMP,QAAQ,UAGV,SAAS,MAET,WA5CqB,SAAA,GAAA;AA4C0B,UAAlC,KAAkC,EAAlC,OAAO,IAA2B,EAA3B,MAAM,IAAqB,EAArB,MAClB,KAAU,GAAO,SACnB,KAAiB;AAErB,UAAI;AACF,aAAS,GAAQ,IAAO;eACf,IAAO;AAGhB,iBAFI,KAAY,IADA,KAGG,CAAC,OAAO,UAAU,QAAQ,UAA7C,IAAA,GAAA,IAAA,GAAA,QAAA,KAAuD;AAAlD,cAAM,IAAI,GAAA;AACT,aAAM,MACR,OAAa;;AAIjB,aAAS,GAAQ;;AAGnB,aAAO;OAGT,eAAe,QAAA,KAGF;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QAAA,KC5eA,EACb,IAAI,WACJ,SAFa,SAEJ,GAAA;AACP,QAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACbpB,QACI,IACA,IAFA,KAAW,GAAA,KAuCA,EACb,SAAS,SAAC,GAAA;AAAD,aAAoC,GAAQ;OACrD,QAAQ,SAAC,GAAA;AAAD,aAAmB,GAAO;OAClC,MAtCF,SAAe,GAAA;AAIb,UAHA,KAAU,EAAO,uBACjB,KAAS,EAAO,sBAAA,CAEX;AAGH,iBAFM,KAAU,CAAC,MAAM,OAAO,UAAU,MAExC,IAAA,GAAA,IAAqB,GAArB,QAAA,KAA8B;AAAzB,cAAM,IAAU,GAAJ;AACf,eAAU,EAAM,GAAA,OAAI,GAAJ,2BAChB,KACE,EAAM,GAAA,OAAI,GAAJ,4BACN,EAAM,GAAA,OAAI,GAAJ;;AAIZ,WAAU,MAAW,GAAQ,KAAK,IAClC,KAAS,MAAU,GAAO,KAAK,IAE1B,MACH,MAAU,GAAA,SAAC,IAAA;AACT,YAAM,KAAW,KAAK,OAChB,KAAa,KAAK,IAAI,GAAG,KAAM,MAAW,MAC1C,KAAQ,EAAO,WAAW,WAAA;AAE9B,aAAS,KAAW;WACnB;AAGH,eADA,KAAW,KAAW,IACf;SATC,OAYV,KAAS,GAAA,SAAC,IAAA;AAAD,eAAW,aAAa;SAAxB;;AAAwB,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAAA,IAAA,GAAA,YAAA,IAAA,GAAA,gBCyL9B,SAAwB,GAAA;AAK7B,aAJI,GAAA,QAAG,OAAO,MACZ,KAAY,OAAO,SAAS,OAGvB,EAAE,GAAG,EAAU,aAAa,GAAG,EAAU;OAAA,GAAA,qBAG3C,SAAA,GAQL,IAAA;AACA,UAPE,IAOF,EAPE,aACA,IAMF,EANE,SAOI,KAAgB,KAAe,EAAY,aAAa,QAAQ,EAAY,SAAS,MAAM;AAEjG,UAAA,CAAK,MAAA,CAAkB,GAAc;AAEnC,eADA,MACO,EAAE,GAAG,GAAG,GAAG;AAGpB,UAAM,KAAkB,GAAa,GAAc,WAAW,EAAY,cAAc,IAElF,KAAW,GAAU;AAC3B;AACA,UAAM,KAAU,GAAU;AAE1B,aAAO,EACL,GAAG,GAAQ,IAAI,GAAS,GACxB,GAAG,GAAQ,IAAI,GAAS;OAAA,GAAA,UAAA;AA9M5B,QAAM,KAAa,EACjB,UAAU,EACR,SAAA,OACA,QAAQ,IAGR,WAAW,MAGX,OAAO,OAGT,KAAK,KAAK,KAEV,aAAa,MACb,GAAG,GAGH,GAAG,GACH,GAAG,GAEH,aAAA,OACA,UAAU,GACV,QAAQ,GACR,OAAO,GAEP,OA1BiB,SA0BV,GAAA;AACL,SAAW,cAAA,MACX,GAAA,QAAI,OAAO,GAAW,IAEtB,EAAY,aAAa,IACzB,GAAW,cAAc,GACzB,GAAW,WAAW,GAAW,OACjC,GAAW,IAAI,GAAA,QAAI,QAAQ,GAAW;OAGxC,MApCiB,WAAA;AAqCf,SAAW,cAAA,OACP,GAAW,eACb,IAAW,YAAY,aAAa,OAEtC,GAAA,QAAI,OAAO,GAAW;OAIxB,QA7CiB,WAAA;AA6CP,UACA,IAAgB,GAAhB,aACA,KAA0B,EAA1B,cAAc,IAAY,EAAZ,SAChB,IAAa,EAAY,SAAS,MAClC,KAAU,GAAa,QAAQ,GAAY,YAC3C,KAAY,GAAa,GAAQ,WAAW,IAAc,IAC1D,KAAM,GAAW,OAEjB,KAAM,MAAM,GAAW,YAAY,KAEnC,IAAI,GAAQ,QAAQ;AAE1B,UAAI,KAAK,GAAG;AACV,YAAM,IAAW,EACf,GAAG,GAAW,IAAI,GAClB,GAAG,GAAW,IAAI;AAGpB,YAAI,EAAS,KAAK,EAAS,GAAG;AAC5B,cAAM,IAAa,GAAU;AAEzB,aAAA,QAAG,OAAO,MACZ,GAAU,SAAS,EAAS,GAAG,EAAS,KAC/B,MACT,IAAU,cAAc,EAAS,GACjC,GAAU,aAAa,EAAS;AAGlC,cAAM,IAAY,GAAU,KACtB,KAAQ,EACZ,GAAG,EAAU,IAAI,EAAW,GAC5B,GAAG,EAAU,IAAI,EAAW;AAG1B,UAAA,IAAM,KAAK,GAAM,MACnB,GAAa,KAAK,EAChB,MAAM,cACN,QAAQ,GACR,cAAA,IACA,OAAA,IACA,aAAA,GACA,WAAA;;AAKN,WAAW,WAAW;;AAGpB,SAAW,eACb,IAAA,QAAI,OAAO,GAAW,IACtB,GAAW,IAAI,GAAA,QAAI,QAAQ,GAAW;OAG1C,OAnGiB,SAmGV,GAA4B,IAAA;AAAwB,UAAA;AAGzD,aAAA,KAFgB,EAAa,QAEd,IAAY,eAA3B,OAA2B,SAApB,EAAgC;OAEzC,mBAxGiB,SAAA,GAAA;AA8Gd,UALD,KAKC,EALD,aACA,IAIC,EAJD;AAKA,UACI,GAAY,iBAAiB,GAAW,MAAM,GAAY,cAAc,GAAY,SAAS;AAKjG,YAAI,GAAY;AACd,aAAW,IAAI,GAAW,IAAI;aADhC;AAKA,cAAI,GACA,IACA,IACA,IAEI,KAA0B,GAA1B,cAAc,IAAY,GAAZ,SAChB,IAAa,GAAY,SAAS,MAClC,IAAU,GAAa,QAAQ,GAAY,YAC3C,IAAY,GAAa,EAAQ,WAAW,IAAc;AAEhE,cAAI,GAAA,QAAG,OAAO;AACZ,iBAAO,EAAQ,UAAU,GAAW,QACpC,IAAM,EAAQ,UAAU,GAAW,QACnC,KAAQ,EAAQ,UAAU,EAAU,aAAa,GAAW,QAC5D,KAAS,EAAQ,UAAU,EAAU,cAAc,GAAW;eACzD;AACL,gBAAM,KAAO,GAAS,qBAAqB;AAE3C,iBAAO,EAAQ,UAAU,GAAK,OAAO,GAAW,QAChD,IAAM,EAAQ,UAAU,GAAK,MAAM,GAAW,QAC9C,KAAQ,EAAQ,UAAU,GAAK,QAAQ,GAAW,QAClD,KAAS,EAAQ,UAAU,GAAK,SAAS,GAAW;;AAGtD,aAAW,IAAI,KAAQ,IAAI,KAAA,KAAY,GACvC,GAAW,IAAI,KAAS,IAAI,IAAA,KAAW,GAElC,GAAW,eAEd,IAAW,SAAS,EAAQ,QAC5B,GAAW,QAAQ,EAAQ,OAE3B,GAAW,MAAM;;;AAKhB,gBAAuB,GAAY,IAA4B,GAAA;AACpE,aACG,IAAA,QAAG,OAAO,KAAS,IAAA,GAAA,uBAAsB,GAAO,IAAc,KAAW,MAAU,IAAA,EAAA,WAAU;;AAF3F;AAAS,OAAA,IAAA;AAMT,gBAAoB,GAAA;AAKzB,aAJI,GAAA,QAAG,OAAO,MACZ,KAAY,OAAO,SAAS,OAGvB,EAAE,GAAG,EAAU,YAAY,GAAG,EAAU;;AAL1C;AAAS,OAAA,IAAA;AA6ChB,QAAA,KAAiC,EAC/B,IAAI,eACJ,SA9NF,SAAkB,GAAA;AAAc,UACtB,KAAsB,EAAtB,UAAU,IAAY,EAAZ;AAElB,QAAM,aAAa,IACnB,GAAW,MAAM,WAAA;AAAA,eAAM,EAAM;SAE7B,EAAQ,eAAe,aAAA,MACvB,GAAS,UAAU,aAAa,GAAW;OAwN3C,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,QAAlB,YACT,aAAa;OAG3B,wBAAwB,SAAA,GAAA;AAAqB,QAAlB,YACb,aAAa,MACzB,GAAW,QACP,GAAW,eACb,IAAW,cAAc;OAI7B,qBAAqB,GAAW,MAEhC,4BAA4B,SAAC,GAAA;AAAD,aAAc,GAAW,kBAAkB;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,WC9QpE,SAA+B,GAAiC,IAAA;AACrE,UAAI,IAAA;AAEJ,aAAO,WAAA;AAML,eALK,KACD,GAAA,OAAe,QAAQ,KAAK,KAC9B,IAAA,OAGK,EAAO,MAAM,MAAM;;OAAA,GAAA,aAIvB,SAA2C,GAAwB,IAAA;AAKxE,aAJA,EAAK,OAAO,GAAI,MAChB,EAAK,OAAO,GAAI,MAChB,EAAK,QAAQ,GAAI,OAEV;OAAA,GAAA,OAAA,QAAA,GAAA,OAGW,SAAC,GAAA;AAAD,aAAgB,KAAK,IAAI,IAAA;;AAAK,QAAA,KAAA;AC4JlD,gBAA0C,GAAA;AACxC,aAAI,GAAA,QAAG,KAAK,KACV,MAAK,QAAQ,cAAc,GAEpB,QAGL,MAAa,OAAb,QACK,KAAK,QAAQ,aAEb,QAGF,KAAK,QAAQ;;AAbtB;AAAS,OAAA,IAAA;AAgBT,gBAA4C,GAAA;AAC1C,aAAI,GAAA,QAAG,KAAK,KACV,MAAK,QAAQ,gBAAgB,GAEtB,QAGL,MAAY,OAAZ,QACK,KAAK,QAAQ,eAEb,QAGF,KAAK,QAAQ;;AAbtB;AAAS,OAAA,IAAA,OAaa,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QAAA,KAGP,EACb,IAAI,kCACJ,SA3LF,SAAkB,GAAA;AAAc,UAG5B,KACE,EADF;AAGF,SAAa,UAAU,YAAY,SAEjC,GACA,GACA,IACA,IAAA;AAEA,YAAM,KA4GV,SACE,IACA,GACA,GACA,GACA,GAAA;AAEA,cAAM,KAAO,GAAa,QAAQ,IAS5B,KAAM,EACV,QAAQ,MACR,cAAA,IACA,aAAA,GACA,SAAA,GACA,MAAA,IACA,SAbC,EAAqB,WACtB,EACE,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,KACF,EAAqB;AAY1B,iBAFA,EAAM,KAAK,oBAAoB,KAExB,GAAI;UAvI2B,MAAM,GAAO,IAAa,IAAS;AAEvE,eAAI,KAAK,QAAQ,gBACR,KAAK,QAAQ,cAAc,GAAS,GAAO,IAAQ,MAAM,IAAS,MAGpE;SA2BT,GAAa,UAAU,aAAa,IAAA,GAAA,UAAS,SAA8B,GAAA;AACzE,eAAO,KAAK,kBAAkB,cAAc;SAC3C,sGA0BH,GAAa,UAAU,YAAY,IAAA,GAAA,UAAS,SAA8B,GAAA;AACxE,eAAO,KAAK,kBAAkB,aAAa;SAC1C,oGAiCH,GAAa,UAAU,gBAAgB,IASvC,GAAa,UAAU,cAAc;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACuBvC,gBACE,GACA,IACA,GACA,GACA,IAAA;AAEA,aACE,GAAa,gBAAgB,GAAa,QAAQ,EAAO,OAAO,GAAS,MACzE,GAAa,QAAQ,EAAO,MAAM,WAClC,GAAuB,IAAc,GAAS,GAAQ,MAE/C,IAGF;;AAfT;AAAS,OAAA,IAAA;AAkBT,gBACE,GACA,IACA,GACA,GACA,IACA,IACA,IAAA;AAEA,eAAS,KAAI,GAAG,IAAM,EAAQ,QAAQ,KAAI,GAAK,MAAK;AAClD,YAAM,IAAQ,EAAQ,KAChB,IAAe,GAAc,KAC7B,IAAc,EAAM,UAAU,IAAS,GAAO,GAAa;AAEjE,YAAK,GAAL;AAIA,cAAM,KAAS,GAA2B,GAAa,GAAO,GAAc,IAAa;AAEzF,cAAI;AACF,mBAAO,EACL,QAAA,IACA,cAAc,GACd,SAAS;;;AAKf,aAAO,EAAE,QAAQ,MAAM,cAAc,MAAM,SAAS;;AA7BtD;AAAS,OAAA,IAAA;AAgCT,gBACE,GACA,IACA,GACA,GACA,IAAA;AAEA,UAAI,KAA0B,IAC1B,KAA2B,IAE3B,KAAU;AAEd,iBAAsB,GAAA;AACpB,WAAQ,KAAK,IACb,GAAc,KAAK;;AAFrB;AAKA,WALS,GAAA,GAAA,MAKF,GAAA,QAAG,QAAQ,OAAU;AAC1B,aAAU,IACV,KAAgB,IAEhB,GAAM,cAAc,aAAa,IAAS;AAE1C,YAAM,IAAa,GACjB,GACA,IACA,GACA,IACA,IACA,GACA;AAGF,YAAI,EAAW,UAAA,CAAW,EAAW,aAAa,QAAQ,EAAW,OAAO,MAAM;AAChF,iBAAO;AAGT,aAAU,GAAS,WAAW;;AAGhC,aAAO,EAAE,QAAQ,MAAM,cAAc,MAAM,SAAS;;AAxCtD;AAAS,OAAA,IAAA;AA2CT,gBACE,GADF,IAWE,GAAA;AACA,UATE,IASF,GATE,QACA,KAQF,GARE,cACA,KAOF,GAPE;AAQF,UAAS,KAAU,EAAE,MAAM,QAE3B,EAAY,eAAe,IAC3B,EAAY,UAAU,IACtB,IAAA,GAAA,YAAW,EAAY,UAAU,IAEjC,EAAY,OAAO,MAAgB,EAAO,OAAO,GAAa,QAAQ,MAAW,MAEjF,GAAqB,GAAa,IAElC,EAAM,KAAK,sBAAsB,EAAE,aAAA;;AAvBrC;AAAS,OAAA,IAAA;AA0BT,gBACE,GACA,IACA,GACA,GAAA;AAEA,UAAM,KAAU,EAAa,SACvB,KAAa,GAAQ,EAAO,MAAM,KAClC,KAAgB,GAAQ,EAAO,MAAM,eACrC,KAAe,EAAM,UAAU,iBACjC,IAAqB,GACrB,IAAoB,GACpB,IAAe;AAGnB,UAAA,CAAM,OAAc,MAAiB;AACnC,eAAA;AAGF,eAAA,IAAA,GAAA,IAA0B,EAAM,aAAa,KAA7C,QAAA,KAAmD;AAAA,YAAxC,KAAe,EAAM,aAAa,KAAM,IAC3C,KAAc,GAAY,SAAS;AAEzC,YAAK,GAAY,iBAMjB,GAFA,KAE0B,MAItB,GAAY,iBAAiB,KAIjC,OAAqB,OAAgB,EAAO,OAAO,IAAI,MAE9B,MAIrB,GAAY,YAAY,MAC1B,MAEI,OAAgB,EAAO,QAAQ,KAAgB;AACjD,iBAAA;;AAKN,aAAO,KAAe;;AAnDxB;AAAS,OAAA,IAAA;AAsDT,gBAA0B,GAAe,IAAA;AACvC,aAAI,GAAA,QAAG,OAAO,KACZ,IAAM,UAAU,kBAAkB,GAE3B,QAGF,GAAM,UAAU;;AAPzB;AAAS,OAAA,IAAA;AAUT,gBAAoB,GAAkB,IAAgB,GAAA;AAAc,UAC3C,IAAsB,EAAM,UAA3C;AAEJ,WAAqB,MAAsB,KAC7C,GAAkB,MAAM,SAAS,KAGnC,EAAQ,cAAc,gBAAgB,MAAM,SAAS,IACrD,EAAQ,MAAM,SAAS,IACvB,EAAM,UAAU,gBAAgB,KAAS,IAAU;;AATrD;AAAS,OAAA,IAAA;AAYT,gBAAqD,GAA6B,IAAA;AAAc,UACtF,IAAoC,EAApC,cAAc,IAAsB,EAAtB,SAAS,KAAa,EAAb;AAE/B,UAAM,EAAY,gBAAgB,WAAW,KAAgB,EAAa,QAAQ,aAAlF;AASA,YAAI,KAAS;AAEb,YAAI,GAAS,MAAM;AACjB,cAAM,KAAgB,EAAa,QAAQ,GAAS,MAAM;AAGxD,eADE,GAAA,QAAG,KAAK,MACD,GAAc,IAAU,GAAc,GAAS,EAAY,gBAE3D,GAAM,QAAQ,IAAI,GAAS,MAAM,UAAU;;AAIxD,WAAU,EAAY,SAAS,MAAU,IAAI;;AAnBvC,WAAM,UAAU,iBAClB,GAAU,GAAM,UAAU,eAAe,IAAI;;AANnD;AAAS,OAAA,IAAA,OAM0C,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAqBnD,QAAA,KAA0B,EACxB,IAAI,mBACJ,QAAQ,CAAC,YACT,SAvUF,SAAkB,GAAA;AAAc,UACN,KAAuB,EAAvC,gBAA0B,IAAa,EAAb;AAElC,QAAM,UAAU,GAAA,UAEhB,EAAS,KAAK,gBAAgB,MAC9B,EAAS,KAAK,cAAA,MAEd,IAAA,EAAA,SAAO,EAAS,WAAW,EACzB,aAAA,OACA,KAAK,IAAA,GACL,eAAe,GACf,WAAW,MACX,YAAY,MAIZ,cAAc,MAchB,GAAS,kBAAkB,SAAC,GAAA;AAAD,eAAsB,GAAgB,GAAU;SAE3E,EAAM,YAAY,EAEhB,iBAAiB,IAAA,GACjB,wBAAA,IACA,eAAe;OAmSjB,WAAW,EACT,qBAhSJ,SAAA,GAEE,IAAA;AACA,UAFE,IAEF,EAFE,aAAa,IAEf,EAFe,SAAS,KAExB,EAFwB,OAAO,KAE/B,EAF+B;AAG3B,QAAY,iBAGhB,GAAQ,GADW,GAAc,GAAa,GAAS,IAAO,IAAa,KAC1C;OA0R/B,qBAAqB,SAAC,GAAK,IAAA;AAvR/B,MAAA,UAAA,GAEE,GAAA;AACA,YAFE,KAEF,EAFE,aAAa,KAEf,EAFe,SAAS,KAExB,EAFwB,OAAO,KAE/B,EAF+B;AAG3B,WAAY,gBAAgB,WAAW,GAAY,iBAAiB,GAAY,iBAGpF,GAAQ,IADW,GAAc,IAAa,IAAS,IAAO,IAAwB,IACrD;SAiRf,GAAK,KA9QzB,SAAsB,GAAsC,GAAA;AAAc,YAChE,KAAgB,EAAhB;AAER,YACG,GAAY,iBAAA,CACb,GAAY,iBACX,GAAY,mBACZ,GAAY,SAAS,MAJxB;AASA,YAAM,KAAK,0BAA0B;AAZmC,cAchE,KAAiB,GAAjB,cACF,KAAc,GAAwC,SAAS;AAEjE,gBAAc,MAGd,IAAa,QAAQ,IAAY,eAAA,CAChC,GAAuB,IAAc,GAAY,SAAS,GAAY,UAAU,KAEjF,GAAY,SAEZ,IAAY,MAAM,GAAY,UAAU,IAAc,GAAY,UAClE,GAAqB,IAAa;;QAqPtB,GAAK;OAEnB,qBAlPJ,SAAA,GAA2E,IAAA;AAAc,UAA3D,IAA2D,EAA3D,aACpB,IAAiB,EAAjB;AAEJ,WAAgB,EAAa,QAAQ,eACvC,GAAU,EAAY,SAAS,IAAI;SAgPrC,iBAAA,IACA,wBAAA,IACA,gBAAA;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QAAA,KCpUa,EACb,IAAI,uBACJ,WAAW,EAAE,0BA3Ef,SAAA,GAA6F,IAAA;AAAc,UAAnF,IAAmF,EAAnF,aAAa,IAAsE,EAAtE,aAAa,KAAyD,EAAzD,IAAI,KAAqD,EAArD;AACpD,UAAI,EAAY,SAAS,SAAS,QAAlC;AAGA,YAAM,KAAO,KAAK,IAAI,KAChB,KAAO,KAAK,IAAI,KAChB,IAAgB,EAAY,aAAa,QAAQ,MACjD,IAAY,EAAc,WAC1B,IAAc,KAAO,KAAO,MAAM,KAAO,KAAO,MAAM;AAQ5D,YANA,EAAY,SAAS,OACnB,EAAc,aAAa,UACtB,EAAY,KACb,EAAc,UAGhB,MAAgB,QAAQ,MAAc,QAAQ,MAAc,GAAa;AAEzE,YAAwC,SAAS,OAAO;AA8B1D,mBA3BI,IAAU,GAER,KAAe,SAAU,IAAA;AAC7B,gBAAI,OAAiB,EAAY,cAAjC;AAEA,kBAAM,IAAU,EAAY,aAAa,QAAQ;AAEjD,kBAAA,CAAK,EAAQ,eAAe,GAAa,gBAAgB,GAAS,GAAS,IAAc;AACvF,oBAAM,IAAS,GAAa,UAC1B,EAAY,aACZ,EAAY,WACZ,GACA;AAGF,oBACE,KACA,EAAO,SAAS,UAyB1B,SAAyB,IAAmB,IAAA;AAC1C,sBAAA,CAAK;AACH,2BAAA;AAGF,sBAAM,KAAW,GAAa,QAAQ,KAAK;AAE3C,yBAAO,OAAc,QAAQ,OAAa,QAAQ,OAAa;kBA/BxC,GAAa,OAC5B,GAAA,QAAU,eAAe,GAAQ,IAAc,GAAS,GAAa;AAErE,yBAAO;;;aAMN,GAAA,QAAG,QAAQ,MAAU;AAC1B,gBAAM,KAAe,GAAM,cAAc,aAAa,GAAS;AAE/D,gBAAI,IAAc;AACd,gBAAwC,SAAS,OAAO,QAC1D,EAAY,eAAe,IAC3B,EAAY,UAAU;AACtB;;AAGF,gBAAU,IAAA,GAAA,YAAW;;;;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACxC3B,gBAA0B,GAAA;AACxB,UAAM,KAAa,EAAY,YAAY,EAAY,SAAS;AAEhE,UAAA,CAAK;AACH,eAAO;AAGT,UAAM,IAAU,EAAY,aAAa;AAEzC,aAAO,EAAQ,IAAY,QAAQ,EAAQ,IAAY;;AATzD;AAAS,OAAA,IAAA,OASgD,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAGzD,QAAA,KAAqB,EACnB,IAAI,mBACJ,SAvBF,SAAkB,GAAA;AAAc,UACtB,KAAa,EAAb;AAER,QAAM,UAAU,GAAA,UAEhB,GAAS,UAAU,OAAO,GAC1B,GAAS,UAAU,QAAQ;OAkB3B,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,QAAlB,YACT,qBAAqB;OAGnC,sBAAsB,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB,aACjB,IAAO,GAAgB;AAEzB,UAAO,KACT,IAAY,qBAAqB,WAAW,WAAA;AAC1C,WAAY,MAAM,GAAY,UAAU,GAAY,cAAc,GAAY;SAC7E;OAIP,qBAAqB,SAAA,GAAA;AAAgC,UAA7B,KAA6B,EAA7B,aAAa,IAAgB,EAAhB;AAC/B,SAAY,sBAAsB,GAAY,mBAAA,CAAoB,KACpE,cAAa,GAAY,qBACzB,GAAY,qBAAqB;OAKrC,0BAA0B,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB;AACN,SAAgB,MAElB,KACjB,IAAY,SAAS,OAAO;SAIlC,iBAAA;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QAAA,KCnEa,EACb,IAAI,cACJ,SAFa,SAEJ,GAAA;AACP,QAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACOpB,gBAA6C,GAAA;AAC3C,aAAI,wBAAwB,KAAK,KAC/B,MAAK,QAAQ,iBAAiB,GACvB,QAGL,GAAA,QAAG,KAAK,KACV,MAAK,QAAQ,iBAAiB,IAAW,WAAW,SAC7C,QAGF,KAAK,QAAQ;;AAXtB;AAAS,OAAA,IAAA;AAsDT,gBAAA,GAAA;AAA4G,UAA7E,KAA6E,EAA7E,aAAa,IAAgE,EAAhE;AACtC,SAAY,gBACd,GAAY,aAAa,uBAAuB;;AAFpD;AAAS,OAAA,IAAA;AAMF,gBAAkB,GAAA;AAAc,UAE7B,KAAiB,EAAjB;AAYR,SAAa,UAAU,iBAAiB,IAExC,GAAa,UAAU,yBAAyB,SAAU,GAAA;AACxD,eA/DJ,SAAiC,GAA4B,IAAc,IAAA;AACzE,cAAM,KAAU,EAAa,QAAQ;AAErC,cAAI,OAAY;AAEhB,gBAAI,OAAY,UAAhB;AAUA,kBAAI,GAAM,OAAO,mBAAmB,sBAAsB,KAAK,GAAM,OAAO;AAC1E,oBAAM,KAAM,IAAA,EAAA,WAAU,GAAM,QAAQ,UAC9B,IAAa,GAAM,cAAc;AAEvC,oBAAA,CAAM,KAAA,CAAc,EAAW,UAAW,EAAW,OAAO,YAA7B;AAC7B;;AAKA,qDAAuC,KAAK,GAAM,SAMpD,GAAA,QAAG,QAAQ,GAAM,WACjB,IAAA,GAAA,iBAAgB,GAAM,QAAQ,4EAKhC,GAAM;;AA/BJ,iBAAM;UAyDwB,MAAM,GAAO;SAI7C,EAAM,aAAa,UAAU,KAAK,EAChC,MAAM,aACN,UAFgC,SAEtB,GAAA;AACR,iBAAA,IAAA,GAAA,IAA0B,EAAM,aAAa,KAA7C,QAAA,KAAmD;AAAA,cAAxC,KAAe,EAAM,aAAa,KAAM;AACjD,cACE,GAAY,WACX,IAAY,YAAY,EAAM,UAAU,IAAA,GAAA,cAAa,GAAY,SAAS,EAAM;AAGjF,mBAAA,KADA,GAAY,aAAa,uBAAuB;;;;AA7BnD;AAAS,OAAA,IAAA,OA6B0C,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,IAAA,GAAA,UAAA;AAAA,QAAA,KAQ3C,EACb,IAAI,mCACJ,SAAA,IACA,WAAW,CAAC,QAAQ,QAAQ,MAAM,UAAU,OAAO,SAAC,GAAK,IAAA;AAEvD,aADA,EAAG,gBAAA,OAAiB,OAAe,IAC5B;OACN;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,GAAA,UCzHU;AAAA,QCmDV,IAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,SAAA,GAAA;AAAA,QAAA,cAAA,eAAA,EAAA,YAAA,aAAA,EAAA,cAAA;MAAA,MAAA,MAAA,MAsCK,GAAU,aAWV,GAAU,WAiBV,GAAU;AAiCpB,QAAA,KAEI,EAAE,IAFK,aAED,SAAS,WAAA;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UCpJJ,GAAA,kCAAkC,IAAA;AAC/C,UAAM,IAAO;AAEb,eAAW,KAAQ,IAAQ;AACzB,YAAM,KAAQ,GAAO;AAEjB,WAAA,QAAG,YAAY,MACjB,EAAK,KAAQ,EAAM,MACV,GAAA,QAAG,MAAM,MAClB,EAAK,KAAQ,GAAI,KAAK,MAEtB,EAAK,KAAQ;;AAIjB,aAAO;OAfM,MAAA;AAeN,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA,QAAA;AAAA,iBAAA;QAAA,MAAA,SAAA,GAAA,GAAA;AAAA,YAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA,IAAA;AAAA,cAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,KAAA;AAAA,cAAA;AAAA,qBAAA,GAAA,IAAA,EAAA,OAAA,aAAA,CAAA,MAAA,KAAA,EAAA,QAAA,SAAA,IAAA,KAAA,EAAA,QAAA,CAAA,KAAA,GAAA,WAAA,IAAA,KAAA;AAAA;mBAAA,GAAA;AAAA,iBAAA,MAAA,KAAA;oBAAA;AAAA,gBAAA;AAAA,oBAAA,EAAA,UAAA,QAAA,EAAA;sBAAA;AAAA,kBAAA;AAAA,sBAAA;;;AAAA,iBAAA;;QAAA,GAAA,OAAA,SAAA,GAAA,GAAA;AAAA,YAAA,GAAA;AAAA,cAAA,OAAA,KAAA;AAAA,mBAAA,GAAA,GAAA;AAAA,cAAA,KAAA,OAAA,UAAA,SAAA,KAAA,GAAA,MAAA,GAAA;AAAA,iBAAA,OAAA,YAAA,EAAA,eAAA,MAAA,EAAA,YAAA,OAAA,OAAA,SAAA,OAAA,QAAA,MAAA,KAAA,KAAA,OAAA,eAAA,2CAAA,KAAA,MAAA,GAAA,GAAA,KAAA;;QAAA,GAAA,OAAA,WAAA;AAAA,cAAA,IAAA,UAAA;;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,gBAAA,IAAA,GAAA,UAAA;AAAA,QCQY,KAAA,WAAA;AASnB,iBAAa,GAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAA0B,MAAA,IAAA,GAAA,MAAA,UARb,KAQa,GAAA,MAAA,eAPnB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,MAOlB,GAAA,MAAA,cAAA,SAAA,GAAA,MAAA,UAAA,SAAA,GAAA,MAAA,aAAA,SAAA,GAAA,MAAA,SAAA,SAAA,GAAA,MAAA,eAAA,SACrC,KAAK,cAAc,GACnB,KAAK,SAAS;;AAFhB;AAAA,SAAA,GAAA;AAEgB,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,SAAA,OAGhB,SAAA,GAAyC,IAAA;AAAmB,YAAnD,KAAmD,EAAnD,OACC,KAAgB,KAAhB,aACF,KAwUV,SAA0B,GAAA;AACxB,cAAM,IAAgB,EAAY,aAAa,QAAQ,EAAY,SAAS,OACtE,IAAkB,EAAc;AAEtC,iBAAI,KAAmB,EAAgB,SAC9B,IAGF,CAAC,QAAQ,YAAY,aAAa,YAAY,iBAAiB,gBACnE,IAAI,SAAC,IAAA;AACJ,gBAAM,KAAU,EAAc;AAE9B,mBACE,MACA,GAAQ,WAAW,EACjB,SAAA,IACA,SAAS,GAAQ;aAItB,OAAO,SAAC,IAAA;AAAD,mBAAA,CAAA,CAAS;;UA5VoB;AACrC,aAAK,cAAc,KAEnB,KAAK,QAAQ,IAAA,EAAA,SAAO,IAAI,GAAY,QACpC,KAAK,cAAc,GAAc,GAAY,MAAM,KACnD,KAAK,aAAa,EAAE,GAAG,GAAG,GAAG;AAE7B,YAAM,IAAM,KAAK,QAAQ,EACvB,OAAA,IACA,YAAA,IACA,QAAA;AAQF,eALA,KAAK,SAAS,MACd,KAAK,SAAS,IAEE,KAAK,SAAS,KAAK,OAAO;WAAA,EAAA,KAAA,WAAA,OAK5C,SAAS,GAAA;AAA2B,YAC1B,KAAgB,KAAhB;AASR,eAPA,EAAI,cAAc,IAClB,EAAI,eAAe,GAAY,cAC/B,EAAI,UAAU,GAAY,SAC1B,EAAI,OAAO,EAAI,QAAQ,GAAY,MACnC,EAAI,QAAQ,KAAK,OACjB,EAAI,cAAc,KAAK,aAEhB;WAAA,EAAA,KAAA,YAAA,OAGT,SAAU,GAAA;AACR,iBAAA,KAAA,GAAA,KAAoB,KAAK,OAAzB,QAAA,MAAiC;AAAA,cAAtB,KAAS,KAAK,OAAQ;AAC3B,aAAM,QAAQ,SAChB,GAAI,QAAQ,IACZ,GAAM,QAAQ,MAAM;;WAAA,EAAA,KAAA,UAAA,OAK1B,SAAQ,GAAA;AAA2D,YACzD,KAAuD,EAAvD,OAAO,KAAgD,EAAhD,QAAQ,KAAwC,EAAxC,eAAqB,KAAmB,EAAzB;AAEtC,UAAI,SAAS,IAAA,EAAA,SAAO,IAAI,EAAI,aAC5B,EAAI,OAAO,IAAA,EAAA,SAAO,IAAI;AAMtB,iBAJM,IAAS,KAAgB,KAAK,OAAO,MAAM,MAAiB,KAAK,QAEjE,IAAY,GAAa,EAAI,QAAQ,EAAI,OAE/C,IAAA,GAAA,IAAoB,EAApB,QAAA,KAA4B;AAAA,cAAA,GAAjB,KAAS,EAAQ,IAClB,KAAY,GAAZ,SACF,KAAqB,IAAA,EAAA,SAAO,IAAI,EAAI,SACtC,IAAc;AAEd,UAAA,KAAA,GAAM,YAAN,QAAA,EAAe,OAAO,KAAK,SAAS,IAAS,IAAQ,OACvD,GAAI,QAAQ,IACZ,IAAc,GAAM,QAAQ,IAAI,IAEhC,GAAU,SAAS,KAAK,YAAY,OAAO,EAAI,MAAM,EACnD,GAAG,EAAI,OAAO,IAAI,GAAmB,GACrC,GAAG,EAAI,OAAO,IAAI,GAAmB,OAIzC,EAAU,WAAW,KAAK;;AAG5B,UAAU,MAAM,IAAI,EAAI,OAAO,IAAI,EAAI,WAAW,GAClD,EAAU,MAAM,IAAI,EAAI,OAAO,IAAI,EAAI,WAAW,GAElD,EAAU,UAAU,OAAO,EAAI,KAAK,OAAO,GAAe,MAC1D,EAAU,UAAU,QAAQ,EAAI,KAAK,QAAQ,GAAe,OAC5D,EAAU,UAAU,MAAM,EAAI,KAAK,MAAM,GAAe,KACxD,EAAU,UAAU,SAAS,EAAI,KAAK,SAAS,GAAe;AAE9D,YAAM,IAAa,KAAK,OAAO,QACzB,KAAW,KAAK,OAAO;AAE7B,YAAI,KAAc,IAAU;AAC1B,cAAM,KACJ,EAAU,KAAK,SAAS,GAAS,QACjC,EAAU,KAAK,UAAU,GAAS,SAClC,EAAU,KAAK,QAAQ,GAAS,OAChC,EAAU,KAAK,WAAW,GAAS;AAErC,YAAU,UACR,MAAe,EAAW,MAAM,EAAU,OAAO,KAAK,EAAW,MAAM,EAAU,OAAO;;AAG5F,eAAO;WAAA,EAAA,KAAA,sBAAA,OAGT,SAAoB,GAAA;AAAyC,YACnD,KAAgB,KAAhB,aACA,KAAU,EAAV,OACF,KAAY,GAAY,OAAO,KAC/B,KAAc,GAAY,OAAO,OAC/B,IAAuB,KAAvB,QAAQ,IAAe,KAAf,YACV,IAAW,EAAO;AAEpB,eAAU,WACZ,IAAA,EAAA,SAAO,KAAK,YAAY,EAAO;AAGjC,iBAAA,IAAA,GAAA,IAAiC,CAC/B,CAAC,IAAa,IACd,CAAC,IAAW,IAFd,QAAA,KAGY;AAAA,cAAA,KAAA,GAHqB,CAC/B,CAAC,IAAa,IACd,CAAC,IAAW,IACF,IAAA,IAHA,KAGA,GAAA,IAHW,KAGX,GAAA;AACV,aAAU,KAAK,KAAK,GAAM,GAC1B,GAAU,KAAK,KAAK,GAAM,GAC1B,GAAU,OAAO,KAAK,GAAM,GAC5B,GAAU,OAAO,KAAK,GAAM;;AAnB6B,YAsBnD,IAAc,KAAK,OAAnB,WACF,IAAO,EAAI,QAAQ,GAAY;AAErC,UAAK,QAAQ,EAAU,MACvB,EAAK,SAAS,EAAU,OACxB,EAAK,OAAO,EAAU,KACtB,EAAK,UAAU,EAAU,QAEzB,EAAK,QAAQ,EAAK,QAAQ,EAAK,MAC/B,EAAK,SAAS,EAAK,SAAS,EAAK;WAAA,EAAA,KAAA,eAAA,OAGnC,SACE,GAAA;AAMc,YACN,KAAgB,KAAhB,aACA,KAAiC,EAAjC,OAAO,KAA0B,EAA1B,QAAQ,KAAkB,EAAlB,eAEjB,IAAS,KAAK,OAClB,KAAK,QAAQ,EACX,QAAA,IACA,OAAA,IACA,YAAY,EAAI,kBAAkB,GAAY,OAAO,IAAI;AAQ7D,YAJA,KAAK,SAAS,GAAA,CAKX,EAAO,WAAA,EACN,MAAiB,KAAgB,KAAK,OAAO,WAC/C,GAAY;AAEZ,iBAAA;AAGF,YAAI,EAAI,gBAAgB;AAAA,cACd,IAAS,GAAY,OAAO,IAA5B,MACF,IAAa,EACjB,GAAG,EAAI,eAAe,IAAI,EAAK,GAC/B,GAAG,EAAI,eAAe,IAAI,EAAK;AAGjC,YAAO,OAAO,KAAK,EAAW,GAC9B,EAAO,OAAO,KAAK,EAAW,GAC9B,EAAO,MAAM,KAAK,EAAW,GAC7B,EAAO,MAAM,KAAK,EAAW;;AAG/B,aAAK,mBAAmB;WAAA,EAAA,KAAA,aAAA,OAG1B,SAAW,GAAA;AAA8E,YAC/E,KAAuB,EAAvB,aAAa,KAAU,EAAV,OACf,KAAS,KAAK;AAEpB,YAAK,MAAW,GAAO,QAAvB;AAMA,mBAFI,KAAA,OAEJ,IAAA,GAAA,IAAoB,GAApB,QAAA,KAA4B;AAAA,gBAAjB,IAAS,GAAQ;AAC1B,cAAI,QAAQ;AADc,gBAElB,IAAqB,EAArB,SAAS,IAAY,EAAZ,SAEX,KAAc,EAAQ,aAAa,EAAQ,UAAW;AAE5D,gBAAI;AAEF,qBADA,KAAK,YAAY,IAAA;AAInB,iBAAW,MAAA,CAAc,MAAY,KAAK,SAAS,GAAA,MAAe,EAAI,OAAA;;AAGpE,gBAEF,GAAY,KAAK,EAAE,OAAA,IAAO,QAAA;;WAAQ,EAAA,KAAA,QAAA,OAItC,SAAM,GAAA;AAAmC,YAC/B,KAAgB,EAAhB;AAER,YAAK,KAAK,UAAW,KAAK,OAAO,QAAjC;AAIA,cAAM,KAAoC,IAAA,EAAA,SACxC,EACE,QAAQ,KAAK,QACb,cAAc,GAAY,cAC1B,SAAS,GAAY,SACrB,MAAM,QAER;AAGF,eAAK,QAAQ;AAEb,mBAAA,KAAA,GAAA,KAAoB,KAAK,OAAzB,QAAA,MAAiC;AAAA,gBAAtB,KAAS,KAAK,OAAQ;AAC/B,eAAY,QAAQ,IAEhB,GAAM,QAAQ,QAChB,GAAM,QAAQ,KAAK;;AAIvB,eAAK,SAAS,MACd,KAAK,YAAY;;WAAA,EAAA,KAAA,iBAAA,OAGnB,SAAe,GAAA;AACb,aAAK,SAAS;AAEd,iBAAS,KAAQ,GAAG,KAAQ,EAAa,QAAQ,MAAS;AAAA,cAAA,KACrB,EAAa,KAAxC,KADgD,GAChD,SAAS,KADuC,GACvC,SAAS,IAD8B,GAC9B;AAE1B,eAAK,OAAO,KAAK,EACf,SAAA,IACA,SAAA,IACA,OAAA,IACA,MAAA;;AAIJ,eAAO,KAAK;WAAA,EAAA,KAAA,4BAAA,OAGd,SAAA,GAAA;AAAyG,YAAA,KAAA,EAA7E,aAAe,KAA8D,GAA9D,QAAQ,KAAsD,GAAtD,MAAM,KAAgD,GAAhD;AACvD,YAAK,GAAa,QAAlB;AAUA,mBARQ,IAAe,GAAf,YAH+F,IAIhE,GAAa,QAArC,IAJwF,EAI/F,OAAiB,IAJ8E,EAI9E,WAEnB,KAAkB,CACtB,CAAC,GAAO,OAAO,IACf,CAAC,GAAO,KAAK,KAGf,KAAA,GAAA,KAAiC,GAAjC,QAAA,MAAyD;AAAA,gBAAA,KAAA,GAAxB,GAAwB,KAAA,IAA7C,IAA6C,GAAA,IAAlC,IAAkC,GAAA;AACvD,cAAU,KAAK,KAAK,EAAM,GAC1B,EAAU,KAAK,KAAK,EAAM,GAC1B,EAAU,OAAO,KAAK,EAAM,GAC5B,EAAU,OAAO,KAAK,EAAM;;AAG9B,aAAK,QAAQ,EAAU,MACvB,GAAK,SAAS,EAAU,OACxB,GAAK,OAAO,EAAU,KACtB,GAAK,UAAU,EAAU;;WAAA,EAAA,KAAA,YAAA,OAG3B,SAAU,GAAS,IAAkB,IAAgB,IAAA;AACnD,eAAA,CAAA,EAEG,KACD,EAAQ,YADP,SAGA,MAAA,CAAmB,EAAQ,WAE3B,EAAQ,WAAA,CAAY,MAEpB,OAAU,WAAV,CAAsB,EAAQ;WAAA,EAAA,KAAA,YAAA,OAQnC,SAAU,GAAA;AACR,aAAK,cAAc,EAAM,aACzB,KAAK,aAAa,EAAM,YACxB,KAAK,QAAQ,EAAM,OACnB,KAAK,SAAS,EAAM,OAAO,IAAI,SAAC,IAAA;AAAD,iBAAO,IAAA,GAAA,SAAM;YAC5C,KAAK,SAAS,GAAa,IAAA,EAAA,SAAO,IAAI,EAAM,OAAO,SAAS,IAAA,EAAA,SAAO,IAAI,EAAM,OAAO;WAAA,EAAA,KAAA,WAAA,OAGtF,WAAA;AACE,iBAAW,KAAQ;AACjB,eAAK,KAAQ;eAAA,GAAA,GAAA,WAAA,IAAA;;AAKnB,gBAAuB,GAAgB,IAAA;AACrC,aAAO,EACL,MAAA,IACA,QAAA,GACA,OAAO,EAAE,GAAG,GAAG,GAAG,KAClB,WAAW,EACT,MAAM,GACN,OAAO,GACP,KAAK,GACL,QAAQ,KAEV,YAAY,IACZ,SAAA;;AAZJ;AAAS,OAAA,IAAA;AAuCF,gBAAwB,GAAM,IAAA;AACnC,aAAO,IACH,EACA,MAAM,GAAO,IAAI,EAAK,MACtB,KAAK,GAAO,IAAI,EAAK,KACrB,OAAO,EAAK,QAAQ,GAAO,GAC3B,QAAQ,EAAK,SAAS,GAAO,MAE7B,EACA,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ;;AAZP;AAAS,OAAA,IAAA,OAYF,GAAA,UAAA;AAAA,QAAA,KAAA;ACtQP,gBAAA,GAAA;AAMJ,UALD,KAKC,EALD,QAMM,IADL,EAJD,YAK2B,aAAc;AAErC,WACF,IAAO,YAAY,EAAO;;AAVvB;AAAS,OAAA,IAAA,OAUc,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eA9DvB,SAKJ,GAAiD,IAAA;AAAa,UACvD,IAAa,EAAb,UACF,IAAU,EACd,OAAO,EAAO,OACd,KAAK,EAAO,KACZ,WAAW,EAAO,WAClB,MAAM,EAAO,QAGT,KAAW,GAAA,SAAC,IAAA;AAChB,YAAM,KAAW,MAAY;AAK7B,iBAAW,MAHX,GAAQ,UAAU,GAAQ,YAAlB,OAGW;AACX,gBAAQ,MACV,IAAgB,MAAQ,EAAS;AAIvC,YAAM,IAA6C,EACjD,SAAA,IACA,SAAA,GACA,MAAA,IACA,QAAQ,WAAA;AAEN,iBADA,GAAQ,UAAA,MACD;WAET,SAAS,WAAA;AAEP,iBADA,GAAQ,UAAA,OACD;;AAIX,eAAO;SA1BQ;AAmCjB,aANI,MAAwB,OAAT,MAAS,YAE1B,IAAS,YAAY,GACrB,GAAS,WAAW,IAGf;OAAA,GAAA,oBAAA,IAAA,GAAA,UAAA;AAiBT,QAAA,KAA8B,EAC5B,IAAI,kBACJ,QAAQ,CAAC,YACT,SAAS,SAAC,GAAA;AACR,QAAM,SAAS,UAAU,YAAY;OAEvC,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB;AACrB,SAAY,eAAe,IAAI,GAAA,QAAa;OAG9C,oCAAoC,SAAC,GAAA;AACnC,UAAM,KAAe,EAAI,YAAY;AAErC,SAAa,MAAM,GAAK,EAAI,YAAY,OAAO,MAAM,OACrD,EAAI,YAAY,QAAQ,GAAa,OACrC,GAAa,mBAAmB;OAGlC,mCAAmC,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,YAAY;OAErF,kCAAkC,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,UAAU;OAElF,6BAA6B,IAC7B,4BAA4B,IAC5B,2BAA2B,IAE3B,mCAAmC,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,yBAAyB;OAClG,kCAAkC,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,yBAAyB;OAEjG,qBAAqB,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,KAAK;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,WAAA,QAAA,GAAA,WCzJlC,EAChC,MAAM,EACJ,gBAAgB,QAChB,aAAa,UAGf,WAAW,EACT,SAAA,OACA,QAAQ,EAAE,GAAG,GAAG,GAAG,OAGrB,SAAS;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,MAAA,OAAA,kBAAA,SAAA,GAAA,GAAA;AAAA,eAAA,EAAA,YAAA,GAAA;SAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,CAAA,MAAA,GAAA,QAAA,YAAA,OAAA,MAAA,aAAA,GAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,UAAA,MAAA;AAAA,cAAA,IAAA,eAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,iBAAA,OAAA,iBAAA,SAAA,IAAA;AAAA,eAAA,GAAA,aAAA,OAAA,eAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,gBAAA;AAAA,QCZE,KAAA,SAAA,GAAA;AAAA,MAAA,UAAA,IAAA,GAAA;AAAA,YAAA,OAAA,KAAA,cAAA,MAAA;AAAA,gBAAA,IAAA,UAAA;AAAA,WAAA,YAAA,OAAA,OAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,IAAA,UAAA,MAAA,cAAA,WAAA,KAAA,GAAA,IAAA;SAAA,IAAA;AAAA,UAAA,IAAA,GAAA,GAAA,IAAA,KAAA,KAAA,IAAA,KAAA,WAAA;AAAA,YAAA,OAAA,WAAA,eAAA,CAAA,QAAA,aAAA,QAAA,UAAA;AAAA,iBAAA;AAAA,YAAA,OAAA,SAAA;AAAA,iBAAA;AAAA,YAAA;AAAA,iBAAA,QAAA,UAAA,QAAA,KAAA,QAAA,UAAA,SAAA,IAAA,WAAA;eAAA;iBAAA,IAAA;AAAA,iBAAA;;WAAA,WAAA;AAAA,YAAA,IAAA,IAAA,GAAA;AAAA,YAAA,IAAA;AAAA,cAAA,IAAA,GAAA,MAAA;AAAA,eAAA,QAAA,UAAA,GAAA,WAAA;;AAAA,eAAA,EAAA,MAAA,MAAA;AAAA,eAAA,GAAA,MAAA;;AAmCX,kBACE,IACA,GACA,GACA,GACA,GACA,IACA,IAAA;AACA,YAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAA,MAAA,KAAA,GAAA,GACA,KAAA,GAAA,KAAA,MAAM,MADN,UAAA,SAAA,GAAA,GAAA,KAAA,iBAAA,SAAA,GAAA,GAAA,KAAA,iBArC8B,OAqC9B,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,UAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,YAAA,SAAA,GAAA,GAAA,KAAA,UAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,QAAA,SAAA,GAAA,GAAA,KAAA,UAAA,SAAA,GAAA,GAAA,KAAA,SAAA,SAAA,GAAA,GAAA,KAAA,QAAA,SAAA,GAAA,GAAA,KAAA,MAAA,SAAA,GAAA,GAAA,KAAA,MAAA,SAAA,GAAA,GAAA,KAAA,MAAA,SAAA,GAAA,GAAA,KAAA,MAAA,SAAA,GAAA,GAAA,KAAA,YAAA,SAAA,GAAA,GAAA,KAAA,YAAA,SAAA,GAAA,GAAA,KAAA,YAAA,SAAA,GAAA,GAAA,KAAA,YAAA,SAAA,GAAA,GAAA,KAAA,SAAA,SAAA,GAAA,GAAA,KAAA,SAAA,SAAA,GAAA,GAAA,KAAA,aAAA,SAAA,GAAA,GAAA,KAAA,QAAA,SAAA,GAAA,GAAA,KAAA,UAAA,SAGA,IAAU,KAAW,GAAY;AAEjC,YAAM,IAAS,GAAY,cACrB,IAAiB,MAAU,EAAO,WAAY,GAAA,UAAkB,aAChE,KAAS,IAAA,GAAA,SAAY,GAAQ,GAAS,IACtC,KAAW,MAAU,SACrB,KAAS,MAAU,OACnB,KAAY,KAAQ,GAAA,MAAU,GAAY,WAC1C,KAAS,KACX,GAAY,OAAO,QACnB,KACE,EAAE,MAAM,GAAU,MAAM,QAAQ,GAAU,QAAQ,WAAW,GAAY,OAAO,IAAI,cACpF,GAAY,OAAO;AAfzB,eAiBA,GAAK,OAAO,IAAA,EAAA,SAAO,IAAI,GAAO,OAC9B,GAAK,SAAS,IAAA,EAAA,SAAO,IAAI,GAAO,SAChC,GAAK,OAAO,IAAA,EAAA,SAAO,IAAI,GAAY,OACnC,GAAK,YAAY,GAAO,WAEnB,MACH,IAAK,KAAK,KAAK,GAAO,GACtB,GAAK,KAAK,KAAK,GAAO,GAEtB,GAAK,OAAO,KAAK,GAAO,GACxB,GAAK,OAAO,KAAK,GAAO,IAG1B,GAAK,UAAU,EAAM,SACrB,GAAK,SAAS,EAAM,QACpB,GAAK,WAAW,EAAM,UACtB,GAAK,UAAU,EAAM,SACrB,GAAK,SAAU,EAAqB,QACpC,GAAK,UAAW,EAAqB,SACrC,GAAK,SAAS,GACd,GAAK,gBAAgB,GACrB,GAAK,SAAS,IACd,GAAK,OAAO,MAAQ,IAAc,MAAS,KAC3C,GAAK,eAAe,GAEpB,GAAK,KAAK,KAAW,GAAY,SAAS,GAAY,SAAS,SAAS,GAAG,WAAW,GAAU,IAEhG,GAAK,KAAK,GAAY,OAAO,MAAM,KAAK,IAAI,GAAO,GACnD,GAAK,KAAK,GAAY,OAAO,MAAM,KAAK,IAAI,GAAO,GACnD,GAAK,WAAW,GAAY,OAAO,MAAM,OAAO,IAAI,GAAO,GAC3D,GAAK,WAAW,GAAY,OAAO,MAAM,OAAO,IAAI,GAAO,GAGzD,GAAK,QADH,MAAY,KACD,EAAE,GAAG,GAAG,GAAG,MAEX,EACX,GAAG,GAAK,GAAa,IAAI,GAAU,GAAa,GAChD,GAAG,GAAK,GAAa,IAAI,GAAU,GAAa,KAIpD,GAAK,KAAK,GAAY,OAAO,MAAM,WACnC,GAAK,WAAW,GAAK,YAAY,GAAK,IAGtC,GAAK,WAAW,IAAA,EAAA,SAAO,IAAI,GAAY,OAAO,SAAS,KACvD,GAAK,QAAQ,IAAA,GAAA,SAAM,GAAK,SAAS,GAAG,GAAK,SAAS,IAElD,GAAK,QAAQ,MAAU,MAAU,iBAAiB,GAAK,aAAa,MAjEpE;;AARF;AAAA,aAAA,GAAA,IAAA,MAQE,KAAA,IAAA,KAAA,CAAA,EAAA,KAAA,YAAA,OAoEF,WAAA;AACE,YAAM,KAAc,KAAK;AAEzB,YAAI,GAAY,UAAU,QAAQ,OAAO,KAAK,YAAY,GAAY,UAAU,YAAY;AAC1F,iBAAO;AAGT,YAAI,IAAS,MAAM,KAAK,MAAM,GAAY,UAAU,WAAW,GAAY,UAAU,aAAc,KAAK;AAGpG,YAAQ,KACV,MAAS;AAGX,YAAM,IAAO,SAAiB,KAAS,IAAQ,OACzC,IAAK,SAAiB,KAAS,IAAQ;AAK7C,eAAO,EACL,IAAA,GACA,MAAA,CAJY,KAAM,QAAgB,KAAS,IAAQ,OAKnD,MAAA,GACA,OAAA,CAPa,KAAS,UAAiB,KAAS,IAAQ,OAQxD,OAAA,GACA,OAAO,GAAY,UAAU,OAC7B,UAAU,EACR,GAAG,GAAY,UAAU,WACzB,GAAG,GAAY,UAAU;WAAA,EAAA,KAAA,kBAAA,OAK/B,WAAA;WAAA,EAAA,KAAA,4BAAA,OAKA,WAAA;AACE,aAAK,8BAA8B,KAAK,qBAAA;WAAqB,EAAA,KAAA,mBAAA,OAM/D,WAAA;AACE,aAAK,qBAAA;eAAqB,GAAA,GAAA,WAAA,IAAA;MA3JpB,GAAA;AAAA,OAAA,gBAAA,IAiKV,OAAO,iBAAiB,GAAc,WAAW,EAC/C,OAAO,EACL,KADK,WAAA;AAEH,aAAO,KAAK,KAAK;OAEnB,KAJK,SAIA,GAAA;AACH,WAAK,KAAK,IAAI;SAGlB,OAAO,EACL,KADK,WAAA;AAEH,aAAO,KAAK,KAAK;OAEnB,KAJK,SAIA,GAAA;AACH,WAAK,KAAK,IAAI;SAIlB,SAAS,EACP,KADO,WAAA;AAEL,aAAO,KAAK,OAAO;OAErB,KAJO,SAIF,GAAA;AACH,WAAK,OAAO,IAAI;SAGpB,SAAS,EACP,KADO,WAAA;AAEL,aAAO,KAAK,OAAO;OAErB,KAJO,SAIF,GAAA;AACH,WAAK,OAAO,IAAI;SAIpB,IAAI,EACF,KADE,WAAA;AAEA,aAAO,KAAK,MAAM;OAEpB,KAJE,SAIG,GAAA;AACH,WAAK,MAAM,IAAI;SAGnB,IAAI,EACF,KADE,WAAA;AAEA,aAAO,KAAK,MAAM;OAEpB,KAJE,SAIG,GAAA;AACH,WAAK,MAAM,IAAI;SAInB,WAAW,EACT,KADS,WAAA;AAEP,aAAO,KAAK,SAAS;OAEvB,KAJS,SAIJ,GAAA;AACH,WAAK,SAAS,IAAI;SAGtB,WAAW,EACT,KADS,WAAA;AAEP,aAAO,KAAK,SAAS;OAEvB,KAJS,SAIJ,GAAA;AACH,WAAK,SAAS,IAAI;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,cAAA,QAAA,GAAA,cC9PtB,GAAA,kCAAa,IAAY,GAAsB,GAAyB,IAAkB,IAAA;AAAA,MAAA,UAAA,IAAA,IAAA;AAAA,YAAA,CAAA,eAAA;AAAA,gBAAA,IAAA,UAAA;SAAkB,MAAA,IAAA,GAAA,MAAA,MAAA,SAAA,GAAA,MAAA,WAAA,SAAA,GAAA,MAAA,SAAA,SAAA,GAAA,MAAA,YAAA,SAAA,GAAA,MAAA,cAAA,SAC1G,KAAK,KAAK,IACV,KAAK,UAAU,GACf,KAAK,QAAQ,GACb,KAAK,WAAW,IAChB,KAAK,aAAa;OALpB,MAAA;AAKoB,QCcV,IASA,IAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,eAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;UAAA,GAAA,UAAA,GAAA,cAAA,GAAA,gBAAA,GAAA,eAAA,QAAA,GAAA,eAAA,IAAA,SATA,GAAA;AAAA,QAAA,eAAA,IAAA,EAAA,UAAA,IAAA,EAAA,WAAA,IAAA,EAAA,gBAAA,IAAA,EAAA,kBAAA,IAAA,EAAA,SAAA;MAAA,MAAA,IAAA,eAAA,KAAA,MAAA,GAAA,gBAAA,IAAA,SASA,GAAA;AAAA,QAAA,QAAA,IAAA,EAAA,OAAA,IAAA,EAAA,MAAA,IAAA,EAAA,OAAA,IAAA,EAAA,cAAA;MAAA,MAAA,IAAA,gBAAA,KAAA;AAuEZ,QAAI,KAAY,GAEH,KAAA,WAAA;AAmFX,iBAAA,GAAA;AAA6F,YAAA,KAAA,MAA9E,KAA8E,EAA9E,aAAa,KAAiE,EAAjE;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAiE,MAAA,IAAA,GAAA,MAAA,gBAjFhE,OAiFgE,GAAA,MAAA,WA9E1E,OA8E0E,GAAA,MAAA,QAAA,SAAA,GAAA,MAAA,UAAA,SAAA,GAAA,MAAA,SAAA,SAAA,GAAA,MAAA,cAAA,SAAA,GAAA,MAAA,YAjElE,EACzB,MAAM,MACN,MAAM,MACN,OAAO,SA8DoF,GAAA,MAAA,eAAA,SAAA,GAAA,MAAA,YAxDnE,KAwDmE,GAAA,MAAA,aArD/D,OAqD+D,GAAA,MAAA,eAnDlE,KAmDkE,GAAA,MAAA,kBA7CzF,EACF,SAAS,MACT,OAAO,MACP,aAAa,SA0C8E,GAAA,MAAA,aAtCnD,OAsCmD,GAAA,MAAA,iBAAA,QAAA,GAAA,MAAA,mBAAA,QAAA,GAAA,MAAA,gBAAA,QAAA,GAAA,MAAA,WAAA,QAAA,GAAA,MAAA,YAAA,OAAA,GAAA,MAAA,UA/B/D,OA+B+D,GAAA,MAAA,cA7BhF,OA6BgF,GAAA,MAAA,UApBpF,IAAA,GAAA,UAAS,SAA6B,IAAA;AAC7C,eAAK,KAAK;WACT,4EAkB0F,GAAA,MAAA,UAhBzE,EAElB,OAAO,EAAa,aAEpB,MAAM,EAAa,aAEnB,KAAK,EAAa,aAElB,OAAO,EAAa,aAEpB,UAAU,EAAa,gBAMoE,GAAA,MAAA,OAHtE,OAIrB,KAAK,aAAa,IAClB,KAAK,cAAc;AAEnB,YAAM,KAAO;AAEb,aAAK,SAAS;AAN6E,YAAA,IAAA,GAAA,SAQhF,IAAA;AACT,iBAAO,eAAe,GAAK,QAAQ,IAAK,EACtC,KADsC,WAAA;AAEpC,mBAAO,GAAK;;WAXyE;AAQ3F,iBAAW,KAAO;AAAc,YAArB;AARgF,YAAA,IAAA,GAAA,SAgBhF,IAAA;AACT,iBAAO,eAAe,GAAK,QAAQ,IAAK,EACtC,OAAO,WAAA;AAAA,mBAAoB,GAAK,IAAL,MAAA,IAAI;;WAlBwD;AAgB3F,iBAAW,KAAO;AAAe,YAAtB;AAMX,aAAK,WAAW,oBAAoB,EAAE,aAAa;;AAtBrD;AAAA,SAAA,GAAA;AAsBqD,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,wBAAA,KAjDpC,WAAA;AACf,eAAO;WAAA,EAAA,KAAA,eAAA,OAmDT,SAAa,GAAsB,IAAyB,IAAA;AAC1D,YAAM,KAAe,KAAK,cAAc,GAAS,IAAO,IAAA,OAClD,KAAc,KAAK,SAAS;AAElC,aAAK,WAAW,qBAAqB,EACnC,SAAA,GACA,OAAA,IACA,aAAA,IACA,cAAA,IACA,aAAA,IACA,MAAM,QACN,aAAc;WAAA,EAAA,KAAA,SAAA,OAmClB,SAA6B,GAAwB,IAA4B,IAAA;AAC/E,eAAA,CACE,MAAK,iBAAA,CACJ,KAAK,iBACN,KAAK,SAAS,SAAU,GAAO,SAAS,YAAY,IAAI,MAAA,CACvD,GAAa,QAAQ,EAAO,MAA8B,YAK7D,KAAA,GAAA,YAAW,KAAK,UAAU,IAE1B,KAAK,eAAe,IACpB,KAAK,UAAU,IACf,KAAK,OAAO,GAAa,QAAQ,KACjC,KAAK,QAAQ,KAAK,SAAS,QACvB,IAAA,EAAA,SAAO,IAAI,KAAK,SAAS,SACzB,EAAE,MAAA,MAAY,OAAA,MAAa,KAAA,MAAW,QAAA,QAC1C,KAAK,WAAA,OACL,KAAK,eACH,KAAK,SAAS,EACZ,aAAa,MACb,OAAO,KAAK,WACZ,OAAO,cAAA,CACF,KAAK,UAEP,KAAK;WAAA,EAAA,KAAA,eAAA,OAGd,SAAa,GAAsB,IAAyB,IAAA;AACrD,aAAK,cAAgB,KAAK,gBAAgB,KAAK,aAAa,aAC/D,KAAK,cAAc,GAAS,IAAO,IAAA;AAGrC,YAMI,IACA,IAPE,IACJ,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,KACjD,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,KACjD,KAAK,OAAO,IAAI,OAAO,MAAM,KAAK,OAAO,KAAK,OAAO,KACrD,KAAK,OAAO,IAAI,OAAO,MAAM,KAAK,OAAO,KAAK,OAAO;AAMnD,aAAK,iBAAA,CAAkB,KAAK,mBAC9B,MAAK,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM,OAAO,GACzD,KAAK,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM,OAAO,GAEzD,KAAK,kBAAkB,IAAA,GAAA,SAAM,IAAI,MAAM,KAAK;AAG9C,YAAM,IAAe,KAAK,gBAAgB,IACpC,IAAY,EAChB,SAAA,GACA,cAAA,GACA,aAAa,KAAK,SAAS,IAC3B,OAAA,IACA,MAAM,QACN,aAAA,IACA,IAAA,IACA,IAAA,IACA,WAAW,GACX,aAAc;AAGX,aAEH,EAAa,iBAAiB,KAAK,OAAO,UAAU,KAAK,OAAO,QAGlE,KAAK,WAAW,qBAAqB,IAEhC,KAAkB,KAAK,cAEtB,MAAK,iBACP,GAAU,OAAO,MACjB,KAAK,KAAK,KAGR,KAAK,mBACP,EAAa,WAAW,KAAK,OAAO,MAAM,KAAK,OAAO;WAAA,EAAA,KAAA,QAAA,OAuB5D,SAAM,GAAA;AACC,aAAc,EAAU,SAC3B,EAAa,cAAc,KAAK,OAAO,QAGzC,KAAY,IAAA,EAAA,SACV,EACE,SAAS,KAAK,eAAe,SAC7B,OAAO,KAAK,eAAe,OAC3B,aAAa,KAAK,eAAe,aACjC,aAAa,QAEf,KAAa,KAGL,QAAQ,QAElB,KAAK,SAAS;WAAA,EAAA,KAAA,aAAA,OAIhB,SAAW,GAAsB,IAAyB,IAAmB,IAAA;AAC3E,YAAI,KAAe,KAAK,gBAAgB;AAEpC,eAFoC,MAGtC,MAAe,KAAK,cAAc,GAAS,IAAO,IAAA;AAGpD,YAAM,IAAO,WAAW,KAAK,GAAM,QAAQ,WAAW;AAEtD,aAAK,WAAL,gBAAA,OAAgC,IAAqD,EACnF,SAAA,GACA,cAAA,IACA,aAAa,KAAK,SAAS,KAC3B,OAAA,IACA,aAAA,IACA,MAAM,GACN,gBAAA,IACA,aAAc,SAGX,KAAK,cACR,KAAK,IAAI,KAGX,KAAK,cAAc,GAAS;WAAA,EAAA,KAAA,gBAAA,OAG9B,SAAc,GAAA;AACZ,aAAK,IAAI,IACT,KAAK,WAAW,qBAAqB,EACnC,OAAA,GACA,MAAM,QACN,aAAc;WAAA,EAAA,KAAA,OAAA,OAoBlB,SAAK,GAAA;AAGH,YAAI;AAFJ,aAAK,UAAA,MACL,IAAQ,KAAS,KAAK,eAAe,OAGjC,KAAK,iBACP,MAAiB,KAAK,SAAS,EAC7B,OAAA,GACA,aAAa,MACb,OAAO,WAIX,KAAK,UAAA,OAED,OAFW,QAGb,KAAK;WAAA,EAAA,KAAA,iBAAA,OAIT,WAAA;AACE,eAAO,KAAK,eAAe,KAAK,SAAS,OAAO;WAAA,EAAA,KAAA,eAAA,OAGlD,WAAA;AACE,eAAO,KAAK;WAAA,EAAA,KAAA,QAAA,OAId,WAAA;AACE,aAAK,WAAW,qBAAqB,EAAE,aAAa,SAEpD,KAAK,eAAe,KAAK,UAAU,MAEnC,KAAK,eAAA,OACL,KAAK,WAAA,MACL,KAAK,SAAS,OAAO,KAAK,YAAY;WAAA,EAAA,KAAA,mBAAA,OAGxC,SAAiB,GAAA;AACf,YAAM,KAAY,EAAa,aAAa;AAG5C,eAAO,KAAK,gBAAgB,WAAW,KAAK,gBAAgB,QACxD,KAAK,SAAS,SAAS,IACvB,GAAI,UAAU,KAAK,UAAU,SAAC,IAAA;AAAD,iBAAgB,GAAW,OAAO;;WAAA,EAAA,KAAA,kBAAA,OAGrE,SAAgB,GAAA;AACd,eAAO,KAAK,SAAS,KAAK,gBAAgB;WAAA,EAAA,KAAA,iBAAA,OAG5C,SAAe,GAAsB,IAAyB,IAAmB,IAAA;AAC/E,YAAM,KAAK,EAAa,aAAa,IACjC,IAAe,KAAK,gBAAgB,IACpC,IAAc,KAAK,SAAS;AAgDhC,eA9CA,KAAO,OAAP,SAAgC,OAAQ,iBAAiB,KAAK,GAAM,QAE/D,IAMH,EAAY,UAAU,IALtB,KAAc,IAAI,GAAA,YAAY,IAAI,GAAS,IAAO,MAAM,OAExD,IAAe,KAAK,SAAS,QAC7B,KAAK,SAAS,KAAK,KAKrB,EAAa,UACX,KAAK,OAAO,KACZ,KAAK,SAAS,IAAI,SAAC,GAAA;AAAD,iBAAO,EAAE;YAC3B,KAAK,SAEP,EAAa,eAAe,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM,KAAK,OAAO,MAEzE,MACF,MAAK,gBAAA,MAEL,EAAY,WAAW,KAAK,OAAO,IAAI,WACvC,EAAY,aAAa,IACzB,EAAa,cAAc,KAAK,aAAa,IAExC,KAAK,iBACR,GAAa,WAAW,KAAK,OAAO,OAAO,KAAK,OAAO,MACvD,EAAa,WAAW,KAAK,OAAO,MAAM,KAAK,OAAO,MAEtD,KAAK,YAAY,IACjB,KAAK,kBAAA,SAIT,KAAK,qBAAqB,GAAS,IAAO,KAE1C,KAAK,WAAW,+BAA+B,EAC7C,SAAA,GACA,OAAA,IACA,aAAA,IACA,MAAA,IACA,aAAA,GACA,cAAA,GACA,aAAc,SAGT;WAAA,EAAA,KAAA,iBAAA,OAGT,SAAe,GAAsB,IAAA;AACnC,YAAM,KAAe,KAAK,gBAAgB;AAE1C,YAAI,OAAJ,IAAA;AAEA,cAAM,KAAc,KAAK,SAAS;AAElC,eAAK,WAAW,+BAA+B,EAC7C,SAAA,GACA,OAAA,IACA,aAAa,MACb,cAAA,IACA,aAAA,IACA,aAAc,SAGhB,KAAK,SAAS,OAAO,IAAc,IACnC,KAAK,gBAAA;;WAAgB,EAAA,KAAA,wBAAA,OAGvB,SAAsB,GAAsB,IAAyB,IAAA;AACnE,aAAK,eAAe,UAAU,GAC9B,KAAK,eAAe,QAAQ,IAC5B,KAAK,eAAe,cAAc;WAAA,EAAA,KAAA,WAAA,OAGpC,WAAA;AACE,aAAK,eAAe,UAAU,MAC9B,KAAK,eAAe,QAAQ,MAC5B,KAAK,eAAe,cAAc;WAAA,EAAA,KAAA,wBAAA,OAGpC,SACE,GACA,IACA,IACA,IAAA;AAEA,eAAO,IAAI,GAAA,cAAoB,MAAM,GAAO,KAAK,SAAS,MAAM,IAAO,KAAK,SAAS,IAAQ;WAAA,EAAA,KAAA,cAAA,OAG/F,SAAkC,GAAA;AAChC,aAAK,aAAa,KAAK,IAAA,EAElB,KAAK,aAAa,EAAO,aAAa,KAAK,UAAU,cACxD,MAAK,YAAY;WAAA,EAAA,KAAA,YAAA,OAIrB,SACE,GAAA;AACA,YACQ,KAA+B,EAA/B,OAAO,KAAwB,EAAxB,OAAO,KAAiB,EAAjB,QAAQ,KAAS,EAAT,MACtB,IAAS,KAAT;AAYR,YAVI,KAAQ,OAAU,UAEpB,IAAU,SAAS,KAAK,OAAO,GAAM,KAAK,OAAO,MAAM,KAAK,aAAa,QAAQ,eAEjF,EAAK,QAAQ,EAAK,QAAQ,EAAK,MAC/B,EAAK,SAAS,EAAK,SAAS,EAAK,MAGd,KAAK,WAAL,8BAAA,OAA8C,KAAgB,OAHhD;AAMjC,iBAAA;AAGF,YAAM,IAAU,EAAU,SAAS,KAAK,qBAAqB,IAAO,IAAO,IAAQ;AAYnF,eAVA,KAAK,WAAL,uBAAA,OAAuC,KAAgB,IAEnD,OAAU,WACZ,MAAK,YAAY,IAGnB,KAAK,WAAW,IAEhB,KAAK,WAAL,6BAAA,OAA6C,KAAgB,IAAA;WAEtD,EAAA,KAAA,QAAA,OAGT,WAAA;AACE,eAAO,KAAK;eAAA,GAAA,GAAA,WAAA,IAAA;;AAzgBH,OAAA,cAAA;AAAA,QAAA,KA6gBE;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;ACrmBR,gBAAmB,GAAA;AACnB,QAAY,iBAIjB,IAAY,EAAY,OAAO,KAAK,EAAY,OAAO,QAEvD,EAAY,OAAO,QAAQ,IAAI,GAC/B,EAAY,OAAO,QAAQ,IAAI;;AAR1B;AAAS,OAAA,IAAA;AAWhB,gBAAA,GAAA;AACE,SADoE,EAA7C;;AAAzB;AAAS,OAAA,IAAA;AAsBF,gBAAuB,GAAA;AAC5B,UAAA,CA+BF,SAAqB,GAAA;AACnB,eAAA,CAAA,EAAU,EAAY,OAAO,QAAQ,KAAA,CAAK,EAAY,OAAO,QAAQ;QAhCrD;AACd,eAAA;AAFoD,UAK9C,KAAY,EAAY,OAAxB;AASR,aAPA,GAAY,EAAY,OAAO,KAAK,KACpC,GAAY,EAAY,OAAO,OAAO,KACtC,GAAU,SAAS,EAAY,OAAO,EAAY,MAAM,KAExD,GAAQ,IAAI,GACZ,GAAQ,IAAI,GAAA;;AAZP;AAAS,OAAA,IAAA;AAiBhB,gBAAA,GAAA;AAAuD,UAAf,KAAe,EAAf,GAAG,IAAY,EAAZ;AACzC,WAAK,OAAO,QAAQ,KAAK,IACzB,KAAK,OAAO,QAAQ,KAAK,GAEzB,KAAK,OAAO,MAAM,KAAK,IACvB,KAAK,OAAO,MAAM,KAAK;;AALzB;AAAS,OAAA,IAAA;AAQT,gBAAA,GAAA,IAAA;AAAyD,UAAjC,IAAiC,EAAjC,MAAM,IAA2B,EAA3B,QAAY,KAAe,GAAf,GAAG,KAAY,GAAZ;AAC3C,QAAK,KAAK,IACV,EAAK,KAAK,IACV,EAAO,KAAK,IACZ,EAAO,KAAK;;AAJd;AAAS,OAAA,IAAA,OAIK,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,WAAA,IAAA,GAAA,eAAA,IAAA,GAAA,UAAA,QAhEZ,GAAA,cAAsB,WAAW;AAuEnC,QAAA,KAAuB,EACrB,IAAI,UACJ,QAAQ,CAAC,aAAa,kBAAkB,WAAW,YACnD,SAHqB,SAGZ,GAAA;AACP,QAAM,YAAY,UAAU,WAAW;OAEzC,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,QAAlB,YACT,SAAS,EACnB,OAAO,EAAE,GAAG,GAAG,GAAG,KAClB,SAAS,EAAE,GAAG,GAAG,GAAG;OAGxB,+BAA+B,SAAA,GAAA;AAAA,aAAqB,GAArB,EAAG;OAClC,oCAAoC,IACpC,mCAAmC,IACnC,kCAtEJ,SAAA,GAAA;AAAmF,UAA7D,KAA6D,EAA7D;AAGpB,UAFmB,GAAa;AAOhC,eAHA,GAAY,KAAK,EAAE,QAAA,SACnB,GAAY,OAAA;OAiEV,qBA5DJ,SAAA,GAAA;AAA6D,UAA7C,KAA6C,EAA7C;AACd,SAAY,OAAO,MAAM,IAAI,GAC7B,GAAY,OAAO,MAAM,IAAI,GAC7B,GAAY,OAAO,QAAQ,IAAI,GAC/B,GAAY,OAAO,QAAQ,IAAI;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,GAAA,eAAA;AAAA,QCepB,KAAA,WAAA;AAwBX,iBAAa,GAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAA0B,MAAA,IAAA,GAAA,MAAA,UAAA,QAAA,GAAA,MAAA,cAAA,QAAA,GAAA,MAAA,aAAA,QAAA,GAAA,MAAA,eAAA,QAAA,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,iBAjBvB,IAiBuB,GAAA,MAAA,eAAA,SAAA,GAAA,MAAA,eAAA,SAAA,GAAA,MAAA,MAblC,IAakC,GAAA,MAAA,MAZlC,IAYkC,GAAA,MAAA,MAVlC,IAUkC,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,kBAAA,SAAA,GAAA,MAAA,iBAAA,SAAA,GAAA,MAAA,aAL1B,IAK0B,GAAA,MAAA,aAJ1B,IAI0B,GAAA,MAAA,WAAA,SAAA,GAAA,MAAA,eAAA,SACrC,KAAK,cAAc;;AADrB;AAAA,SAAA,GAAA;AACqB,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,SAAA,OAGrB,SAAO,GAAA;AAAyB,YACtB,KAAgB,KAAhB,aACF,KAAU,GAAW;AAE3B,YAAA,CAAK,MAAA,CAAY,GAAQ;AACvB,iBAAA;AAL4B,YAQd,KAAmB,GAAY,OAAO,SAA9C,QACF,KAAe,IAAA,GAAA,SAAM,GAAe,GAAG,GAAe,IACtD,IAAe,KAAK,gBAAiB,MAAK,eAAe,IAAI,GAAA,QAAa;AAqBhF,YAnBA,EAAa,SAAS,GAAY,eAElC,KAAK,KAAK,GAAY,QACtB,KAAK,cAAc,GAAQ,aAC3B,KAAK,KAAK,IACV,KAAK,gBAAgB,EAAE,GAAG,GAAG,GAAG,KAChC,KAAK,cAAc,GAAY,OAAO,IAAI,MAE1C,KAAK,cAAc,EAAa,QAAQ,EACtC,YAAY,KAAK,aACjB,QAAA,MACA,OAAO,mBAIP,KAAK,KAAK,GAAY,OAAO,IAAI,YAAY,MAC7C,KAAe,GAAQ,YACvB,KAAe,GAAQ;AAGvB,eAAK;aACA;AAGL,cAFA,EAAa,SAAS,EAAa,OAAO,KAAK,cAAA,CAE1C,EAAa,OAAO;AACvB,mBAAA;AAGF,eAAK;;AAoBP,eAhBA,GAAY,aAAa,OAAO,OAAO,MAGvC,GAAY,SAAS,KAAK,eAC1B,GAAY,SAAS,EACnB,aAAA,IACA,OAAA,GACA,OAAO,mBAET,GAAY,SAAS,EAAE,GAAA,CAAI,KAAK,aAAa,GAAG,GAAA,CAAI,KAAK,aAAa,MAEtE,GAAY,aAAa,OAAO,OAAO,MAEvC,KAAK,SAAA,MACL,GAAY,aAAa,MAAA;WAElB,EAAA,KAAA,gBAAA,OAGT,WAAA;AAAgB,YAAA,IAAA,MACR,KAAgB,KAAK,YAAY,OAAO,SAAS,QACjD,KAAU,GAAW,KAAK,cAC1B,KAAS,GAAQ,YACjB,KAAA,CAAc,KAAK,IAAI,GAAQ,WAAW,KAAK,MAAM;AAE3D,aAAK,eAAe,EAClB,GAAI,IAAc,IAAI,MAAc,IACpC,GAAI,IAAc,IAAI,MAAc,MAGtC,KAAK,KAAK,IACV,KAAK,YAAY,KAAS,KAAK,IAC/B,KAAK,YAAY,IAAI,GAAQ,WAAW,KAAK;AAb/B,YAeN,IAA8B,KAA9B,cAAc,IAAgB,KAAhB;AAEtB,UAAY,aAAa,EACvB,GAAG,KAAK,YAAY,IAAI,KAAK,aAAa,GAC1C,GAAG,KAAK,YAAY,IAAI,KAAK,aAAa,KAG5C,EAAa,SAAS,EAAa,OAAO,IAEtC,EAAa,OAAO,WACtB,MAAK,aAAA,MACL,KAAK,iBAAiB,EACpB,GAAG,KAAK,aAAa,IAAI,EAAa,OAAO,MAAM,GACnD,GAAG,KAAK,aAAa,IAAI,EAAa,OAAO,MAAM,MAIvD,KAAK,YAAY,WAAA;AAAA,iBAAM,EAAK;;WAAA,EAAA,KAAA,kBAAA,OAG9B,WAAA;AAAkB,YAAA,IAAA;AAChB,aAAK,YAAA,MACL,KAAK,aAAA,MACL,KAAK,eAAe,EAClB,GAAG,KAAK,aAAa,OAAO,MAAM,GAClC,GAAG,KAAK,aAAa,OAAO,MAAM,KAGpC,KAAK,YAAY,WAAA;AAAA,iBAAM,EAAK;;WAAA,EAAA,KAAA,eAAA,OAG9B,SAAa,GAAA;AAAoB,YAAA,KAAA;AAC/B,aAAK,UAAU,GAAA,QAAI,QAAQ,WAAA;AACrB,aAAK,UACP;;WAAA,EAAA,KAAA,eAAA,OAKN,WAAA;AAAe,YAsMf,GACA,IACA,IACA,IACA,IA1Me,IAAA,MACL,IAAgB,KAAhB,aAEF,IADU,GAAW,GACJ,YACjB,IAAK,GAAY,SAAS,KAAK,MAAM;AAE3C,YAAI,IAAI,KAAK,IAAI;AACf,cACI,IADE,KAAW,IAAK,MAAK,IAAA,CAAK,IAAS,KAAK,KAAK,aAAa,KAAK;AAGjE,eAAK,aA4Lb,KAxLQ,KAAK,aAAa,GAyL1B,KAxLQ,KAAK,aAAa,GAyL1B,KAxLQ,KAAK,eAAe,GAyL5B,KAxLQ,KAAK,eAAe,GANtB,KAiMC,EACL,GAAG,GAHL,KAxLQ,IANA,GAiMgC,GAAK,KAC3C,GAAG,GAAiB,IAjMd,GAiMgC,IAAK,SAzLvC,KAAY,EACV,GAAG,KAAK,aAAa,IAAI,IACzB,GAAG,KAAK,aAAa,IAAI;AAI7B,cAAM,KAAQ,EAAE,GAAG,GAAU,IAAI,KAAK,cAAc,GAAG,GAAG,GAAU,IAAI,KAAK,cAAc;AAE3F,eAAK,cAAc,KAAK,GAAM,GAC9B,KAAK,cAAc,KAAK,GAAM,GAE9B,EAAY,SAAS,KACrB,EAAY,QAEZ,KAAK,YAAY,WAAA;AAAA,mBAAM,EAAK;;;AAE5B,YAAY,SAAS,EACnB,GAAG,KAAK,eAAe,IAAI,KAAK,cAAc,GAC9C,GAAG,KAAK,eAAe,IAAI,KAAK,cAAc,MAGhD,KAAK;WAAA,EAAA,KAAA,iBAAA,OAIT,WAAA;AAAiB,YAAA,IAAA,MACP,KAAgB,KAAhB,aACF,KAAI,GAAY,SAAS,KAAK,IACT,KAAa,GAAW,IAA3C;AAER,YAAI,KAAI,IAAU;AAChB,cAAM,KAAY,EAChB,GAAG,GAAY,IAAG,GAAG,KAAK,aAAa,GAAG,KAC1C,GAAG,GAAY,IAAG,GAAG,KAAK,aAAa,GAAG,OAEtC,IAAQ,EACZ,GAAG,GAAU,IAAI,KAAK,cAAc,GACpC,GAAG,GAAU,IAAI,KAAK,cAAc;AAGtC,eAAK,cAAc,KAAK,EAAM,GAC9B,KAAK,cAAc,KAAK,EAAM,GAE9B,GAAY,SAAS,IACrB,GAAY,KAAK,EAAE,eAAe,KAAK,kBAEvC,KAAK,YAAY,WAAA;AAAA,mBAAM,EAAK;;;AAE5B,aAAY,SAAS,EACnB,GAAG,KAAK,aAAa,IAAI,KAAK,cAAc,GAC5C,GAAG,KAAK,aAAa,IAAI,KAAK,cAAc,MAG9C,KAAK;WAAA,EAAA,KAAA,UAAA,OAIT,SAAA,GAAA;AAA0E,YAAhE,KAAgE,EAAhE,SAAS,KAAuD,EAAvD,OAAO,KAAgD,EAAhD,aAChB,KAAgB,KAAhB;AAGR,WAAY,SAAS,EACnB,GAAA,CAAI,KAAK,cAAc,GACvB,GAAA,CAAI,KAAK,cAAc,MAIzB,GAAY,cAAc,IAAS,IAAO,IAAA,OAG1C,GAAY,SAAS,EACnB,aAAA,IACA,OAAA,IACA,OAAO,aAET,IAAA,EAAA,YAAW,GAAY,OAAO,MAAM,GAAY,OAAO,MAEvD,KAAK;WAAA,EAAA,KAAA,OAAA,OAGP,WAAA;AACE,aAAK,YAAY,QACjB,KAAK,YAAY,OACjB,KAAK;WAAA,EAAA,KAAA,QAAA,OAGP,WAAA;AACE,aAAK,SAAS,KAAK,YAAA,OACnB,KAAK,YAAY,aAAa,MAC9B,GAAA,QAAI,OAAO,KAAK;eAAA,GAAA,GAAA,WAAA,IAAA;;AA6CpB,gBAAA,GAAA;AAA8D,UAAvC,KAAuC,EAAvC,cAAc,IAAyB,EAAzB;AACnC,aAAO,MAAgB,GAAa,WAAW,EAAS,QAAQ,GAAa,QAAQ,EAAS,MAAM;;AADtG;AAAS,OAAA,IAAA;AAmCT,gBAA2B,GAAW,IAAY,GAAY,GAAA;AAC5D,UAAM,KAAK,IAAI;AACf,aAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAK,IAAI,IAAI;;AAFlD;AAAS,OAAA,IAAA;AAqBT,gBAAsB,GAAW,IAAW,GAAW,GAAA;AAErD,aAAA,CAAQ,IADR,MAAK,KACY,KAAI,KAAK;;AAF5B;AAAS,OAAA,IAAA,OAEmB,GAAA,eAAA;AAAA,QAAA,KAtDJ,EACtB,IAAI,WACJ,QAAQ,CAAC,aAAa,YACtB,SArUF,SAAkB,GAAA;AAAc,UACtB,KAAa,EAAb;AAER,QAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAU,UAC1B,EAAM,QAAQ,OAAO,eAAA,MACrB,EAAM,QAAQ,OAAO,SAAA,MAErB,GAAS,UAAU,UAAU,EAC3B,SAAA,OACA,YAAY,IACZ,UAAU,KACV,UAAU,IACV,aAAA,MACA,mBAAmB;OAwTrB,WAAW,EACT,oBAAoB,SAAA,GAAA;AAAqB,UAAlB,KAAkB,EAAlB;AACrB,SAAY,UAAU,IAAI,GAAa;OAGzC,kCAtDJ,SAAA,GAAA;AAAuE,UAArD,KAAqD,EAArD,aAAa,IAAwC,EAAxC;AAC7B,aAAA,EAAK,GAAY,gBAAgB,GAAY,cAAA,CAI7B,GAAY,QAAQ,MAAM,OAHjC;OAqDP,qBA1CJ,SAAiB,GAAA;AAAsC,UAC7C,KAA6B,EAA7B,aAAa,IAAgB,EAAhB,aACf,IAAQ,GAAY;AAE1B,UAAK,EAAM;AAKX,iBAHI,KAAU,GAGP,GAAA,QAAG,QAAQ,OAAU;AAE1B,cAAI,OAAY,GAAY,SAAS;AACnC,cAAM,OAAO;AACb;;AAGF,eAAU,GAAI,WAAW;;OA2BzB,qBAvBJ,SAAA,GAAA;AAA8D,UACtD,KADsD,EAA7C,YACW;AAEtB,SAAM,UACR,GAAM;OAqBN,qCAAqC,SAAC,GAAA;AAAQ,UACpC,KAAiB,EAAI,YAArB;AAER,SAAa,KAAK,IAClB,GAAa,MAAM,GAAK,EAAI,YAAY,OAAO,IAAI,OACnD,GAAa,mBAAmB;OAGlC,2CAA2C,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,YAAY;OAC7F,8BAA8B,GAAU,mBACxC,oCAAoC,GAAU,mBAC9C,0CAA0C,SAAC,GAAA;AAAD,aACxC,EAAI,YAAY,aAAa,yBAAyB;OACxD,oCAAoC,SAAC,GAAA;AAAD,aAAS,EAAI,YAAY,aAAa,yBAAyB;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;ACvYvG,gBAAoC,GAAY,IAAA;AAC9C,eAAA,IAAA,GAAA,IAAuB,GAAvB,QAAA,KAAkC;AAAA,YAAvB,IAAY,GAAW;AAChC,YAAI,EAAM;AACR;AAGF,UAAS;;;AANb;AAAS,OAAA,IAAA,OAMI,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,YAAA;AAAA,QAIA,KAAA,WAAA;AAOX,iBAAa,GAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAoC,MAAA,IAAA,GAAA,MAAA,WAAA,SAAA,GAAA,MAAA,SALpB,KAKoB,GAAA,MAAA,sBAAA,QAAA,GAAA,MAAA,+BAAA,QAAA,GAAA,MAAA,UAAA,SAC/C,KAAK,UAAU,IAAA,EAAA,SAAO,IAAI,KAAW;;AADvC;AAAA,SAAA,GAAA;AACuC,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,QAAA,OAGvC,SAAgE,GAAA;AAC9D,YAAI,IACE,KAAS,KAAK;AAIf,QAAA,MAAY,KAAK,MAAM,EAAM,UAChC,GAA0B,GAAO,KAAA,CAI9B,EAAM,sBAAsB,MAAW,MAAY,GAAO,EAAM,UACnE,GAA0B,GAAO;WAAA,EAAA,KAAA,MAAA,OAIrC,SAAI,GAAc,IAAA;AAChB,YAAM,KAAY,IAAA,GAAA,SAAU,GAAM;AAElC,aAAK,KAAQ;AACX,eAAK,MAAM,KAAQ,GAAI,MAAM,KAAK,MAAM,MAAS,IAAI,GAAU;WAAA,EAAA,KAAA,OAAA,OAInE,SAAK,GAAc,IAAA;AACjB,YAAM,KAAY,IAAA,GAAA,SAAU,GAAM;AAElC,aAAK,KAAQ,IAAW;AACtB,cAAM,KAAY,KAAK,MAAM;AAE7B,cAAK,MAAc,GAAU;AAI7B,qBAAA,KAAA,GAAA,KAA0B,GAAU,GAApC,QAAA,MAA2C;AAAA,kBAAhC,IAAe,GAAU,GAAO,KACnC,IAAQ,GAAU,QAAQ;AAE5B,oBAF4B,MAG9B,GAAU,OAAO,GAAO;;;WAAA,EAAA,KAAA,WAAA,OAMhC,SAAS,GAAA;AACP,eAAO;eAAA,GAAA,GAAA,WAAA,IAAA;;AAxDE,OAAA,YAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UCdE,SAA2B,GAAc,IAAA;AACtD,UAAI,GAAQ,eAAe;AACzB,eAAA;AAGF,eAAW,KAAQ,GAAQ;AACzB,YAAI,EAAK,QAAQ,OAAU,KAAK,EAAK,OAAO,EAAK,WAAW,GAAQ;AAClE,iBAAA;AAIJ,aAAA;;AAAO,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,uBCoCF,SAA+B,GAAA;AA0BpC,UAAM,KAAY,GAAA,kCAAC,GAAgB,IAAA;AACjC,YAAI,KAAe,EAAM,cAAc,IAAI,GAAQ;AAOnD,eALK,MACH,OAAe,EAAM,cAAc,IAAI,GAAQ,KAClC,OAAO,SAAS,EAAS,eAGjC;SARS,MAAA;AAuNlB,aA3MA,GAAS,oBAAoB,EAAa,gBAC1C,GAAS,eAAe,EAAa,WACrC,GAAS,mBAAmB,EAAa,eACzC,GAAS,gBAAgB,EAAa,YAEtC,GAAS,iBAAiB,GAAS,gBACnC,GAAS,uBAAuB,GAAS,sBACzC,GAAS,kBAAkB,GAAS,iBACpC,GAAS,UAAU,GAAS,SAE5B,GAAS,eAAe,IAGxB,GAAS,UAAU,WACnB,GAAS,QAAQ,GAOjB,GAAS,MAAM,SAAU,GAAQ,GAAA;AAG/B,eAFA,KAAK,MAAM,UAAU,GAAQ,IAEtB;SAcT,GAAS,QAAQ,SAAU,GAAgB,GAAA;AACzC,eAAA,CAAA,CAAS,KAAK,MAAM,cAAc,IAAI,GAAQ,KAAW,EAAQ;SAenE,GAAS,KAAK,IAAA,GAAA,UAAS,SAAa,GAA2B,GAAwB,IAAA;AAKrF,YAJI,GAAA,QAAG,OAAO,MAAS,EAAK,OAAO,SAArB,MACZ,KAAO,EAAK,OAAO,MAAM,QAGvB,GAAA,QAAG,MAAM,IAAO;AAClB,mBAAA,KAAA,GAAA,KAAwB,EAAxB,QAAA,MAAuC;AAAA,gBAA5B,KAAa,EAAe;AACrC,iBAAK,GAAG,IAAW,GAAU;;AAG/B,iBAAO;;AAGT,YAAI,GAAA,QAAG,OAAO,IAAO;AACnB,mBAAW,MAAQ;AACjB,iBAAK,GAAG,IAAO,EAAa,KAAO;AAGrC,iBAAO;;AAiBT,eAbI,IAAA,GAAA,SAAiB,GAAM,KAAK,MAAM,WAE/B,KAAK,aAAa,KAGrB,KAAK,aAAa,GAAM,KAAK,KAF7B,KAAK,aAAa,KAAQ,CAAC,KAO7B,KAAK,MAAM,OAAO,IAAI,KAAK,MAAM,UAAU,GAAM,GAAsB,EAAE,SAAA,OAGpE;SACN,iDAeH,GAAS,MAAM,IAAA,GAAA,UAAS,SAAc,GAAkB,GAAe,IAAA;AAKrE,YAJI,GAAA,QAAG,OAAO,MAAS,EAAK,OAAO,SAArB,MACZ,KAAO,EAAK,OAAO,MAAM,QAGvB,GAAA,QAAG,MAAM,IAAO;AAClB,mBAAA,KAAA,GAAA,KAAwB,EAAxB,QAAA,MAA8B;AAAA,gBAAnB,KAAa,EAAM;AAC5B,iBAAK,IAAI,IAAW,GAAU;;AAGhC,iBAAO;;AAGT,YAAI,GAAA,QAAG,OAAO,IAAO;AACnB,mBAAW,MAAQ;AACjB,iBAAK,IAAI,IAAM,EAAK,KAAO;AAG7B,iBAAO;;AAIP,YAAI;AASN,eAVI,IAAA,GAAA,SAAiB,GAAM,KAAK,MAAM,WAGhC,KAAQ,KAAK,gBAAiB,KAAQ,KAAK,aAAa,GAAM,QAAQ,QAAzD,MACf,KAAK,aAAa,GAAM,OAAO,GAAO,KAGxC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,UAAU,GAAM,GAAU,KAGzD;SACN,kDAEH,GAAS,QAAQ,WAAA;AACf,eAAO,KAAK;SAQd,GAAS,gBAAgB,WAAA;AACvB,eAAO,EAAA,QAAQ;SAQjB,GAAS,uBAAuB,WAAA;AAC9B,eAAO,EAAA,QAAQ;SAUjB,GAAS,OAAO,WAAA;AACd,iBAAA,IAAA,GAAA,IAA0B,KAAK,MAAM,aAAa,KAAlD,QAAA;AAA0B,eAAK,MAAM,aAAa,KAAM,GAC1C;AAGd,eAAO;SAYT,GAAS,uBAAuB,SAAU,GAAA;AACxC,eAAI,GAAA,QAAG,OAAO,KACZ,MAAK,MAAM,aAAa,uBAAuB,GAExC,QAGF,KAAK,MAAM,aAAa;SAGjC,GAAS,cAAc,SAAU,GAAe,GAAA;AAC9C,aAAK,MAAM,YAAY,GAAK;SAG9B,GAAS,iBAAiB,SAAU,GAAA;AAClC,aAAK,MAAM,eAAe;SAGrB;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAAA;AAAA,QCpQI,KAAA,WAAA;AAqBX,iBACE,GACA,IACA,IACA,IAAA;AAAA,QAAA,UAAA,IAAA,GAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WACA,MAAA,IAAA,GAAA,MAAA,WAAA,SAAA,GAAA,MAAA,YAAA,SAAA,GAAA,MAAA,UAAA,SAAA,GAAA,MAAA,UAdgB,IAAI,GAAA,cAcpB,GAAA,MAAA,YAAA,SAAA,GAAA,MAAA,QAAA,SAAA,GAAA,MAAA,QAAA,SAAA,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,gBAAA,SACA,KAAK,WAAW,GAAQ,SACxB,KAAK,SAAS,GACd,KAAK,WAAW,GAAQ,WAAW,IACnC,KAAK,OAAO,IAAA,EAAA,WAAU,IAAA,GAAA,aAAY,KAAU,KAAK,WAAW,IAC5D,KAAK,OAAO,KAAK,KAAK,UACtB,KAAK,eAAe,IAEpB,KAAK,IAAI;;AAbX;AAAA,SAAA,GAAA;AAaW,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,aAAA,KAjCM,WAAA;AACf,eAAO,EACL,MAAM,IACN,WAAW,IACX,SAAS;WAAA,EAAA,KAAA,eAAA,OAgCb,SAAa,GAAwB,IAAA;AAcnC,eAbI,GAAA,QAAG,KAAK,GAAO,YACjB,KAAK,GAAL,GAAA,OAAW,GAAX,UAA8B,GAAO,UAEnC,GAAA,QAAG,KAAK,GAAO,WACjB,KAAK,GAAL,GAAA,OAAW,GAAX,SAA6B,GAAO,SAElC,GAAA,QAAG,KAAK,GAAO,UACjB,KAAK,GAAL,GAAA,OAAW,GAAX,QAA4B,GAAO,QAEjC,GAAA,QAAG,KAAK,GAAO,mBACjB,KAAK,GAAL,GAAA,OAAW,GAAX,iBAAqC,GAAO,iBAGvC;WAAA,EAAA,KAAA,4BAAA,OAGT,SAA0B,GAAwB,IAAiB,IAAA;AAC7D,QAAA,IAAA,QAAG,MAAM,OAAS,GAAA,QAAG,OAAO,QAC9B,KAAK,IAAI,GAAY,KAGnB,IAAA,QAAG,MAAM,OAAQ,GAAA,QAAG,OAAO,QAC7B,KAAK,GAAG,GAAY;WAAA,EAAA,KAAA,gBAAA,OAIxB,SAAc,GAAwB,IAAA;AACpC,YAAM,KAAW,KAAK;AAGtB,iBAAW,MAAe,IAAS;AACjC,cAAM,KAAa,IACb,IAAgB,KAAK,QAAQ,IAC7B,IAAmB,GAAQ;AAG7B,iBAAe,eACjB,KAAK,yBAAyB,GAAY,EAAc,WAAW,IAIjE,GAAA,QAAG,MAAM,KACT,EAAc,MAAsB,GAAI,KAAK,KAGxC,GAAA,QAAG,YAAY,KAEpB,GAAc,MAAsB,IAAA,EAAA,SACpC,EAAc,OAAgB,IAC9B,IAAA,GAAA,SAAM,KAKN,GAAA,QAAG,OAAO,GAAS,UAAU,QAC7B,aAAc,GAAS,UAAU,OAE/B,GAAc,IAAoB,UAAU,EAAY,YAAtB,UAI/B,GAAA,QAAG,KAAK,MAAgB,GAAA,QAAG,OAAO,GAAS,UAAU,OAC1D,EAAc,IAAoB,UAAU,IAI5C,EAAc,MAAsB;;WAAA,EAAA,KAAA,WAAA,OAY5C,SAAS,GAAA;AAOP,eANA,IAAU,KAAY,IAAA,QAAG,QAAQ,KAAK,UAAU,KAAK,SAAS,OAE1D,GAAA,QAAG,OAAO,KAAK,WACjB,KAAU,KAAW,KAAK,SAAS,cAAc,KAAK,UAGjD,IAAA,GAAA,gBAAe;WAAA,EAAA,KAAA,eAAA,OAaxB,SAAa,GAAA;AAAqC,YAAA,KAAA;AAChD,eAAI,GAAA,QAAG,KAAK,KACV,MAAK,eAAe,GAEpB,KAAK,UAAU,SAAC,IAAA;AACd,cAAM,KAAO,IAAA,EAAA,SAAO,IAAI,GAAK,aAAa;AAO1C,iBALO,WAAW,MAChB,IAAK,QAAQ,GAAK,QAAQ,GAAK,MAC/B,GAAK,SAAS,GAAK,SAAS,GAAK,MAG5B;WAGF,QAGL,MAAY,OAAZ,QACK,KAAK,SAAA,OACL,KAAK,cAEL,QAGF,KAAK;WAAA,EAAA,KAAA,qBAAA,OAGd,SAAmB,GAA2B,IAAA;AAC5C,YAAI,IAAA,GAAA,aAAY,OAAa,GAAA,QAAG,OAAO,KAAW;AAGhD,mBAAW,MAFT,KAAK,QAAQ,KAAsB,IAEhB,KAAK,SAAS;AAC/B,iBAAK,QAAQ,IAAmC,KAAc;AAGlE,iBAAO;;AAGT,eAAO,KAAK,QAAQ;WAAA,EAAA,KAAA,UAAA,OAatB,SAAQ,GAAA;AACN,eAAO,KAAK,kBAAkB,UAAU;WAAA,EAAA,KAAA,eAAA,OAa1C,SAAa,GAAA;AACX,eAAI,MAAa,UAAU,MAAa,WACtC,MAAK,QAAQ,cAAc,GAEpB,QAGF,KAAK,QAAQ;WAAA,EAAA,KAAA,WAAA,OAStB,WAAA;AACE,eAAO,KAAK;WAAA,EAAA,KAAA,aAAA,OAGd,SAAW,GAAA;AACT,eAAO,KAAK,aAAa,EAAQ,iBAAiB,IAAA,GAAA,cAAa,KAAK,UAAU;WAAA,EAAA,KAAA,mBAAA,OAGhF,SAEE,GACA,IACA,IAAA;AAEA,eAAA,CACG,KAAK,WAAW,EAAQ,YAAY,IAAY,OACjD,KAAK,UAAU,EAAQ,WAAW,IAAY;WAAA,EAAA,KAAA,aAAA,OAIlD,SAA+B,GAAwB,IAAkB,IAAA;AACvE,eAAA,CAAK,KAAA,CAAA,CAIA,GAAA,QAAG,QAAQ,OAIZ,IAAA,QAAG,OAAO,KACL,IAAA,GAAA,aAAY,IAAS,GAAW,MAAA,CAAA,CAC9B,GAAA,QAAG,QAAQ,MACb,IAAA,GAAA,cAAa,GAAW;WAAA,EAAA,KAAA,cAAA,OAMnC,SAAgC,GAAyB,IAAkB,IAAA;AACzE,eAAA,CAAA,EAAK,KAAA,CAAe,GAAA,QAAG,QAAQ,QAI3B,IAAA,QAAG,OAAO,KACL,IAAA,GAAA,aAAY,IAAS,GAAY,MAAA,CAAA,CAC/B,GAAA,QAAG,QAAQ,MACb,IAAA,GAAA,cAAa,GAAY;WAAA,EAAA,KAAA,QAAA,OAcpC,SAAkC,GAAA;AAGhC,eAFA,KAAK,OAAO,KAAK,IAEV;WAAA,EAAA,KAAA,UAAA,OAGT,SAAQ,GAAsB,IAAqB,IAAmC,IAAA;AAChF,WAAA,QAAG,OAAO,OAAA,CAAa,GAAA,QAAG,MAAM,OAClC,MAAU,IACV,KAAc;AAGhB,YAAM,KAAY,MAAW,OAAO,QAAQ,UACtC,IAAY,IAAA,GAAA,SAAmB,IAAS;AAE9C,iBAAS,KAAQ,GAAW;AACtB,gBAAS,WACX,KAAO,EAAA,QAAQ;AAGjB,mBAAA,IAAA,GAAA,IAAuB,EAAU,GAAjC,QAAA,KAAwC;AAAA,gBAA7B,IAAY,EAAU,GAAO;AAElC,YAAA,IAAA,GAAA,SAAiB,GAAM,KAAK,YAC9B,KAAK,OAAO,GAAQ,GAAM,KAGnB,GAAA,QAAG,OAAO,KAAK,UACtB,KAAK,aAAL,GAAA,OAAqB,IAArB,aACE,KAAK,QACL,KAAK,UACL,GACA,GACA,MAKF,KAAK,aAAa,IAAW,KAAK,QAAQ,GAAM,GAAU;;;AAKhE,eAAO;WAAA,EAAA,KAAA,MAAA,OAaT,SAAI,GAAmB,IAAyB,IAAA;AAC9C,eAAO,KAAK,OAAO,MAAM,GAAO,IAAU;WAAA,EAAA,KAAA,OAAA,OAa5C,SAAK,GAAuC,IAAyB,IAAA;AACnE,eAAO,KAAK,OAAO,OAAO,GAAO,IAAU;WAAA,EAAA,KAAA,OAAA,OAS7C,SAAK,GAAA;AACH,YAAM,KAAW,KAAK;AAQtB,iBAAW,MANN,GAAA,QAAG,OAAO,MACb,KAAU,KAGV,KAAK,UAAgC,IAAA,GAAA,SAAM,GAAS,OAE5B,KAAK,SAAS,YAAY;AAClD,cAAM,KAAa,IACb,KAAa,KAAK,SAAS,WAAW;AAE5C,eAAK,QAAQ,MAAc,IAC3B,KAAK,aAAa,IAAY,IAAA,EAAA,SAAO,IAAA,EAAA,SAAO,IAAI,GAAS,YAAY,GAAS,QAAQ,OACpF,KAAK,IAAsC,EAAQ;;AAGvD,iBAAW,KAAW;AAChB,aAAA,QAAG,KAAM,KAAa,OACtB,KAAa,GAAS,EAAQ;AAIpC,eAAO;WAAA,EAAA,KAAA,SAAA,OAOT,WAAA;AACE,YAAI,GAAA,QAAG,OAAO,KAAK;AAEjB,mBAAW,KAAQ,KAAK,aAAa;AAGnC,qBAFM,KAAY,KAAK,aAAa,gBAAgB,IAE3C,KAAI,GAAU,SAAS,GAAG,MAAK,GAAG,MAAK;AAAA,kBAAA,KACL,GAAU,KAA3C,KADsC,GACtC,UAAU,IAD4B,GAC5B,SAAS,IADmB,GACnB;AAEvB,qBAAa,KAAK,UAAU,MAAY,KAAK,YAC/C,GAAU,OAAO,IAAG;AAGtB,uBAAS,IAAI,EAAU,SAAS,GAAG,KAAK,GAAG;AACzC,qBAAK,aAAa,eAChB,KAAK,QACL,KAAK,UACL,GACA,EAAU,GAAG,IACb,EAAU,GAAG;;;AAMrB,eAAK,aAAa,OAAO,KAAK,QAAgB;eAAA,GAAA,GAAA,WAAA,IAAA;;AA7ZvC,OAAA,eAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,kBAAA;AAAA,QCLA,KAAA,WAAA;AAUX,iBAAa,GAAA;AAAc,YAAA,KAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAA,MAAA,IAAA,GAAA,MAAA,QARJ,KAQI,GAAA,MAAA,eAJvB,KAIuB,GAAA,MAAA,SAAA,SACzB,KAAK,QAAQ,GACb,EAAM,aAAa,EACjB,sBAAsB,SAAA,IAAA;AAAsB,cAAnB,KAAmB,GAAnB,cACf,KAA8B,GAA9B,QAAkB,IAAY,GAAtB,UACV,IAA0C,GAAA,QAAG,OAAO,MACtD,GAAK,YAAY,MAChB,GAAe,GAAK,MAAM,KAEzB,IAAc,GAAI,UAAU,GAAgB,SAAC,GAAA;AAAD,mBAAO,EAAE,YAAY;;AACnE,YAAe,MAEjB,GAAe,GAAa,UAAU,MACtC,EAAe,GAAa,eAAe,OAE7C,EAAe,OAAO,GAAa;;;AAfzC;AAAA,SAAA,GAAA;AAeyC,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,OAAA,OAKzC,SAAK,GAAgB,IAAA;AACnB,aAAU,IAAA,EAAA,SAAO,MAAW,IAAI,EAC9B,SAAS,KAAK,MAAM;AAEtB,YAAM,KAAe,IAAI,KAAK,MAAM,aAAa,GAAQ,IAAS,KAAK,MAAM,UAAU,KAAK,MAAM,SAC5F,KAAc,EAAE,SAAS,GAAa,UAAU,cAAA;AA4BtD,eA1BA,KAAK,MAAM,YAAY,GAAa,OACpC,KAAK,KAAK,KAAK,KAEX,GAAA,QAAG,OAAO,KACP,MAAK,YAAY,MACpB,MAAK,YAAY,KAAU,KAE7B,KAAK,YAAY,GAAQ,KAAK,OAExB,IAAa,OAAe,KAAK,MAAM,OAC3C,OAAO,eAAe,GAAQ,KAAK,MAAM,IAAI,EAC3C,OAAO,IACP,cAAA,SAIF,EAAe,KAAK,MAAM,IAAI,KAAK,MAGvC,KAAK,MAAM,KAAK,oBAAoB,EAClC,QAAA,GACA,SAAA,IACA,cAAA,IACA,KAAK,KAAK,MAAM,SAGX;WAAA,EAAA,KAAA,OAAA,OAGT,SAAK,GAAgB,IAAA;AACnB,YAAM,KAAW,MAAW,GAAQ,WAAY,KAAK,MAAM,UACrD,KAAa,GAAA,QAAG,OAAO,IACvB,KAA0C,KAC5C,KAAK,YAAY,KAChB,EAAe,KAAK,MAAM;AAE/B,YAAA,CAAK;AACH,iBAAO;AAGT,YAAM,IAAQ,GAAI,KAChB,IACA,SAAC,GAAA;AAAD,iBAAO,EAAE,YAAY,MAAY,OAAc,EAAE,aAAa,UAAU;;AAG1E,eAAO,KAAS,EAAM;WAAA,EAAA,KAAA,gBAAA,OAGxB,SAAiB,GAAY,IAAA;AAC3B,iBAAA,KAAA,GAAA,KAA2B,KAAK,KAAhC,QAAA,MAAsC;AAAA,cAA3B,KAAgB,KAAK,KAAM,KAChC,KAAA;AAcJ,cAXG,IAAA,QAAG,OAAO,GAAa,UAEtB,GAAA,QAAG,QAAQ,MAAS,GAAS,gBAAgB,GAAM,GAAa,UAEhE,MAAS,GAAa,WAExB,GAAa,UAAU,MAEvB,MAAM,GAAS,MAGb,OAHa;AAIf,mBAAO;;eAAA,GAAA,GAAA,WAAA,IAAA;;AAtGF,OAAA,kBAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA,QAAA;AAAA,iBAAA;QAAA,MAAA,SAAA,GAAA,GAAA;AAAA,YAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA,IAAA;AAAA,cAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,KAAA;AAAA,cAAA;AAAA,qBAAA,GAAA,IAAA,EAAA,OAAA,aAAA,CAAA,MAAA,KAAA,EAAA,QAAA,SAAA,IAAA,KAAA,EAAA,QAAA,CAAA,KAAA,GAAA,WAAA,IAAA,KAAA;AAAA;mBAAA,GAAA;AAAA,iBAAA,MAAA,KAAA;oBAAA;AAAA,gBAAA;AAAA,oBAAA,EAAA,UAAA,QAAA,EAAA;sBAAA;AAAA,kBAAA;AAAA,sBAAA;;;AAAA,iBAAA;;QAAA,GAAA,OAAA,SAAA,GAAA,GAAA;AAAA,YAAA,GAAA;AAAA,cAAA,OAAA,KAAA;AAAA,mBAAA,GAAA,GAAA;AAAA,cAAA,KAAA,OAAA,UAAA,SAAA,KAAA,GAAA,MAAA,GAAA;AAAA,iBAAA,OAAA,YAAA,EAAA,eAAA,MAAA,EAAA,YAAA,OAAA,OAAA,SAAA,OAAA,QAAA,MAAA,KAAA,KAAA,OAAA,eAAA,2CAAA,KAAA,MAAA,GAAA,GAAA,KAAA;;QAAA,GAAA,OAAA,WAAA;AAAA,cAAA,IAAA,UAAA;;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QCkPP,KAAA,WAAA;AAKJ,iBAAa,GAAA;AAAA,QAAA,UAAA,IAAA,IAAA;AAAA,cAAA,CAAA,eAAA;AAAA,kBAAA,IAAA,UAAA;WAAsB,MAAA,IAAA,GAAA,MAAA,iBAAA,SAAA,GAAA,MAAA,iBAAA,SAAA,GAAA,MAAA,QAAA,SACjC,KAAK,gBAAgB,GAErB,IAAA,GAAA,SAAQ,MAAM;;AAHhB;AAAA,SAAA,GAAA;AAGgB,UAAA,IAAA;AAAA,aAAA,KAAA,GAAA,KAAA,CAAA,EAAA,KAAA,0BAAA,OAGhB,WAAA;AACE,aAAK,cAAc;WAAA,EAAA,KAAA,mBAAA,OAGrB,WAAA;AACE,aAAK,cAAc;WAAA,EAAA,KAAA,4BAAA,OAGrB,WAAA;AACE,aAAK,cAAc;eAAA,GAAA,GAAA,WAAA,IAAA;;AAIvB,gBAAqB,GAAA;AACnB,UAAA,CAAK,GAAA,QAAG,OAAO;AACb,eAAO,EAAE,SAAA,CAAA,CAAW,GAAO,SAAA;AAG7B,UAAM,KAAU,IAAA,EAAA,SAAO,IAAI;AAK3B,aAHA,GAAQ,UAAA,CAAA,CAAY,EAAM,SAC1B,GAAQ,UAAA,CAAA,CAAY,EAAM,SAEnB;;AAVT;AAAS,OAAA,IAAA;AAUA,QAAA,KAGM,EACb,IAAI,UACJ,SAjSF,SAAkB,GAAA;AAAc,UAAA,IACxB,IAGD,IAEC,IAMF,IACE,KAAwB,IAExB,KAAgB,EACpB,KAAA,IACA,QAAA,IAEA,aA+GF,SAAsB,GAAkB,GAAe,IAAc,IAAoB,IAAA;AACvF,YAAM,IAAU,GAAW;AAC3B,YAAA,CAAK,EAAgB,KAAO;AAC1B,YAAgB,MAAQ;AAGxB,mBAAA,IAAA,GAAA,IAAkB,GAAlB,QAAA,KAA6B;AAAA,gBAAlB,KAAO,GAAW;AAC3B,eAAI,IAAK,IAAM,IACf,GAAI,IAAK,IAAM,GAAA;;;AAInB,YAAM,KAAY,EAAgB,KAC9B,KAAW,GAAI,KAAK,IAAW,SAAC,IAAA;AAAD,iBAAO,GAAE,aAAa,KAAY,GAAE,YAAY;;AAE9E,cACH,MAAW,EAAE,UAAA,GAAU,SAAA,GAAS,WAAW,MAC3C,GAAU,KAAK,MAGjB,GAAS,UAAU,KAAK,CAAC,IAAU;SAlInC,gBAqIF,SACE,GACA,GACA,IACA,IACA,IAAA;AAEA,YAGI,GAHE,IAAU,GAAW,KACrB,KAAY,EAAgB,KAC9B,KAAA;AAGJ,YAAK;AAGL,eAAK,IAAQ,GAAU,SAAS,GAAG,KAAS,GAAG,KAAS;AACtD,gBAAM,KAAM,GAAU;AAEtB,gBAAI,GAAI,aAAa,KAAY,GAAI,YAAY,GAAS;AAIxD,uBAHQ,KAAc,GAAd,WAGC,KAAI,GAAU,SAAS,GAAG,MAAK,GAAG,MAAK;AAAA,oBAAA,KAAA,GACX,GAAU,KADC,IACvC,KADuC,GAAA,IAAA,KAAA,GAAA,IACjC,KADiC,GACjC,SAAS,KADwB,GACxB;AAGtB,oBAAI,OAAO,MAAY,OAAY,EAAQ,WAAW,OAAY,EAAQ,SAAS;AAEjF,qBAAU,OAAO,IAAG,IAIf,GAAU,UACb,IAAU,OAAO,GAAO,IAGxB,GAAO,GAAS,IAAM,IACtB,GAAO,GAAS,IAAM,GAAA,QAIxB,KAAA;AACA;;;AAIJ,kBAAI;AACF;;;SAlLN,kBAAA,GACA,oBAAA,GACA,iBAAA,GACA,WAAA,IAEA,SAAA,GAEA,iBAAA,OACA,iBAAA;AAeF,kBAAc,GAA0B,GAAc,IAAoB,IAAA;AACxE,YAAM,KAAU,GAAW,KACvB,IAAS,GAAI,KAAK,GAAS,SAAC,GAAA;AAAD,iBAAO,EAAE,gBAAgB;;AAEnD,aACH,KAAS,EACP,aAAA,GACA,QAAQ,MAGV,EAAQ,KAAK,KAGV,EAAO,OAAO,MACjB,GAAO,OAAO,KAAQ,KAGpB,EAAY,oBAAA,CAAqB,GAAI,SAAS,EAAO,OAAO,IAAO,OACrE,GAAY,iBACV,GACA,IACA,GAAc,kBAAkB,KAAU,GAAQ,UAEpD,EAAO,OAAO,GAAM,KAAK;;AAvB7B;AAAS,SAAA,IAAA;AA2BT,kBACE,GACA,GACA,IACA,IAAA;AAEA,YAAM,KAAU,GAAW,KACrB,IAAc,GAAI,UAAU,GAAS,SAAC,IAAA;AAAD,iBAAO,GAAE,gBAAgB;YAC9D,IAAS,EAAQ;AAEvB,YAAK,KAAW,EAAO;AAIvB,cAAI,MAAS,OAAb;AASA,gBAAI,KAAA,OACE,KAAgB,EAAO,OAAO;AAEpC,gBAAI,IAAe;AACjB,kBAAI,OAAa,OAAO;AACtB,yBAAS,KAAI,GAAc,SAAS,GAAG,MAAK,GAAG;AAC7C,qBAAO,GAAa,GAAM,GAAc,KAAI;AAE9C;;AAEA,uBAAS,KAAI,GAAG,KAAI,GAAc,QAAQ;AACxC,oBAAI,GAAc,QAAO,IAAU;AACjC,oBAAY,oBACV,GACA,IACA,GAAc,kBAAkB,KAAU,GAAQ,UAEpD,GAAc,OAAO,IAAG,IAEpB,GAAc,WAAW,KAAX,QACT,EAAO,OAAO,IACrB,KAAA;AAGF;;;AAMJ,kBAAA,CAAgB,OAAO,KAAK,EAAO,QAAQ,UAC7C,EAAQ,OAAO,GAAa;;AAvC5B,iBAAK,KAAQ,EAAO;AACd,gBAAO,OAAO,eAAe,MAC/B,GAAO,GAAa,GAAM;;AAjBlC;AAAS,SAAA,IAAA;AAwIT,iBAA2B,GAA0B,GAAA;AAQnD,iBAPM,KAAU,GAAW,IACrB,KAAY,IAAI,GAAU,IAC1B,KAAY,EAAgB,EAAM,OACjC,IAJ+D,GAIhD,EAAa,gBAAgB,IAJmB,GAAA,IAKlE,IAAgB,GAGb,GAAA,QAAG,QAAQ,MAAU;AAC1B,mBAAS,KAAI,GAAG,KAAI,GAAU,QAAQ,MAAK;AACzC,gBAAM,KAAM,GAAU,KACd,KAAsB,GAAtB,UAAU,KAAY,GAAZ;AAElB,gBACE,GAAS,gBAAgB,GAAS,OAClC,GAAS,aAAa,IAAS,MAC/B,GAAS,aAAa,IAAS,IAC/B;AAAA,kBACQ,KAAc,GAAd;AAER,iBAAU,gBAAgB;AAE1B,uBAAA,KAAA,GAAA,KAAyC,GAAzC,QAAA,MAAoD;AAAA,oBAAA,KAAA,GAAX,GAAW,KAAA,IAAxC,KAAwC,GAAA,IAAA,KAAA,GAAA,IAAlC,KAAkC,GAAlC,SAAS,KAAyB,GAAzB;AACrB,uBAAY,GAAQ,WAAW,OAAY,GAAQ,WACrD,GAAG;;;;AAMX,cAAU,GAAS,WAAW;;;AA9BlC;AAAS,SAAA,GAAA;AAkCT,iBAA4C,GAAA;AAC1C,eAAO,EAA4B,GAAA;;AADrC;AAAS,aAAA,GAAA,GAAA,MAhNT,MAAA,EAAM,aAAN,QAAA,GAAgB,cAAc,OAAO,iBAAiB,QAAQ,MAAM,MAClE,UAAA;AACE,eAAQ,GAAc,kBAAA;aAExB,UAAA;AACE,eAAQ,GAAc,kBAAA;YAI1B,EAAM,SAAS,IA4MR;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACzPT,QAAM,KAAS,EACb,aAAa,CAAC,oBAAoB,cAAc,cAAc,SAE9D,QAHa,SAGL,GAAA;AACN,eAAA,KAAA,GAAA,KAAqB,GAAO,YAA5B,QAAA,MAAyC;AAAA,YAAA;AAAA,YAApB,GAAO,YAAa;AAAA,YACjC,IAAc,GADmB,GACJ;AAEnC,YAAI;AACF,iBAAO;;AAIX,aAAO;OAIT,kBAhBa,SAAA,GAAA;AAgBoE,UAA7D,KAA6D,EAA7D,aAAa,IAAgD,EAAhD,WAAW,IAAqC,EAArC,aAAa,KAAwB,EAAxB;AACvD,UAAA,CAAK,cAAc,KAAK;AACtB,eAAO;AAGT,eAAA,KAAA,GAAA,KAA0B,GAAM,aAAa,KAA7C,QAAA,MAAmD;AAAA,YAAxC,KAAe,GAAM,aAAa,KAAM,KAC7C,KAAU;AAEd,YACE,GAAY,cACZ,GAAY,WAAW,eACvB,GAAY,gBAAgB;AAE5B,iBAAO,MAAS;AAEd,gBAAI,OAAY,GAAY;AAC1B,qBAAO;AAET,iBAAU,GAAI,WAAW;;;AAK/B,aAAO;OAIT,YA3Ca,SAAA,GAAA;AA2C4D,UAKnE,IALQ,IAA2D,EAA3D,WAAW,IAAgD,EAAhD,aAAa,KAAmC,EAAnC,WAAW,KAAwB,EAAxB;AAC/C,UAAI,MAAgB,WAAW,MAAgB;AAC7C,eAAO;AAKT,eAAA,KAAA,GAAA,KAA0B,GAAM,aAAa,KAA7C,QAAA,MAAmD;AAAA,YAAxC,KAAe,GAAM,aAAa,KAAM;AACjD,YAAI,GAAY,gBAAgB,GAAa;AAE3C,cAAI,GAAY,cAAA,CAAe,GAAa,IAAa;AACvD;AAIF,cAAI,GAAY;AACd,mBAAO;AAGC,gBACR,MAAiB;;;AAOvB,UAAI;AACF,eAAO;AAMT,eAAA,IAAA,GAAA,IAA0B,GAAM,aAAa,KAA7C,QAAA,KAAmD;AAAA,YAAxC,IAAe,GAAM,aAAa,KAAM;AACjD,YAAA,CAAI,GAAY,gBAAgB,KAAiB,QAAQ,KAAK,OAAc,EAAY;AACtF,iBAAO;;AAIX,aAAO;OAIT,YAvFa,SAAA,GAAA;AAwFX,eADY,KAAmC,EAAnC,WAAW,IAAwB,EAAxB,OACvB,IAAA,GAAA,IAA0B,EAAM,aAAa,KAA7C,QAAA,KAAmD;AAAA,YAAxC,KAAe,EAAM,aAAa,KAAM;AACjD,YAAI,GAAa,IAAa;AAC5B,iBAAO;;AAIX,aAAO;OAIT,MAlGa,SAAA,GAAA;AAmGX,eADM,KAAqC,EAArC,aAAa,IAAwB,EAAxB,OACnB,IAAA,GAAA,IAA0B,EAAM,aAAa,KAA7C,QAAA,KAAmD;AAAA,YAAxC,KAAe,EAAM,aAAa,KAAM;AAEjD,YAAI,GAAY,SAAS,WAAW,GAAG;AACrC,cAAM,KAAS,GAAY;AAG3B,cAAI,MAAA,EAAY,GAAO,QAAQ,WAAA,CAAW,GAAO,QAAQ,QAAQ;AAC/D;mBAIK,GAAY,SAAS,UAAU;AACtC;AAGF,YAAA,CAAK,GAAY,iBAAiB,OAAgB,GAAY;AAC5D,iBAAO;;AAIX,aAAO;;AAIX,gBAAuB,GAA0B,IAAA;AAC/C,aAAO,EAAY,SAAS,KAAK,SAAA,GAAA;AAAA,eAAA,EAAG,OAAgB;;;AADtD;AAAS,OAAA,IAAA;AAC6C,QAAA,KAGvC;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA,QAAA;AAAA,iBAAA;QAAA,MAAA,SAAA,GAAA,GAAA;AAAA,YAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA,IAAA;AAAA,cAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,KAAA;AAAA,cAAA;AAAA,qBAAA,GAAA,IAAA,EAAA,OAAA,aAAA,CAAA,MAAA,KAAA,EAAA,QAAA,SAAA,IAAA,KAAA,EAAA,QAAA,CAAA,KAAA,GAAA,WAAA,IAAA,KAAA;AAAA;mBAAA,GAAA;AAAA,iBAAA,MAAA,KAAA;oBAAA;AAAA,gBAAA;AAAA,oBAAA,EAAA,UAAA,QAAA,EAAA;sBAAA;AAAA,kBAAA;AAAA,sBAAA;;;AAAA,iBAAA;;QAAA,GAAA,OAAA,SAAA,GAAA,GAAA;AAAA,YAAA,GAAA;AAAA,cAAA,OAAA,KAAA;AAAA,mBAAA,GAAA,GAAA;AAAA,cAAA,KAAA,OAAA,UAAA,SAAA,KAAA,GAAA,MAAA,GAAA;AAAA,iBAAA,OAAA,YAAA,EAAA,eAAA,MAAA,EAAA,YAAA,OAAA,OAAA,SAAA,OAAA,QAAA,MAAA,KAAA,KAAA,OAAA,eAAA,2CAAA,KAAA,MAAA,GAAA,GAAA,KAAA;;QAAA,GAAA,OAAA,WAAA;AAAA,cAAA,IAAA,UAAA;;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,UAAA,CAAA,cAAA;AAAA,cAAA,IAAA,UAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,MAAA,OAAA,kBAAA,SAAA,GAAA,GAAA;AAAA,eAAA,EAAA,YAAA,GAAA;SAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,CAAA,MAAA,GAAA,QAAA,YAAA,OAAA,MAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA;AAAA,gBAAA,IAAA,eAAA;AAAA,eAAA;QAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,iBAAA,OAAA,iBAAA,SAAA,IAAA;AAAA,eAAA,GAAA,aAAA,OAAA,eAAA;SAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AC3Gf,QAAM,KAAc,CAClB,eACA,eACA,aACA,iBACA,iBACA;AAiGF,gBAA2B,GAAgB,IAAA;AACzC,aAAO,SAAU,GAAA;AACf,YAAM,IAAe,GAAM,aAAa,MAElC,KAAc,EAAa,eAAe,IAHnB,KAAA,GAIS,EAAa,gBAAgB,IAJtC,IAItB,KAJsB,GAAA,IAIT,KAJS,GAAA,IAKvB,IAAiB;AAEvB,YAAI,SAAS,KAAK,EAAM,OAAO;AAC7B,aAAM,gBAAgB,GAAM;AAG5B,mBAAA,IAAA,GAAA,IAA2B,EAAM,eAAjC,QAAA,KAAiD;AAAA,gBACzC,IADmB,EAAM,eAAgB,IAGzC,IAA+B,EACnC,SAAA,GACA,WAHgB,EAAa,aAAa,IAI1C,aAAA,IACA,WAAW,EAAM,MACjB,aAAA,IACA,gBAAA,IACA,OAAA,MAEI,KAAc,GAAe;AAEnC,cAAQ,KAAK,CACX,EAAc,SACd,EAAc,aACd,EAAc,gBACd;;eAGC;AACL,cAAI,KAAA;AAEJ,cAAA,CAAK,EAAA,QAAQ,wBAAwB,QAAQ,KAAK,EAAM,OAAO;AAE7D,qBAAS,KAAI,GAAG,KAAI,EAAa,UAAA,CAAW,IAAgB;AAC1D,mBAAiB,EAAa,IAAG,gBAAgB,WAAW,EAAa,IAAG;AAK9E,iBACE,MACA,GAAM,QAAQ,GAAM,gBAAgB,OAEpC,EAAM,cAAc;;AAGxB,cAAA,CAAK,IAAgB;AACnB,gBAAM,IAAgB,EACpB,SAAS,GACT,WAAW,EAAa,aAAa,IACrC,aAAA,IACA,WAAW,EAAM,MACjB,gBAAA,IACA,aAAA,IACA,OAAA,MAGI,IAAc,GAAe;AAEnC,cAAQ,KAAK,CACX,EAAc,SACd,EAAc,aACd,EAAc,gBACd;;;AAMN,iBAAA,KAAA,GAAA,KAAkE,EAAlE,QAAA,MAA2E;AAAA,cAAA,KAAA,GAAT,EAAS,KAAA,IAA/D,KAA+D,GAAA,IAAtD,KAAsD,GAAA,IAAzC,KAAyC,GAAA;AAAA,aAAA,GAC7D,GAAQ,IAAS,GAAO,IAAa;;;;AA3EvD;AAAS,OAAA,IAAA;AAgFT,gBAAyB,GAAA;AAA8B,UAC7C,KAAuB,EAAvB,aAAa,IAAU,EAAV,OAGf,IAAY,EAAE,aADK,GAAA,QAAO,OAAO,IACY,eAAA;AAInD,aAFA,EAAM,KAAK,qBAAqB,IAEzB,EAAU,eAAe,EAAM,aAAa,IAAI,EAAE,aAAA;;AAR3D;AAAS,OAAA,IAAA;AAWT,gBAAA,GAEE,IAAA;AACA,UAFE,IAEF,EAFE,KAAK,IAEP,EAFO,OAAO,KAEd,EAFc,SAII,KAEd,EAFF,aAAgB,WAChB,KACE,EADF,QAEI,KAAc,GAAO;AAO3B,eAAW,KALP,EAAM,QAAQ,SAAA,CAAU,GAAQ,UAClC,IAAQ,SAAS,EAAE,SAAA,UAIG,GAAO;AAC7B,WAAY,GAAK,GAAW,GAAO,mBACnC,GAAY,GAAK,GAAW,GAAO,oBAAA;AAKrC,eAFM,IAAe,MAAW,GAAQ,QAExC,IAAA,GAAA,IAAiC,GAAjC,QAAA,KAA4C;AAAA,YAAA,IAAX,GAAW;AAC1C,WAAY,GAD8B,EAA/B,MAA+B,EAAzB,UACgB;;;AAvBrC;AAAS,OAAA,IAAA;AA2BT,QAAA,KAA6B,EAC3B,IAAI,qBACJ,SAtNF,SAAkB,GAAA;AAGhB,eAFM,KAAY,IAElB,IAAA,GAAA,IAAqB,GAArB,QAAA,KAAkC;AAAA,YAAvB,IAAU,GAAa;AAChC,WAAU,KAAU,GAAiB,GAAQ;;AAG/C,UACI,IADE,KAAc,EAAA,QAAQ;AAmE5B,oBAAS;AAEP,iBAAA,KAAA,GAAA,KAA0B,EAAM,aAAa,KAA7C,QAAA,MAAmD;AAAA,cAAxC,IAAe,EAAM,aAAa,KAAM;AACjD,cAAK,EAAY,iBAAiB,EAAY,gBAAgB,WAAhB,CAA2B,EAAY;AAKrF,qBANiD,IAAA,WAAA;AAAA,kBAMtC,IAAW,EAAY,SANe;AAO1C,gBAAM,UAAU,KAAK,SAAA,IAAA;AAAA,oBAAG,KAAH,GAAG;AAAH,uBAAa,IAAA,GAAA,cAAa,IAAK,EAAQ;oBAE/D,EAAY,cAAc,EAAQ,SAAS,EAAQ;eAHvD,IAAA,GAAA,IAAsB,EAAY,SAAlC,QAAA;AAA4C;;;AARhD;AAAS,SAAA,IAAA,MA/DP,MADE,EAAA,QAAW,eACD,CACV,EAAE,MAAM,GAAY,MAAM,UAAU,MACpC,EAAE,MAAM,GAAY,MAAM,UAAU,GAAU,eAC9C,EAAE,MAAM,GAAY,MAAM,UAAU,GAAU,eAC9C,EAAE,MAAM,GAAY,IAAI,UAAU,GAAU,aAC5C,EAAE,MAAM,GAAY,QAAQ,UAAU,GAAU,eAGtC,CACV,EAAE,MAAM,aAAa,UAAU,GAAU,eACzC,EAAE,MAAM,aAAa,UAAU,GAAU,eACzC,EAAE,MAAM,WAAW,UAAU,GAAU,aAEvC,EAAE,MAAM,cAAc,UAAU,MAChC,EAAE,MAAM,cAAc,UAAU,GAAU,eAC1C,EAAE,MAAM,aAAa,UAAU,GAAU,eACzC,EAAE,MAAM,YAAY,UAAU,GAAU,aACxC,EAAE,MAAM,eAAe,UAAU,GAAU,cAIrC,KAAK,EACb,MAAM,QACN,UAFa,SAEH,IAAA;AACR,iBAAA,IAAA,GAAA,IAA0B,EAAM,aAAa,KAA7C,QAAA;AAA0B,YAAM,aAAa,KAAM,GACrC,aAAa;YAM/B,EAAM,gBAAgB,GAEtB,EAAM,cAAN,SAAA,IAAA;AAAA,QAAA,UAAA,IAAA,GAAA;AAAA,cAAA,OAAA,KAAA,cAAA,MAAA;AAAA,kBAAA,IAAA,UAAA;AAAA,aAAA,YAAA,OAAA,OAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,IAAA,UAAA,MAAA,cAAA,WAAA,KAAA,GAAA,IAAA;WAAA,IAAA;AAAA,YAAA,GAAA,GAAA,GAAA,GAAA,KAAA,KAAA,IAAA,IAAA,WAAA;AAAA,cAAA,OAAA,WAAA,eAAA,CAAA,QAAA,aAAA,QAAA,UAAA;AAAA,mBAAA;AAAA,cAAA,OAAA,SAAA;AAAA,mBAAA;AAAA,cAAA;AAAA,mBAAA,QAAA,UAAA,QAAA,KAAA,QAAA,UAAA,SAAA,IAAA,WAAA;iBAAA;mBAAA,IAAA;AAAA,mBAAA;;aAAA,WAAA;AAAA,cAAA,IAAA,IAAA,GAAA;AAAA,cAAA,GAAA;AAAA,gBAAA,IAAA,GAAA,MAAA;AAAA,iBAAA,QAAA,UAAA,GAAA,WAAA;;AAAA,iBAAA,EAAA,MAAA,MAAA;AAAA,iBAAA,GAAA,MAAA;;AAAA,sBAAA;AAAA,iBAAA,GAAA,MAAA,KAAA,GAAA,MAAA,MAAA;;AAAA;AAAA,eAAA,GAAA,IAAA,MAAA,IAAA,IAAA,KAAA,CAAA,EAAA,KAAA,wBAAA,KACE,WAAA;AACE,iBAAO,EAAM,aAAa;WAF9B,KAKE,SAA0B,IAAA;AACxB,YAAM,aAAa,uBAAuB;aAN9C,EAAA,KAAA,QAAA,OASE,WAAA;AACE,iBAAO,EAAM;iBAAA,GAAA,EAAA,WAAA,IAVjB;QAAyD,GAAA,UAczD,EAAM,eAAe,EAEnB,MAAM,IACN,KAHmB,SAGQ,IAAA;AACzB,WAAQ,YAAY,SAAC,GAAM,GAAA;AAAP,iBAAe,EAAM,KAAK,GAAM;;AAEpD,YAAM,IAAc,IAAI,EAAM,YAAe;AAG7C,eADA,EAAM,aAAa,KAAK,KAAK,IACtB;SAET,WAAA,IACA,WAAA,IACA,sBAAsB,KAoBxB,EAAM,UAAU,GAAA;OA4HhB,WAAW,EACT,sBAAsB,SAAC,GAAA;AAAD,aAAS,GAAY,GAAK;OAChD,yBAAyB,SAAC,GAAA;AAAD,aAAS,GAAY,GAAK;OACnD,sBAAsB,SAAA,GAAmB,IAAA;AAEvC,eAFuB,IAA0B,EAA1B,cAEd,IAAI,GAAM,aAAa,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5D,YAAM,KAAc,GAAM,aAAa,KAAK;AAExC,WAAY,iBAAiB,KAIjC,IAAY,QACZ,GAAM,KAAK,wBAAwB,EAAE,aAAA,OACrC,GAAY,WAER,GAAM,aAAa,KAAK,SAAS,KACnC,GAAM,aAAa,KAAK,OAAO,GAAG;;SAK1C,aAAA,IACA,kBAAA,IACA,aAAA;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,OAAA,WAAA,eAAA,QAAA,MAAA,QAAA,MAAA,SAAA,GAAA,IAAA,IAAA;AAAA,YAAA,KAAA,SAAA,GAAA,GAAA;AAAA,iBAAA,CAAA,OAAA,UAAA,eAAA,KAAA,GAAA,MAAA,KAAA,GAAA,QAAA;AAAA;AAAA,iBAAA;UAAA,GAAA;AAAA,YAAA,IAAA;AAAA,cAAA,KAAA,OAAA,yBAAA,IAAA;AAAA,iBAAA,GAAA,MAAA,GAAA,IAAA,KAAA,MAAA,GAAA;;SAAA,GAAA,IAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,MAAA,OAAA,kBAAA,SAAA,GAAA,GAAA;AAAA,eAAA,EAAA,YAAA,GAAA;SAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,CAAA,MAAA,GAAA,QAAA,YAAA,OAAA,MAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA;AAAA,gBAAA,IAAA,eAAA;AAAA,eAAA;QAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,iBAAA,OAAA,iBAAA,SAAA,IAAA;AAAA,eAAA,GAAA,aAAA,OAAA,eAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,UAAA,CAAA,cAAA;AAAA,cAAA,IAAA,UAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,GAAA,EAAA,WAAA,KAAA,KAAA,GAAA,GAAA,IAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,YAAA,IAAA,GAAA,QAAA;AAAA,QC9NW,KAAA,WAAA;AA+CX,mBAAA;AAAe,YAAA,KAAA;AAAA,WAAA,MAAA,IAAA,GAAA,MAAA,MAAA,oBAAA,OA9CU,KAAK,MAAsB,MAAhB,KAAK,aA8C1B,GAAA,MAAA,iBAAA,QAAA,GAAA,MAAA,gBAzCV,KAyCU,GAAA,MAAA,WAvCL,EAAA,UAuCK,GAAA,MAAA,YAtCJ,IAAA,GAAA,SAAM,GAAA,YAsCF,GAAA,MAAA,aArCH,GAAA,YAqCG,GAAA,MAAA,WApCI,EACjB,KAAK,IACL,QAAQ,EACN,OAAA,MACA,MAAA,MACA,KAAA,QAEF,YAAY,IACZ,gBAAgB,OA4BH,GAAA,MAAA,kBAzBE,IAAA,GAAA,sBAAqB,QAyBvB,GAAA,MAAA,iBAxBC,GAAA,gBAwBD,GAAA,MAAA,gBAAA,SAAA,GAAA,MAAA,iBAtBC,IAAI,GAAA,gBAAgB,QAsBrB,GAAA,MAAA,QAAA,SAAA,GAAA,MAAA,YAAA,SAAA,GAAA,MAAA,UAAA,SAAA,GAAA,MAAA,aAVqC,KAUrC,GAAA,MAAA,YALX,EACF,MAAM,IACN,KAAK,OAGQ,GAAA,MAAA,kBA0CE,SAAC,GAAA;AAAD,iBAA8B,GAAK,eAAe,EAAM;;AAzCvE,YAAM,IAAQ;AAEd,aAAK,eAAL,SAAA,GAAA;AAAA,UAAA,UAAA,GAAA,GAAA;AAAA,gBAAA,OAAA,KAAA,cAAA,MAAA;AAAA,oBAAA,IAAA,UAAA;AAAA,cAAA,YAAA,OAAA,OAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,GAAA,UAAA,MAAA,cAAA,WAAA,KAAA,GAAA,GAAA;aAAA,IAAA;AAAA,cAAA,IAAA,IAAA,KAAA,MAAA,IAAA,KAAA,WAAA;AAAA,gBAAA,OAAA,WAAA,eAAA,CAAA,QAAA,aAAA,QAAA,UAAA;AAAA,qBAAA;AAAA,gBAAA,OAAA,SAAA;AAAA,qBAAA;AAAA,gBAAA;AAAA,qBAAA,QAAA,UAAA,QAAA,KAAA,QAAA,UAAA,SAAA,IAAA,WAAA;mBAAA;qBAAA,GAAA;AAAA,qBAAA;;eAAA,WAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,gBAAA,IAAA;AAAA,kBAAA,IAAA,GAAA,MAAA;AAAA,kBAAA,QAAA,UAAA,GAAA,WAAA;;AAAA,kBAAA,EAAA,MAAA,MAAA;AAAA,mBAAA,GAAA,MAAA;;AAAA,wBAAA;AAAA,mBAAA,GAAA,MAAA,KAAA,GAAA,MAAA,MAAA;;AAAA;AAAA,iBAAA,GAAA,IAAA,MAAA,GAAA,IAAA,CAAA,EAAA,KAAA,aAAA,KACE,WAAA;AACE,mBAAO,EAAM;eAFjB,EAAA,KAAA,OAAA,OAKE,SAA0C,GAAA;AAQxC,mBAPA,GAAA,GAAA,GAAA,YAAA,OAAA,MAAA,KAAA,MAAU,IAEV,EAAM,KAAK,oBAAoB,EAC7B,SAAA,GACA,cAAc,SAGT;eAbX,EAAA,KAAA,SAAA,OAgBE,WAAA;AACE,eAAA,GAAA,GAAA,YAAA,SAAA,MAAA,KAAA,OACA,EAAM,cAAc,KAAK,OAAO,EAAM,cAAc,KAAK,QAAQ,OAAO,IAExE,EAAM,KAAK,sBAAsB,EAAE,cAAc;iBApBrD;UAAkC,GAAA;;AAHpC;AAAA,aAAA,GAAA,GAAA,MAGoC,GAAA,GAAA,CAAA,EAAA,KAAA,gBAAA,OAyBpC,SAAc,IAAkB,GAAA;AAC9B,aAAK,aAAa,KAAK,EAAE,IAAA,GAAI,KAAA;WAAA,EAAA,KAAA,QAAA,OAG/B,SAA8B,IAAS,GAAA;AACrC,iBAAA,IAAA,GAAA,IAEK,KAAK,aAFV,QAAA,KAEwB;AAAA,cADP,KACZ,KAAK,aAAc,GADtB,IAAQ;AAER,cAAM,MAAY,GAAS,GAAY,MAAM,QAAvC;AACJ,mBAAA;;WAAO,EAAA,KAAA,QAAA,OAOb,SAAM,IAAA;AACJ,eAAO,KAAK,gBAAgB,OAAO,GAAU,MAAM;WAAA,EAAA,KAAA,qBAAA,OAGrD,SAAmB,IAAA;AACjB,eAAO,KAAK,SAAS,IAAI,GAAO,OAAO,KAAK,SAAS,KAAK,QAAQ,QAAlC;WAAkC,EAAA,KAAA,aAAA,OAGpE,SAAW,IAAgB,GAAA;AACzB,YAAA,CAAK,KAAK;AACR,iBAAO;AAGT,YAAI,KAAK,kBAAkB;AACzB,iBAAO;AAYT,YATI,GAAO,MACT,MAAK,SAAS,IAAI,GAAO,MAAM,KAEjC,KAAK,SAAS,KAAK,KAAK,KAEpB,GAAO,WACT,GAAO,QAAQ,MAAM,IAGnB,GAAO,aAAa,GAAO,QAAQ;AASrC,mBARI,IAAQ,GACN,KAAM,KAAK,aAAa,QACxB,KAAS,GAAO,OAAO,OAAO,SAAC,IAAK,GAAA;AAGxC,mBAFA,GAAI,KAAA,MACJ,GAAI,GAAa,MAAA,MACV;aACN,KAEI,IAAQ,IAAK,KAAS;AAC3B,gBAAM,KAAU,KAAK,aAAa,GAAO;AAEzC,gBAAI,GAAO,OAAY,GAAO,GAAa;AACzC;;AAIJ,eAAK,aAAa,OAAO,GAAO,GAAG,EAAE,IAAI,GAAO,IAAI,KAAK,GAAO;;AACvD,aAAO,aAChB,KAAK,aAAa,KAAK,EAAE,IAAI,GAAO,IAAI,KAAK,GAAO;AAGtD,eAAO;WAAA,EAAA,KAAA,eAAA,OAGT,SAAa,IAAe,GAAA;AAE1B,YAAI,KAAK,YAAY,QAArB;AACE,iBAAA;AAGF,YAAM,IAAS,EAAI,UAAU;AAE7B,YAAU,IAAU,IAAA,EAAA,SAAO,IAAI,KAAW,IAE1C,KAAK,UAAU,KAAK,EAAE,KAAA,IAAK,SAAA,MAC3B,KAAK,OAAO,UAAU,KAAK,KAIvB,OAAQ,KAAK,YACf,KAAK,OAAO,IAAI,GAAQ,UAAU,KAAK,iBAGzC,KAAK,KAAK,sBAAsB,EAAE,KAAA,IAAK,QAAA,GAAQ,OAAO,MAAM,SAAA;WAAA,EAAA,KAAA,kBAAA,OAG9D,SAAgB,IAAA;AACd,YAAM,IAAQ,KAAK,YAAY,KAEzB,IAAS,EAAI,UAAU,KACvB,KAAU,KAAK,UAAU,GAAO;AAEtC,aAAK,OAAO,OAAO,GAAQ,UAAU,KAAK,iBAE1C,KAAK,UAAU,OAAO,GAAO,IAC7B,KAAK,OAAO,UAAU,OAAO,GAAO,IAEpC,KAAK,KAAK,yBAAyB,EAAE,KAAA,IAAK,QAAA,GAAQ,OAAO,MAAM,SAAA;WAAA,EAAA,KAAA,eAAA,OAGjE,SAAa,IAAA;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ;AACzC,cAAI,KAAK,UAAU,GAAG,QAAQ;AAC5B,mBAAO;AAIX,eAAA;WAAQ,EAAA,KAAA,iBAAA,OAGV,SAAe,IAAA;AACb,YAAM,IAAW,KAAK,YAAY;AAElC,eAAO,MAAP,KAAyB,OAAO,KAAK,UAAU,GAAU;WAAA,EAAA,KAAA,OAAA,OAG3D,WAAA;AACE,eAAU,MAAK,OAAe,QAAwB,MAAM;aAAA;;AAIzD,gBAAoB,GAAc,IAAA;AAkBvC,aAjBA,EAAM,gBAAA,MAEF,GAAA,QAAG,OAAO,OACZ,EAAI,KAAK,KAGX,EAAA,QAAW,KAAK,KAChB,EAAA,QAAQ,KAAK,KACb,GAAA,QAAI,KAAK,KAGT,EAAM,SAAS,IACf,EAAM,WAAW,GAAO,UAExB,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA,UAET;;AAlBF;AAAS,OAAA,IAAA;AAqBhB,gBAAuB,GAAA;AACrB,aAAO,KAAM,EAAG,QAAQ,SAAS;;AADnC;AAAS,OAAA,IAAA,OAC0B,GAAA,QAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACxRnC,QAAM,KAAQ,IAAI,GAAA,SAAA,KAED,GAAM;AAAA,OAAA,UAAA;AAIvB,QAAM,KAAgC,OAAf,cAAe,cAAc,aAA+B,OAAX,UAAW,cAAc,SAAA;AACjG,OAAM,KAAK;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,GAAA,UCTI,WAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,GAAA,UCAA,WAAA;;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,SAAA,GAAA;AAAA,YAAA,MAAA,QAAA;AAAA,iBAAA;QAAA,MAAA,SAAA,GAAA,GAAA;AAAA,YAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA,IAAA;AAAA,cAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,KAAA;AAAA,cAAA;AAAA,qBAAA,GAAA,IAAA,EAAA,OAAA,aAAA,CAAA,MAAA,KAAA,EAAA,QAAA,SAAA,IAAA,KAAA,EAAA,QAAA,CAAA,KAAA,GAAA,WAAA,IAAA,KAAA;AAAA;mBAAA,GAAA;AAAA,iBAAA,MAAA,KAAA;oBAAA;AAAA,gBAAA;AAAA,oBAAA,EAAA,UAAA,QAAA,EAAA;sBAAA;AAAA,kBAAA;AAAA,sBAAA;;;AAAA,iBAAA;;QAAA,GAAA,OAAA,SAAA,GAAA,GAAA;AAAA,YAAA,GAAA;AAAA,cAAA,OAAA,KAAA;AAAA,mBAAA,GAAA,GAAA;AAAA,cAAA,KAAA,OAAA,UAAA,SAAA,KAAA,GAAA,MAAA,GAAA;AAAA,iBAAA,OAAA,YAAA,EAAA,eAAA,MAAA,EAAA,YAAA,OAAA,OAAA,SAAA,OAAA,QAAA,MAAA,KAAA,KAAA,OAAA,eAAA,2CAAA,KAAA,MAAA,GAAA,GAAA,KAAA;;QAAA,GAAA,OAAA,WAAA;AAAA,cAAA,IAAA,UAAA;;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,QAAA,GAAA,UCSA,SAAC,GAAA;AACd,UAAM,KAAe,CACnB,CAAC,KAAK,MACN,CAAC,QAAQ,QACT,CAAC,SAAS,WACV,CAAC,SAAS,WACA,OAAO,SAAA,GAAA;AAAA,YAAA,KAAA,GAAA,GAAA,IAAE,KAAF,GAAA,IAAU,KAAV,GAAA;AAAA,eAAsB,MAAU,KAAQ,MAAU;UAE/D,IAGF,GAAA,SAAC,GAAG,IAAA;AAgBN,iBAdE,KAQE,EARF,OAFU,KAUR,EAPF,QAAA,KAHU,OAGV,SAAS,EACP,MAAA,KAAM,GACN,OAAO,IAAA,GACP,KAAA,KAAK,GACL,QAAQ,IAAA,MAPA,IAAA,IAUR,EADF,QAAA,IATU,MASV,SAAS,EAAE,GAAG,GAAG,GAAG,MATV,GAYN,IAEF,EAAE,OAAA,IAAO,MAAA,GAAM,GAAG,MAAgB,GAAG,QAEzC,IAAA,GAAA,IAA+B,GAA/B,QAAA,KAA4C;AAAA,cAAA,KAAA,GAAb,GAAa,IAAA,IAAhC,KAAgC,GAAA,IAAxB,KAAwB,GAAA,IACpC,IAAQ,KAAK,MAAO,KAAI,EAAO,KAAM,EAAa,MAClD,IAAQ,KAAK,MAAO,MAAI,EAAO,KAAM,EAAa;AAExD,YAAO,MAAU,KAAK,IAAI,GAAO,MAAM,KAAK,IAAI,GAAO,OAAO,IAAS,EAAa,MAAU,EAAO,KACrG,EAAO,MAAU,KAAK,IAAI,GAAO,KAAK,KAAK,IAAI,GAAO,QAAQ,IAAS,EAAa,MAAU,EAAO;;AAGvG,eAAO;SAxBL;AA8BJ,aAHA,EAAS,OAAO,GAChB,EAAS,cAAc,IAEhB;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,cAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;UAAA,OAAA,eAAA,IAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;UAAA,OAAA,eAAA,IAAA,QAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACtCT,QAAA,KAA+B,EAC7B,IAAI,YACJ,SAF6B,SAEpB,GAAA;AAAO,UACU,KAAa,EAA7B;AAER,SAAS,WAAW,IAAA,EAAA,SAAO,GAAS,YAAY,IAAI,KACpD,GAAS,iBAAiB,GAAS,SAAS;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,UAAA,IAAA,OAAA,KAAA;AAAA,UAAA,OAAA,uBAAA;AAAA,YAAA,IAAA,OAAA,sBAAA;AAAA,cAAA,KAAA,EAAA,OAAA,SAAA,IAAA;AAAA,iBAAA,OAAA,yBAAA,GAAA,IAAA;aAAA,EAAA,KAAA,MAAA,GAAA;;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,eAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAA;AAAA,YAAA,IAAA,UAAA,OAAA,OAAA,UAAA,MAAA;AAAA,aAAA,IAAA,GAAA,OAAA,IAAA,MAAA,QAAA,SAAA,GAAA;AAAA,aAAA,GAAA,GAAA,EAAA;aAAA,OAAA,4BAAA,OAAA,iBAAA,GAAA,OAAA,0BAAA,MAAA,GAAA,OAAA,IAAA,QAAA,SAAA,GAAA;AAAA,iBAAA,eAAA,GAAA,GAAA,OAAA,yBAAA,GAAA;;;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,cAAA,GAAA,UAAA;AC6BhD,QAAM,KAAoE,EACxE,OADwE,SACjE,GAAA;AAAK,UACF,KAA0D,EAA1D,OAAO,IAAmD,EAAnD,MAAa,IAAsC,EAA7C,OAAkC,KAAW,EAAvB,YACrC,KAAU,GAAM,QAAhB,OAFI,KAGwB,GAAM,SAAhC,KAHE,GAGF,YAAY,IAHV,GAGU;AAEhB,aAAU,cACZ,MAAQ,EAAK,QAAQ,EAAK,SAG5B,GAAM,cAAc,IAAA,EAAA,SAAO,IAAI,KAC/B,GAAM,YAAY,IAAA,EAAA,SAAO,IAAI,IAC7B,GAAM,QAAQ,IACd,GAAM,aAAa;AAEnB,UAAM,IAAe,GAAM,cAAc,EACvC,KAAK,EAAc,OAAQ,EAAc,QAAA,CAAS,EAAc,QAChE,MAAM,EAAc,QAAS,EAAc,OAAA,CAAQ,EAAc,OACjE,QAAQ,EAAc,UAAW,EAAc,SAAA,CAAU,EAAc,KACvE,OAAO,EAAc,SAAU,EAAc,UAAA,CAAW,EAAc;AAKxE,UAFA,GAAM,iBAAA,CAAA,EAAoB,EAAc,QAAA,CAAQ,EAAc,QAE1D,GAAM;AACR,WAAM,WAAa,GAAY,OAAO,IAAA,MAAW,GAAY,MAAM,IAAA;WAC9D;AACL,YAAM,IAAwB,GAAM,iBAAiB,EAAY,MAAM,EAAY;AACnF,WAAM,WAAW,IAAA,KAA6B;;AAKhD,UAFA,IAAA,EAAA,SAAO,EAAI,OAAO,IAEb,KAAc,EAAU,QAA7B;AAEA,YAAM,IAAkB,IAAI,GAAA,QAAa,EAAI;AAE7C,UAAgB,SAAS,EAAI,YAAY,eACzC,EAAgB,cAAc,IAE9B,GAAM,kBAAkB,GACxB,EAAgB,SAAhB,GAAA,IAA8B;;OAGhC,KA5CwE,SA4CnE,GAAA;AAAK,UACA,KAAwB,EAAxB,OAAO,IAAiB,EAAjB,MAAM,IAAW,EAAX,QACf,KAAgB,IAAA,EAAA,SAAO,IAAI,IAC3B,KAAe,GAAM,aAAa,KAAgB;AAIxD,UAFA,GAAa,IAAO,GAAM,gBAAgB,GAAQ,IAAA,CAE7C,GAAM;AACT,eAAO;AAGT,UAAM,KAAgB,IAAA,EAAA,SAAO,IAAI;AAEjC,MAAA,IAAA,GAAA,UAAS,GAAM,aAAa,IAAe,EACzC,GAAG,EAAO,IAAI,GAAc,GAC5B,GAAG,EAAO,IAAI,GAAc;AAG9B,UAAM,KAAS,GAAM,gBAAgB,OAAtB,GAAA,GAAA,IACV,IADU,IAAA,EAEb,MAAM,IACN,OAAO,GAAM,aACb,YAAY,GACZ,YAAY,GACZ,UAAU,QAGJ,IAAU,GAAV;AAUR,aARI,GAAO,WAIT,IAAa,IAHW,KAAK,IAAI,EAAM,KAAK,KAAK,IAAI,EAAM,IAGtB,GAAO,QAAQ,GAAO,OAC3D,IAAA,EAAA,SAAO,GAAQ,GAAO,UAGjB,GAAO;OAGhB,UAAU,EACR,OAAO,YACP,YAAA,OACA,WAAW,IACX,SAAA;AAIJ,gBAAA,GAAqE,IAAyB,GAAA;AAAe,UAAnF,IAAmF,EAAnF,aAAa,KAAsE,EAAtE;AACjC,WACF,EAAO,IAAI,EAAY,IAAK,GAAO,IAAI,EAAY,KAAK,KAExD,EAAO,IAAI,EAAY,IAAK,GAAO,IAAI,EAAY,KAAK;;AAJ5D;AAAS,OAAA,IAAA;AAQT,gBAAA,GAEE,IACA,GACA,GAAA;AACA,UAJE,KAIF,EAJE,WAAW,KAIb,EAJa,aAAa,KAI1B,EAJ0B,OAAO,KAIjC,EAJiC;AAKjC,UAAI,IAAgB;AAClB,YAAM,IAAY,EAAK,QAAQ;AAE/B,UAAO,IAAI,GAAY,IAAK,KAAY,GAAU,UAAU;aACvD;AACL,YAAM,IAAW,EAAK,SAAS;AAE/B,UAAO,IAAI,GAAY,IAAK,KAAW,GAAU,SAAS;;;AAb9D;AAAS,OAAA,IAAA,OAaqD,GAAA,cAAA;AAAA,QAAA,KAI/C,IAAA,GAAA,cAAa,IAAa;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AClKzC,QAAM,KAAS,GAAA,WAAA;OAAA;AAEf,OAAK,YAAY;AAAA,QAAA,KAEF;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AC0ER,gBACL,GACA,IACA,GAAA;AAEA,aAAI,GAAA,QAAG,KAAK,KACH,GAAU,gBAAgB,GAAO,GAAY,cAAc,GAAY,SAAS,CACrF,EAAO,GACP,EAAO,GACP,OAGK,GAAU,gBAAgB,GAAO,GAAY,cAAc,GAAY;;AAZ3E;AAAS,OAAA,IAAA,OAYkE,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,qBAAA,IAAA,GAAA,WAAA,GAAA,UAAA;AAIlF,QAQM,KAA2D,EAC/D,OA9EF,SAAA,GAAA;AAAmG,UAAjF,KAAiF,EAAjF,MAAM,IAA2E,EAA3E,aAAa,IAA8D,EAA9D,OAAO,KAAuD,EAAvD,aAAa,KAA0C,EAA1C,YAC/C,KAAY,EAAZ,SACA,KAAgB,GAAhB,aACF,IAAe,IAAA,EAAA,SACnB,EACE,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,KAEV,GAAQ,UAAU;AAGpB,UAAI,MAAQ,IAAa;AACvB,YAAM,IAAc,GAAmB,GAAQ,aAAa,IAAa;AAEzE,YAAI,GAAa;AACf,cAAM,IAAY,EAAY,QAAQ,EAAY,OAAO,GAAK,OACxD,IAAa,EAAY,SAAS,EAAY,MAAM,GAAK;AAE3D,cAAY,KACd,GAAO,QAAQ,GACf,EAAO,SAAS,IAEd,IAAa,KACf,GAAO,OAAO,GACd,EAAO,UAAU;;AAIrB,UAAO,QAAQ,EAAY,OAAO,GAAK,QAAQ,GAAY,MAC3D,EAAO,OAAO,EAAY,MAAM,GAAK,SAAS,GAAY,KAE1D,EAAO,SAAS,EAAY,QAAQ,GAAK,QAAS,KAAI,GAAY,QAClE,EAAO,UAAU,EAAY,SAAS,GAAK,SAAU,KAAI,GAAY;;AAGvE,QAAM,SAAS;OA0Cf,KAvCF,SAAA,GAAA;AAA0E,UAA1D,KAA0D,EAA1D,QAAQ,IAAkD,EAAlD,aAAa,IAAqC,EAArC,OAC3B,KAAoB,EAApB,SAAS,KAAW,EAAX,QAEX,KAAc,GAAmB,GAAQ,aAAa,GAAa;AAEzE,UAAK,IAAL;AAEA,YAAM,KAAO,GAAU,WAAW;AAElC,WAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAK,QAAQ,GAAO,OAAO,GAAO,IAAI,GAAK,OAAO,GAAO,OACtF,GAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAK,SAAS,GAAO,QAAQ,GAAO,IAAI,GAAK,MAAM,GAAO;;OA8BvF,UAXgC,EAChC,aAAa,MACb,aAAa,MACb,QAAQ,MACR,SAAA,OACA,SAAA;AAAS,OAAA,WAAA;AAAA,QAAA,KASI,IAAA,GAAA,cAAa,IAAU;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,gBAAA,GAAA,UAAA;ACxEtC,QAAM,KAAU,EAAE,KAAK,IAAA,GAAW,MAAM,IAAA,GAAW,QAAA,KAAQ,GAAW,OAAA,KAAO,KACvE,KAAU,EAAE,KAAA,KAAK,GAAW,MAAA,KAAM,GAAW,QAAQ,IAAA,GAAW,OAAO,IAAA;AAgD7E,gBAAkB,GAAY,IAAA;AAC5B,eAD4C,IACzB,CAAC,OAAO,QAAQ,UAAU,UAA7C,IAAA,GAAA,IAAA,EAAA,QAAA,KAAuD;AAAlD,YAAM,KAAI,EAAA;AACP,cAAQ,KACZ,GAAK,MAAQ,GAAS;;AAI1B,aAAO;;AAPT;AAAS,OAAA,IAAA;AAUT,QAQM,KAAgB,EACpB,SAAA,IACA,SAAA,IACA,OAnEF,SAAA,GAAA;AAAsF,UAEhF,IAFY,IAAoE,EAApE,aAAa,IAAuD,EAAvD,aAAa,KAA0C,EAA1C,OAClC,KAAY,GAAZ;AAGR,UAAI,IAAS;AACX,YAAM,KAAa,IAAA,GAAA,oBAAmB,GAAQ,QAAQ,GAAa,EAAY,OAAO,MAAM;AAE5F,aAAS,GAAU,SAAS;;AAG9B,WAAS,MAAU,EAAE,GAAG,GAAG,GAAG,KAE9B,GAAM,SAAS,EACb,KAAK,GAAO,IAAI,EAAY,KAC5B,MAAM,GAAO,IAAI,EAAY,MAC7B,QAAQ,GAAO,IAAI,EAAY,QAC/B,OAAO,GAAO,IAAI,EAAY;OAoDhC,KAhDF,SAAA,GAAA;AAAsF,UAAtE,KAAsE,EAAtE,QAAQ,IAA8D,EAA9D,OAAO,IAAuD,EAAvD,aAAa,KAA0C,EAA1C,OAClC,KAAoB,GAApB,QAAQ,KAAY,GAAZ;AAEhB,UAAK,GAAL;AAIA,YAAM,KAAO,IAAA,EAAA,SAAO,IAAI,KAClB,IAAQ,IAAA,GAAA,oBAAmB,GAAQ,OAAO,GAAa,OAAU,IACjE,IAAQ,IAAA,GAAA,oBAAmB,GAAQ,OAAO,GAAa,OAAU;AAEvE,WAAQ,GAAO,KACf,GAAQ,GAAO,KAEX,EAAM,MACR,GAAO,IAAI,KAAK,IAAI,KAAK,IAAI,EAAM,MAAM,GAAO,KAAK,GAAK,IAAI,EAAM,MAAM,GAAO,OACxE,EAAM,UACf,IAAO,IAAI,KAAK,IAAI,KAAK,IAAI,EAAM,SAAS,GAAO,QAAQ,GAAK,IAAI,EAAM,SAAS,GAAO,UAExF,EAAM,OACR,GAAO,IAAI,KAAK,IAAI,KAAK,IAAI,EAAM,OAAO,GAAO,MAAM,GAAK,IAAI,EAAM,OAAO,GAAO,QAC3E,EAAM,SACf,IAAO,IAAI,KAAK,IAAI,KAAK,IAAI,EAAM,QAAQ,GAAO,OAAO,GAAK,IAAI,EAAM,QAAQ,GAAO;;OA2BzF,UAbqC,EACrC,OAAO,MACP,OAAO,MACP,QAAQ,MACR,SAAA,OACA,SAAA;AAAS,OAAA,gBAAA;AAAA,QAAA,KAWI,IAAA,GAAA,cAAa,IAAe;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAAA,GAAA,UAAA;AC3G3C,QAAM,KAAW,IAAA,EAAA,SACf,MACE,cAAA;AACE,aAAO,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO;WAE9C,YAAiB,GAAA;SAEnB,GAAA,SAAS,WAGL,KAAe,EACnB,OAAO,GAAA,SAAS,OAChB,KAAK,GAAA,SAAS,KACd,UAAA;AAAA,OAAA,eAAA;AAAA,QAAA,KAGa,IAAA,GAAA,cAAa,IAAc;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAAA,GAAA,UAAA;ACV1C,QAAM,KAAQ,EAAE,OAAA,KAAO,GAAW,QAAA,KAAQ,KACpC,KAAQ,EAAE,OAAO,IAAA,GAAW,QAAQ,IAAA,KAoEpC,KAAe,EACnB,OA5DF,SAAgB,GAAA;AACd,aAAO,GAAA,cAAc,MAAM;OA4D3B,KAhDF,SAAc,GAAA;AAAqC,UACzC,KAAoC,EAApC,aAAa,IAAuB,EAAvB,OAAO,IAAgB,EAAhB,MAAM,KAAU,EAAV,OAC1B,KAAY,EAAZ;AAER,UAAK,IAAL;AAIA,YAAM,KACJ,GAAU,WAAW,IAAA,GAAA,oBAAmB,GAAQ,KAAY,IAAa,EAAI,YAAY,IACrF,KACJ,GAAU,WAAW,IAAA,GAAA,oBAAmB,GAAQ,KAAY,IAAa,EAAI,YAAY;AAE3F,UAAM,UAAU,EACd,SAAS,GAAQ,SACjB,OAAO,IAAA,EAAA,SAAO,IAAI,GAAA,cAAc,UAChC,OAAO,IAAA,EAAA,SAAO,IAAI,GAAA,cAAc,YAG9B,GAAM,MACR,GAAM,QAAQ,MAAM,MAAM,EAAK,SAAS,GAAQ,QAChD,EAAM,QAAQ,MAAM,MAAM,EAAK,SAAS,GAAQ,UACvC,GAAM,UACf,GAAM,QAAQ,MAAM,SAAS,EAAK,MAAM,GAAQ,QAChD,EAAM,QAAQ,MAAM,SAAS,EAAK,MAAM,GAAQ,SAE9C,GAAM,OACR,GAAM,QAAQ,MAAM,OAAO,EAAK,QAAQ,GAAQ,OAChD,EAAM,QAAQ,MAAM,OAAO,EAAK,QAAQ,GAAQ,SACvC,GAAM,SACf,GAAM,QAAQ,MAAM,QAAQ,EAAK,OAAO,GAAQ,OAChD,EAAM,QAAQ,MAAM,QAAQ,EAAK,OAAO,GAAQ,QAGlD,GAAA,cAAc,IAAI,IAElB,EAAM,UAAU;;OAahB,UAVoC,EACpC,KAAK,MACL,KAAK,MACL,SAAA,OACA,SAAA;AAAS,OAAA,eAAA;AAAA,QAAA,KASI,IAAA,GAAA,cAAa,IAAc;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,OAAA,GAAA,UAAA;ACmH1C,QAUM,KAAO,EACX,OA3JF,SAAgB,GAAA;AAA6B,UAKvC,IAJI,IAAiE,EAAjE,aAAa,IAAoD,EAApD,cAAc,KAAsC,EAAtC,SAAS,KAA6B,EAA7B,MAAM,KAAuB,EAAvB,OAAO,KAAgB,EAAhB,aACjD,IAAY,GAAZ,SACF,IAAS,EAAQ,mBAqIzB,SAAoB,IAAA;AAAsC,YAChD,KAAY,GAAI,YAAhB;AAIR,eAHsB,IAAA,GAAA,UAAS,IAAA,GAAA,iBAAgB,GAAI,MAAM,QAAQ,QAAe,MAAM,MAAM,CAAC,SAC7D,IAAA,GAAA,SAAY,GAAI,cAAc,IAAS,GAAI,YAAY,SAAS;QAxI5C,KAAO,EAAE,GAAG,GAAG,GAAG;AAItE,UAAI,EAAQ,WAAW;AACrB,aAAa,EACX,GAAG,EAAY,OAAO,MAAM,KAAK,GACjC,GAAG,EAAY,OAAO,MAAM,KAAK;WAE9B;AACL,YAAM,IAAa,IAAA,GAAA,iBAAgB,EAAQ,QAAe,GAAc,IAAS,CAAC;AAElF,QAAA,MAAa,IAAA,GAAA,UAAS,MAAe,EAAE,GAAG,GAAG,GAAG,KACrC,KAAK,EAAO,GACvB,GAAW,KAAK,EAAO;;AAjBkB,UAoBnC,IAAmB,EAAnB;AAER,SAAM,UACJ,MAAQ,KAAkB,EAAe,SACrC,EAAe,IAAI,SAAC,IAAe,IAAA;AAAhB,eAA2B,EAC9C,OAAA,IACA,eAAA,IACA,GAAG,GAAY,OAAO,GAAK,QAAQ,GAAc,IAAI,GAAW,GAChE,GAAG,GAAY,MAAM,GAAK,SAAS,GAAc,IAAI,GAAW;WAEhE,CACA,EACE,OAAO,GACP,eAAe,MACf,GAAG,GAAW,GACd,GAAG,GAAW;OAyHtB,KApHF,SAAc,GAAA;AAA6B,UACjC,KAA+B,EAA/B,aAAa,IAAkB,EAAlB,QAAQ,IAAU,EAAV,OACrB,KAAqB,EAArB,SAAS,KAAY,EAAZ,SAEX,KAAS,IAAA,GAAA,SAAY,GAAY,cAAc,GAAY,SAAS,GAAY,SAAS,OACzF,KAAO,IAAA,EAAA,SAAO,IAAI,IAClB,IAAU;AAEX,SAAQ,oBACX,IAAK,KAAK,GAAO,GACjB,GAAK,KAAK,GAAO;AAGnB,eAAA,IAAA,GAAA,IAAqB,GAArB,QAAA;AAIE,iBAJS,IAAU,GAAS,IACtB,IAAY,GAAK,IAAI,EAAO,GAC5B,KAAY,GAAK,IAAI,EAAO,GAEzB,KAAQ,GAAG,KAAM,GAAQ,QAAQ,QAAQ,KAAQ,IAAK,MAAS;AACtE,cACI,GADE,IAAa,GAAQ,QAAQ;AAIjC,UAAA,KADE,GAAA,QAAG,KAAK,KACD,EAAW,GAAW,IAAW,GAAY,QAAQ,GAAQ,MAE7D,MAOX,EAAQ,KAAK,EACX,GAAI,IAAA,QAAG,OAAO,EAAO,KAAK,EAAO,IAAI,KAAa,EAAO,GACzD,GAAI,IAAA,QAAG,OAAO,EAAO,KAAK,EAAO,IAAI,MAAa,EAAO,GAEzD,OAAO,GAAA,QAAG,OAAO,EAAO,SAAS,EAAO,QAAQ,GAAQ,OACxD,QAAQ,GACR,OAAA,IACA,QAAA;;AAaN,eARM,KAAU,EACd,QAAQ,MACR,SAAA,OACA,UAAU,GACV,OAAO,GACP,OAAO,EAAE,GAAG,GAAG,GAAG,OAGpB,KAAA,GAAA,KAAqB,EAArB,QAAA,MAA8B;AAAzB,YAAM,KAAU,EAAJ,KACT,KAAQ,GAAO,OACf,KAAK,GAAO,IAAI,GAAK,GACrB,KAAK,GAAO,IAAI,GAAK,GACrB,KAAW,IAAA,GAAA,SAAM,IAAI,KACvB,KAAU,MAAY;AAItB,eAAU,IAAA,KAAY,GAAQ,WAAW,GAAQ,UAAU,IAAA,KAC7D,MAAA,QAIC,GAAQ,UAAA,CACR,MAEC,GAAQ,WAAW,OAAU,IAAA,IAE3B,KAAW,KAAQ,GAAQ,WAAW,GAAQ,QAE7C,OAAU,IAAA,KAAY,GAAQ,UAAU,IAAA,KAEvC,KAAW,GAAQ,WAAA,CAEtB,GAAQ,WAAW,KAAW,GAAQ,aAEzC,IAAQ,SAAS,IACjB,GAAQ,WAAW,IACnB,GAAQ,QAAQ,IAChB,GAAQ,UAAU,IAClB,GAAQ,MAAM,IAAI,IAClB,GAAQ,MAAM,IAAI;;AAUtB,aANI,GAAQ,WACV,GAAO,IAAI,GAAQ,OAAO,GAC1B,EAAO,IAAI,GAAQ,OAAO,IAG5B,EAAM,UAAU,IACT;OAwBP,UAb4B,EAC5B,OAAO,IAAA,GACP,SAAS,MACT,QAAQ,MACR,kBAAA,MACA,QAAQ,MACR,gBAAgB,MAChB,SAAA,OACA,SAAA;AAAS,OAAA,OAAA;AAAA,QAAA,KAQI,IAAA,GAAA,cAAa,IAAM;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,MAAA,OAAA,QAAA,KAAA,EAAA,WAAA,MAAA,EAAA;AAAA,eAAA,IAAA,GAAA,IAAA,MAAA,KAAA,IAAA,IAAA;AAAA,UAAA,KAAA,EAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,WAAA,GAAA,UAAA;AC/HlC,QAQM,KAAW,EACf,OAtFF,SAAgB,GAAA;AAA6B,UACnC,KAAiB,EAAjB,OAAO,IAAU,EAAV,OACP,IAAY,GAAZ;AAER,UAAA,CAAK;AACH,eAAO;AAGT,QAAI,QAAQ,EACV,SAAS,EACP,SAAS,MACT,gBAAgB,CACd,EACE,GAAG,EAAM,OAAO,IAAI,GACpB,GAAG,EAAM,MAAM,IAAI,MAGvB,QAAQ,EAAQ,UAAU,QAC1B,QAAQ,EAAE,GAAG,GAAG,GAAG,KACnB,OAAO,EAAQ,WAInB,GAAM,eAAe,GAAM,gBAAgB,CACzC,CAAC,SAAS,WACV,CAAC,KAAK,OAGR,GAAA,KAAK,MAAM,IACX,GAAM,UAAU,EAAI,MAAM,SAE1B,EAAI,QAAQ;OAwDZ,KArDF,SAAc,GAAA;AAAK,UAAA,IAAA,GACT,IAA+B,EAA/B,aAAa,KAAkB,EAAlB,OAAO,KAAW,EAAX,QACpB,KAAqB,GAArB,SAAS,KAAY,GAAZ,SACX,IAAW,EACf,GAAG,GAAO,IAAI,GAAQ,GAAG,GACzB,GAAG,GAAO,IAAI,GAAQ,GAAG;AAG3B,SAAM,UAAU,IAAA,EAAA,SAAO,IAAI,KAC3B,GAAM,QAAQ,UAAU;AAExB,eAAA,IAAA,GAAA,IAAyB,IAAQ,WAAW,IAA5C,QAAA,KAAgD;AAAA,YAArC,IAAc,IAAQ,WAAW,IAAI,IAC1C,IAAA;AAQJ,YALE,IADE,GAAA,QAAG,KAAK,KACD,EAAW,EAAS,GAAG,EAAS,GAAG,KAEnC,GAGX;AAIA,mBAAA,KAAA,GAAA,KAA+B,GAAM,aAArC,QAAA,MAAmD;AAAA,gBAAA,KAAA,MAApB,GAAM,aAAc,KAAA,IAAA,GAAA,SAAA,IAAA;AAAA,kBAAA,MAAA,QAAA;AAAA,uBAAA;cAAA,OAAA,SAAA,IAAA,IAAA;AAAA,kBAAA,OAAA,UAAA,eAAA,OAAA,YAAA,OAAA,KAAA;AAAA,oBAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,KAAA;AAAA,oBAAA;AAAA,2BAAA,IAAA,KAAA,GAAA,OAAA,aAAA,CAAA,MAAA,MAAA,GAAA,QAAA,SAAA,IAAA,KAAA,GAAA,QAAA,CAAA,MAAA,GAAA,WAAA,KAAA,KAAA;AAAA;yBAAA,IAAA;AAAA,uBAAA,MAAA,KAAA;0BAAA;AAAA,sBAAA;AAAA,0BAAA,GAAA,UAAA,QAAA,GAAA;4BAAA;AAAA,wBAAA;AAAA,4BAAA;;;AAAA,uBAAA;;cAAA,IAAA,MAAA,SAAA,IAAA,IAAA;AAAA,kBAAA,IAAA;AAAA,oBAAA,OAAA,MAAA;AAAA,yBAAA,GAAA,IAAA;AAAA,oBAAA,KAAA,OAAA,UAAA,SAAA,KAAA,IAAA,MAAA,GAAA;AAAA,uBAAA,OAAA,YAAA,GAAA,eAAA,MAAA,GAAA,YAAA,OAAA,OAAA,SAAA,OAAA,QAAA,MAAA,KAAA,MAAA,OAAA,eAAA,2CAAA,KAAA,MAAA,GAAA,IAAA,MAAA;;cAAA,IAAA,MAAA,WAAA;AAAA,oBAAA,IAAA,UAAA;;kBAAvC,KAAuC,GAAA,IAA/B,IAA+B,GAAA;AACjD,gBAAI,MAAU,KAAU,KAAU,GAAQ;AACxC,gBAAO,IAAI,EAAO,KAClB,EAAO,IAAI,EAAO;AAElB;;;AAIJ,aAAM,QAAQ,QAAQ,KAAK;;;AAG7B,UAAM,IAAc,GAAA,KAAK,IAAI;AAI7B,aAFA,GAAM,UAAU,IAET;OAcP,UAXgC,EAChC,OAAO,IAAA,GACP,SAAS,MACT,QAAQ,MACR,SAAA,OACA,SAAA;AAAS,OAAA,WAAA;AAAA,QAAA,KASI,IAAA,GAAA,cAAa,IAAU;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,YAAA,GAAA,UAAA;ACnDtC,QAAM,KAA0F,EAC9F,OAfF,SAAgB,GAAA;AAA6B,UACnC,KAAU,EAAV;AAER,aAAK,KAIL,GAAI,MAAM,eAAe,EAAI,MAAM,gBAAgB,CACjD,CAAC,GAAM,OAAO,SAAS,SAAS,GAAM,MAAM,QAAQ,YAG/C,GAAA,SAAS,MAAM,MAPb;OAYT,KAAK,GAAA,SAAS,KACd,UAAU,IAAA,EAAA,SAAO,IAAA,GAAA,SAAM,GAAA,SAAS,WAAW,EACzC,SAAS,MACT,OAAO,MACP,QAAQ,EAAE,GAAG,GAAG,GAAG;AAAA,OAAA,YAAA;AAAA,QAAA,KAIR,IAAA,GAAA,cAAa,IAAW;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,OAAA,eAAA,IAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,GAAA;;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAAA,QAAA,KClDxB,EACb,aAAA,GAAA,SACA,eAAA,GAAA,SACA,UAAA,GAAA,SACA,cAAA,GAAA,SACA,cAAA,GAAA,SACA,WAAA,GAAA,SACA,MAAA,GAAA,SACA,UAAA,GAAA,SAEA,QAAA,GAAA,SACA,OAAA,GAAA,SACA,WAAA,GAAA,SACA,YAAA,GAAA;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACfF,QAAA,KAA0B,EACxB,IAAI,aACJ,SAFwB,SAEf,GAAA;AAAO,UACU,KAAa,EAA7B;AAQR,eAAW,KANX,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA,UAEhB,GAAS,YAAY,GAAA,SAGF,GAAA,SAAK;AAAA,YAAA,IACU,GAAA,QAAI,IAA5B,KADc,EACd,WAAW,KADG,EACH;AAEjB,WAAkB,WAAW,IAC7B,EAAM,SAAS,UAAkB,KAAQ;;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,eAAA,IAAA,GAAA,IAAA,GAAA,QAAA,KAAA;AAAA,YAAA,IAAA,GAAA;AAAA,UAAA,aAAA,EAAA,cAAA,OAAA,EAAA,eAAA,MAAA,WAAA,KAAA,GAAA,WAAA,OAAA,OAAA,eAAA,GAAA,EAAA,KAAA;;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,MAAA,OAAA,kBAAA,SAAA,GAAA,GAAA;AAAA,eAAA,EAAA,YAAA,GAAA;SAAA,GAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA;AAAA,aAAA,CAAA,MAAA,GAAA,QAAA,YAAA,OAAA,MAAA,aAAA,GAAA,KAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,UAAA,MAAA;AAAA,cAAA,IAAA,eAAA;AAAA,aAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,iBAAA,OAAA,iBAAA,SAAA,IAAA;AAAA,eAAA,GAAA,aAAA,OAAA,eAAA;SAAA;;AAAA;AAAA,OAAA,IAAA;AAAA,gBAAA,GAAA,IAAA,GAAA;AAAA,aAAA,MAAA,IAAA,OAAA,eAAA,GAAA,IAAA,EAAA,OAAA,GAAA,YAAA,MAAA,cAAA,MAAA,UAAA,UAAA,EAAA,MAAA,GAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,eAAA,GAAA,UAAA;AAAA,QCtB5B,KAAA,SAAA,GAAA;AAAA,MAAA,UAAA,IAAA,GAAA;AAAA,YAAA,OAAA,KAAA,cAAA,MAAA;AAAA,gBAAA,IAAA,UAAA;AAAA,WAAA,YAAA,OAAA,OAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,IAAA,UAAA,MAAA,cAAA,WAAA,KAAA,GAAA,IAAA;SAAA,IAAA;AAAA,UAAA,IAAA,GAAA,GAAA,IAAA,KAAA,KAAA,IAAA,KAAA,WAAA;AAAA,YAAA,OAAA,WAAA,eAAA,CAAA,QAAA,aAAA,QAAA,UAAA;AAAA,iBAAA;AAAA,YAAA,OAAA,SAAA;AAAA,iBAAA;AAAA,YAAA;AAAA,iBAAA,QAAA,UAAA,QAAA,KAAA,QAAA,UAAA,SAAA,IAAA,WAAA;eAAA;iBAAA,IAAA;AAAA,iBAAA;;WAAA,WAAA;AAAA,YAAA,IAAA,IAAA,GAAA;AAAA,YAAA,IAAA;AAAA,cAAA,IAAA,GAAA,MAAA;AAAA,eAAA,QAAA,UAAA,GAAA,WAAA;;AAAA,eAAA,EAAA,MAAA,MAAA;AAAA,eAAA,GAAA,MAAA;;AAenB,kBACE,IACA,GACA,GACA,GACA,GACA,IAAA;AACA,YAAA;AAgBA,YAAA,SAAA,GAAA,IAAA;AAAA,cAAA,CAAA,cAAA;AAAA,kBAAA,IAAA,UAAA;UAhBA,MAAA,KAAA,GAAA,GACA,KAAA,GAAA,KAAA,MAAM,KADN,QAAA,SAAA,GAAA,GAAA,KAAA,iBAAA,SAAA,GAAA,GAAA,KAAA,aAAA,SAAA,GAAA,GAAA,KAAA,eAAA,SAAA,GAAA,GAAA,KAAA,UAAA,SAAA,GAAA,GAAA,KAAA,SAAA,SAAA,GAAA,GAAA,KAAA,SAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,WAAA,SAAA,GAAA,GAAA,KAAA,MAAA,SAAA,GAAA,GAAA,KAAA,aAAA,SAEA,EAAa,cAAb,GAAA,KAAiC,IAE7B,MAAU,KACZ,EAAa,cAAb,GAAA,KAAiC,IAGnC,GAAK,YAAY,IACjB,GAAK,gBAAgB,GACrB,GAAK,OAAO,IACZ,GAAK,YAAY,EAAa,aAAa,IAC3C,GAAK,cAAc,EAAa,eAAe,IAC/C,GAAK,SAAS,GACd,GAAK,gBAAgB,MAEjB,OAAS,OAAO;AAClB,cAAM,KAAe,EAAY,gBAAgB;AACjD,aAAK,KAAK,GAAK,YAAY,EAAY,SAAS,IAAc;AAE9D,cAAM,IAAW,GAAK,YAAY,EAAY;AAE9C,aAAK,SAAA,CAAA,CACH,GAAY,WACZ,EAAY,QAAQ,SAAS,eAC7B,EAAY,QAAQ,WAAW,GAAK,UACpC,IAAW;;AAEJ,iBAAS,eAClB,IAAK,KAAM,EAAgC,YAAY,EAAY;AA7BrE,eAAA;;AAPF;AAAA,aAAA,GAAA,IAAA,MAOE,KAAA,IAAA,KAAA,CAAA,EAAA,KAAA,mBAAA,OAiCF,SAAA,IAAA;AAAoD,YAA9B,IAA8B,GAAjC,GAAe,IAAkB,GAArB;AAM7B,eALA,KAAK,SAAS,GACd,KAAK,SAAS,GACd,KAAK,WAAW,GAChB,KAAK,WAAW,GAET;WAAA,EAAA,KAAA,cAAA,OAGT,SAAA,IAAA;AAA+C,YAA9B,IAA8B,GAAjC,GAAe,IAAkB,GAArB;AAMxB,eALA,KAAK,SAAS,GACd,KAAK,SAAS,GACd,KAAK,WAAW,GAChB,KAAK,WAAW,GAET;WAAA,EAAA,KAAA,kBAAA,OAMT,WAAA;AACE,aAAK,cAAc;eAAA,GAAA,GAAA,WAAA,IAAA;MA7E2C,GAAA;AAAA,OAAA,eAAA,GAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;ACyElE,QAOM,KAAwB,EAC5B,IAAI,uBACJ,QAAQ,CAAC,WAAW,aAAa,cAAc,YAC/C,SA+QF,SAAkB,GAAA;AAChB,QAAM,gBAAgB,IACtB,EAAM,SAAS,QAAQ,gBAAgB,GAAc,UACrD,IAAA,EAAA,SAAO,EAAM,QAAQ,gBAAgB,GAAc;OAjRnD,WAAW,EACT,oBAuKJ,SAAA,GAAA;AAA+C,UAAf,KAAe,EAAf;AAC9B,SAAY,UAAU,MACtB,GAAY,UAAU;OAxKpB,+BA2KJ,SAAA,GAAA;AAAwF,UAAhE,KAAgE,EAAhE,MAAM,IAA0D,EAA1D;AAAA,OACvB,MAAQ,EAAY,QAIzB,GAAY,OAAO,EAAE,UAAU,IAAA,GAAU,SAAS;OA/KhD,qBA2LJ,SAA2B,GAAsC,IAAA;AAAc,UACrE,IAAwD,EAAxD,aAAa,IAA2C,EAA3C,SAAS,KAAkC,EAAlC,OAAO,KAA2B,EAA3B;AAA2B,QAAd,aAE9B,EAAY,iBAAA,CAAiB,EAAY,mBACvD,GAAY,iBACd,GAAU,IAGZ,GACE,EACE,aAAA,GACA,SAAA,GACA,OAAA,IACA,aAAa,IACb,MAAM,UAER;OA1MF,qBAAqB,SAAC,GAAK,IAAA;AA+M/B,MAAA,UAAA,GAEE,GAAA;AAeA,iBAhBE,KAEF,EAFE,aAAa,KAEf,EAFe,SAAS,KAExB,EAFwB,OAAO,KAE/B,EAF+B,aAAa,IAE5C,EAF4C,cAGtC,IAAQ,GAAY,SAAS,GAAc,MAC3C,IAAO,GAAS,QAAQ,KACxB,IAAY,EAChB,aAAA,IACA,SAAA,IACA,OAAA,IACA,aAAA,IACA,MAAM,QACN,SAAS,IACT,MAAA,GACA,MAAM,QAGR,KAAA,GAAA,KAAmB,EAAnB,QAAA,MAAyB;AAAA,cAAd,KAAQ,EAAM;AACvB,YAAU,OAAO,IAEjB,EAAM,KAAK,iCAAiC;;AAG9C,YAAK,EAAU,QAAQ,QAAvB;AAIA,mBAFI,KAAc,IAAA,GAElB,IAAA,GAAA,IAAqB,EAAU,QAA/B,QAAA,KAAwC;AAAA,gBAChC,IADa,EAAU,QAAS,GACV,UAAU,QAAQ;AAE1C,gBAAe,MACjB,MAAc;;AAIlB,YAAM,WAAW,IACjB,EAAM,UAAU,WAAW,WAAA;AACzB,eACE,EACE,aAAA,IACA,aAAA,IACA,SAAA,IACA,OAAA,IACA,MAAM,UAER;aAED;;SA7PkB,GAAK,KACtB,GAAK,GAAK;OAEZ,mBAAmB,SAAC,GAAK,IAAA;AACvB,SAAU,IACV,GAAK,GAAK,KA2PhB,SAAA,GAEE,GAAA;AACA,YAFE,KAEF,EAFE,aAAa,KAEf,EAFe,SAAS,KAExB,EAFwB,OAAO,KAE/B,EAF+B;AAG1B,WAAY,mBACf,GAAK,EAAE,aAAA,IAAa,aAAA,IAAa,SAAA,IAAS,OAAA,IAAO,MAAM,SAAS;QA/PnD,GAAK;OAElB,uBAAuB,SAAC,GAAK,IAAA;AAC3B,SAAU,IACV,GAAK,GAAK;SAGd,cAAA,GAAA,cACA,MAAA,IACA,qBAAA,IACA,UAhCoC,EACpC,cAAc,KACd,YAAY,MACZ,WAAW,MACX,QAAQ,EAAE,GAAG,GAAG,GAAG,OA6BnB,OAAO,EACL,MAAA,MACA,MAAA,MACA,IAAA,MACA,QAAA,MACA,KAAA,MACA,WAAA,MACA,MAAA;AAIJ,gBACE,GAQA,IAAA;AACA,UACQ,IAA8F,EAA9F,aAAa,IAAiF,EAAjF,SAAS,KAAwE,EAAxE,OAAO,KAAiE,EAAjE,aAAa,KAAoD,EAApD,MADlD,KACsG,EAA9C,SAAA,IADxD,OACwD,SAAU,GAAoB,GAAK,MAD3F,IAGM,IAAe,IAAI,GAAA,aAAa,IAAM,GAAS,IAAO,IAAa,GAAa,GAAM;AAE5F,SAAM,KAAK,qBAAqB,EAAE,cAAA;AAYlC,eAVM,IAAY,EAChB,aAAA,GACA,SAAA,GACA,OAAA,IACA,aAAA,IACA,SAAA,GACA,MAAA,IACA,cAAA,KAGO,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK;AACvC,YAAM,KAAS,EAAQ;AAEvB,iBAAW,MAAQ,GAAO,SAAS;AAC/B,YAAqB,MAAQ,GAAO,MAAM;AAG9C,YAAM,KAAS,IAAA,GAAA,SAAY,GAAO,WAAW,GAAO;AAUpD,YARA,EAAa,gBAAgB,KAC7B,EAAa,YAAY,GAAO,WAChC,EAAa,gBAAgB,GAAO,MAEpC,GAAO,UAAU,KAAK,IAEtB,EAAa,WAAW,KAGtB,EAAa,+BACZ,EAAa,sBACZ,IAAI,IAAI,EAAQ,UAChB,EAAQ,IAAI,GAAG,SAAS,EAAa;AAEvC;;AAMJ,UAFA,GAAM,KAAK,uBAAuB,IAE9B,OAAS,OAAO;AAGlB,YAAM,IAAU,EAAa,SACzB,GACA,EACE,aAAA,GACA,SAAA,GACA,OAAA,IACA,aAAA,IACA,MAAM,eAER,MAEA;AAEJ,UAAY,UAAU,GACtB,EAAY,UAAU,EAAQ;;AAGhC,aAAO;;AA5ET;AAAS,OAAA,IAAA;AA+ET,gBAAA,GAcE,IAAA;AACA,UAbE,IAaF,EAbE,aACA,IAYF,EAZE,SACA,KAWF,EAXE,OACA,KAUF,EAVE,aACA,KASF,EATE,MAUI,KAAe,EAAY,gBAAgB,IAC3C,IAAc,EAAY,SAAS;AAGzC,UACE,OAAS,SACR,GAAY,mBAAA,CAET,KAAe,EAAY,eAAe;AAE9C,eAAO;AAeT,eAZM,IAAO,GAAS,QAAQ,KACxB,IAAY,EAChB,aAAA,GACA,SAAA,GACA,OAAA,IACA,aAAA,IACA,MAAA,IACA,MAAA,GACA,SAAS,IACT,MAAM,QAGR,IAAA,GAAA,IAAmB,EAAnB,QAAA,KAAyB;AAAA,YAAd,KAAQ,EAAM;AACvB,UAAU,OAAO,IAEjB,GAAM,KAAK,iCAAiC;;AAS9C,aANI,OAAS,UACX,GAAU,UAAU,EAAU,QAAQ,OACpC,SAAC,IAAA;AAAD,YAAA;AAAA,eAAY,GAAO,UAAU,QAAQ,iBAAzB,OAA0C,EAAY,SAAS,QAA/D,OAA+D,SAArB,GAAoC,KAAK;WAI5F,EAAU;;AArDnB;AAAS,OAAA,IAAA;AAqET,gBAAA,GAAA;AAAmD,UAA7B,KAA6B,EAA7B,aAAa,IAAgB,EAAhB,cAC3B,IAAO,GAAY,SAAS,GAAc;AAE5C,WAAQ,EAAK,WACf,cAAa,EAAK,UAClB,EAAK,UAAU;;AALnB;AAAS,OAAA,IAAA;AAKU,QAAA,KA0FJ;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AC1Sf,gBAAA,GAAA;AAAuE,UAA7C,KAA6C,EAA7C;AAGpB,SAAY,sBACd,eAAc,GAAY,qBAC1B,GAAY,qBAAqB;;AALrC;AAAS,OAAA,IAAA,OAK4B,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAIrC,QAAA,KAA2B,EACzB,IAAI,6BACJ,SAtDF,SAAkB,GAAA;AAChB,QAAM,UAAU,GAAA;AADc,UAGtB,KAAkB,EAAlB;AAGR,SAAc,SAAS,qBAAqB,GAC5C,GAAc,MAAM,aAAa,EAAM,QAAQ,eAAe,aAAA;OAgD9D,WAAW,CAAC,QAAQ,MAAM,UAAU,UAAU,OAC5C,SAAC,GAAK,IAAA;AAEJ,aADE,EAAD,iBAAA,OAA8B,OAAgB,IACxC;OAET,EACE,qBAnDN,SAAA,GAAA;AAAuE,UAArD,KAAqD,EAArD;AACZ,SAAa,SAAS,UAE1B,IAAa,QAAS,IAAa,SAAS,KAAK;OAiD7C,uBA9CN,SAAA,GAEE,IAAA;AACA,UAFE,IAEF,EAFE,aAAa,IAEf,EAFe,cAAc,KAE7B,EAF6B,aAAa,KAE1C,EAF0C;AAG1C,UAAI,EAAa,SAAS,UAAW,GAAQ,QAA7C;AAGA,YAAM,KAAW,GAAQ,GAAG,UAAU,QAAQ;AAG1C,cAAY,KAGhB,GAAY,qBAAqB,WAAW,WAAA;AAC1C,aAAM,cAAc,KAClB,EACE,aAAA,GACA,aAAA,IACA,MAAM,QACN,SAAS,GACT,OAAO,KAET;WAED;;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AClCL,gBAAkD,GAAA;AAGhD,aAFA,IAAA,EAAA,SAAO,KAAK,OAAO,SAAS,IAErB;;AAHT;AAAS,OAAA,IAAA,OAGA,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AAGT,QAAA,KAAuB,EACrB,IAAI,sCACJ,SA1BF,SAAkB,GAAA;AAAc,UACtB,KAAiB,EAAjB;AAER,SAAa,UAAU,gBAAgB;AAEvC,UAAM,IAAqB,GAAa,UAAU;AAElD,SAAa,UAAU,oBAAoB,SAAU,GAAY,IAAA;AAC/D,YAAM,KAAM,EAAmB,KAAK,MAAM,GAAY;AAMtD,eAJI,OAAQ,QACV,MAAK,OAAO,QAAQ,KAAc,KAG7B;;OAaT,WAAW,EACT,iCAAiC,SAAA,GAAuC,IAAA;AAAU,UAA9C,IAA8C,EAA9C,SAAS,IAAqC,EAArC,MAAM,KAA+B,EAA/B,MAAM,KAAyB,EAAzB;AACvD,SAAM,cAAc,aAAa,GAAM,SAAC,IAAA;AACtC,YAAM,KAAY,GAAa,QACzB,IAAU,GAAU;AAGxB,WAAU,MAAM,OAChB,GAAU,MAAM,IAAM,UACtB,GAAa,gBAAgB,GAAS,GAAM,OAE5C,EAAQ,KAAK,EACX,MAAA,GACA,WAAA,IACA,OAAO,EAAE,cAAA;;OAMjB,oBAAoB,SAAA,GAAA;AAAsB,UAAnB,KAAmB,EAAnB;AACrB,SAAa,OAAO,UAAU,SAAU,GAAA;AACtC,eAAO,GAAa,QAAQ;;OAIhC,oBAAoB,SAAA,GAA4B,IAAA;AAAU,UAAnC,IAAmC,EAAnC,cAAc,IAAqB,EAArB;AACnC,MAAA,IAAA,EAAA,SAAO,EAAa,OAAO,SAAS,GAAM,cAAc,WACxD,IAAA,EAAA,SAAO,EAAa,OAAO,SAAS,EAAQ,iBAAiB;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AAAA,WAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA;AC7DnE,QAAA,KAAuB,EACrB,IAAI,kBACJ,SAFqB,SAEZ,GAAA;AACP,QAAM,UAAU,KAChB,EAAM,UAAU,GAAA,UAChB,EAAM,UAAU,GAAA;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA;AC0Bb,gBAAkB,GAAA;AAAc,UAGnC,KACE,EADF;AAGF,QAAM,QAAQ,OAAO,SAAA,MAkBrB,GAAa,UAAU,SAAS,SAAU,GAAA;AACxC,eAIJ,SACE,GACA,IACA,IAAA;AAUA,mBARM,KAAY,GAAA,QAAG,OAAO,EAAa,UACrC,GAAI,KAAK,EAAa,SAAS,iBAAiB,EAAa,WAC7D,CAAC,EAAa,SAGZ,KAAW,GAAM,OAAe,SAChC,IAAwC,KAAU,KAAK,MAPtC,IAAA,WAAA;AAAA,gBASZ,IAAW,GATC,IAUf,KAAO,EAAa,QAAQ;AAElC,gBAAA,CAAK;AACH,qBAAA;AAGF,gBAAM,KAAqB,GAAI,KAAK,GAAM,aAAa,MAAM,SAAC,IAAA;AAC5D,qBACE,GAAY,iBACZ,GAAY,iBAAiB,KAC7B,GAAY,YAAY,KACxB,GAAY,SAAS,SAAS,GAAO;gBAGrC,KAAA;AAEJ,gBAAI;AACF,iBAAmB,QAEf,KACF,MACE,GAAmB,kBACnB,IAAI,GAAQ,SAAC,IAAA;AACX,mBAAmB,iBAAiB;;iBAGrC;AACL,kBAAM,IAAO,IAAA,GAAA,YAAW,KAClB,IAAS,EACb,MAAM,EAAE,GAAG,EAAK,GAAG,GAAG,EAAK,KAC3B,QAAQ,EAAE,GAAG,EAAK,GAAG,GAAG,EAAK,KAC7B,WAAW,GAAM,SAGb,KAAQ,EAAa,cAAc;AACzC,mBAWN,SACE,IACA,IACA,IACA,IACA,IAAA;AAEA,oBAAM,KAAc,GAAM,aAAa,IAAI,EAAE,aAAa,aACpD,KAAY,EAChB,aAAA,IACA,OAAA,IACA,SAAS,IACT,aAAa,IACb,OAAO;AAGT,mBAAY,eAAe,IAC3B,GAAY,UAAU,IACtB,GAAY,YAAY,IACxB,GAAY,cAAc,IAAO,IAAO,IAAA,OACxC,EAAa,cAAc,GAAY,OAAO,QAE9C,IAAA,GAAA,YAAW,GAAY,UAAU,KACjC,GAAY,SAAS;AAjBrB,oBAmBQ,KAAa,GAAM,OAAnB,SACF,KAAgB,KAClB,IAAI,GAAmB,SAAC,IAAA;AACxB,qBAAY,iBAAiB;qBAAA;AAiBjC,uBAbA,GAAY,iBAAiB,IAC7B,GAAY,MAAM,IAAQ,IAAc,KAEpC,GAAY,eACd,IAAY,KAAK,KACjB,GAAY,IAAI,OAEhB,IAAY,QACZ,GAAY,mBAGd,GAAY,cAAc,IAAO,KAE1B;gBAxD4B,IAAO,GAAc,GAAS,IAAQ;;AAGnE,iBACF,EAAS,KAAK;aAxClB,IAAA,GAAA,IAAsB,GAAtB,UAAgC,QAAA,SAAhC;AAAA;AA4CA,iBAAO,KAAY,GAAQ,IAAI,GAAU,KAAK,WAAA;AAAA,mBAAM;;UA7DlC,MAAM,GAAQ;;;AAzB3B;AAAS,OAAA,IAAA,OAyBkB,OAAA,eAAA,IAAA,cAAA,EAAA,OAAA,SAAA,GAAA,UAAA,IAAA,GAAA,UAAA;AAgHlC,QAAA,KAAuB,EACrB,IAAI,UACJ,SAAA,IACA,WAAW,EAET,qBAAqB,SAAA,GAAkB,IAAA;AAAU,UAAzB,IAAyB,EAAzB;AAClB,QAAY,gBAAgB,YAC1B,GAAY,kBACd,EAAY,kBAGd,GAAI,OAAO,GAAM,aAAa,MAAM;;AAAA,OAAA,UAAA;AAAA,QAAA,KAAA,EAAA,SAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,GAAA,SAAA,cAAA,EAAA,OAAA,SAAA,GAAA,QAAA,UAAA,QC7K5C,GAAA,QAAS,IAAI,GAAA,UAEb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA,UAGb,GAAA,QAAS,IAAI,GAAA;AAAA,QAAA,KAOE,GAAA;AAEf,QAAA,GAAA,QAAA,UAAA,IAAI,GAAO,QAAW,YAAc;AAClC,UAAA;AACE,WAAA,UAAiB,GAAA;eACjB,GADiB;;AAInB,OAAA,QAAiB,UAAU,GAAA,SAAA,KAAA,GAAA;AAAA,QAAA,KAAA,EAAA,SAAA;AAAA,gBAAA,GAAA;AAAA,aAAA,MAAA,OAAA,UAAA,cAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,eAAA,OAAA;UAAA,SAAA,IAAA;AAAA,eAAA,MAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;SAAA;;AAAA;AAAA,OAAA,IAAA,OAAA,OAAA,eAAA,GAAA,SAAA,cAAA,EAAA,OAAA,SAAA,GAAA,QAAA,UAAA;AAAA,QAAA,KC/Cd,GAAA;AAEf,QAAA,GAAA,QAAA,UAAA,IAAI,GAAO,QAAW,YAAc;AAClC,UAAA;AACE,WAAA,UAAiB,GAAA;eACjB,GADiB;;ACNrB,WDUE,GAAA,QAAiB,UAAU,GAAA,SCX7B,GAAA;;;ACSO,YACL,GACmC;AACnC,kBAAqC,EAAK;QACpC,SAAkB;AACpB,aAAO,KAAK,aAAa;;QAGvB,OAAO,GAAgB;AACrB,UACF,KAAK,aAEL,KAAK;;IAIT,WAAW;AACT,WAAK,aAAa,eAAe,KACjC,KAAK,cAAc,IAAI,MAAM,oBAAoB,EAAC,SAAS;;IAG7D,aAAa;AACX,WAAK,gBAAgB;;;AAnBzB;AAAA,SAAA,GAAA,GAAA,2BAuBO;;AA1BF;AAAS,GAAA,IAAA;ACThB,IAAM,KAAc,oBAAI;AAMlB,YAAe,GAAuB;AAC1C,KAAY,IAAI,IACZ,EAAW,cAAY,GAAW,EAAW,aACjD,GAAa,IACb,GAAc,EAAW;;AAJrB;AAAU,GAAA,IAAA;AAOV,YAAqB,GAAgB;AACzC,KAAa,IACb,GAAc;;AAFV;AAAU,GAAA,IAAA;AAKhB,IAAM,KAAY,oBAAI;AAQhB,YAAwB,IAAW,UAAQ;AAC/C,MAAI,GAAU,IAAI;AAAK,WAAO,GAAU,IAAI;AAC5C,MAAI,IAAS,OACP,IAAW,IAAI,iBAAiB,OAAY;AAChD,aAAW,MAAY;AACrB,UAAI,GAAS,SAAS,gBAAgB,GAAS,kBAAkB;AAC/D,WAAY,GAAS;eACZ,GAAS,SAAS,eAAe,GAAS,WAAW;AAC9D,iBAAW,MAAQ,GAAS;AACtB,wBAAgB,WAClB,GAAa;;AAMvB,IAAS,QAAQ,GAAI,EAAC,WAAW,MAAM,SAAS,MAAM,iBAAiB,CAAC;AACxE,MAAM,IAAe,MACf,SAAM;AACR,WAAO;KAET,cAAW;AACT,QAAS,MACT,GAAU,OAAO,IACjB,EAAS;;AAGb,SAAA,GAAU,IAAI,GAAI,IACX;;AA5BH;AAAU,GAAA,IAAA;AAoChB,YAAsB,GAA0B;AAC9C,WAAW,KAAM,EAAK,iBAAiB;AACrC,OAAY;AAGV,eAAgB,WAAW,EAAK,aAAa,kBAC/C,GAAY;;AANhB;AAAS,GAAA,IAAA;AAWT,YAAqB,GAAY;AAC/B,MAAM,IAAK,EAAM;AACjB,WAAW,KAAW,GAAS;AAC7B,QAAI,EAAM,SAAS,EAAQ,MAAM;AAE/B,UAAM,IAAa,EAAG,QAAyB,EAAQ;AACnD,SAAY,IAAI,MAAe,OAAO,EAAW,EAAQ,WAAY,cACvE,EAAW,EAAQ,QAAQ;AAE7B,UAAM,IAAO,EAAG;AAChB,UAAI,aAAgB,cAAc,GAAY,IAAI,EAAK,SAAS,EAAK,KAAK,QAAQ,EAAQ,MAAM;AAC9F,YAAM,KAAmB,EAAK;AAC1B,eAAO,GAAiB,EAAQ,WAAY,cAC9C,GAAiB,EAAQ,QAAQ;;;;AAb3C;AAAS,GAAA,IAAA;AAqBT,aAAmB,GAAW;AAC5B,WAAW,KAAW,GAAG,aAAa,kBAAkB,IAAI,OAAO,MAAM,QAAQ;AAC/E,QAAM,IAAW,EAAO,YAAY,MAC9B,IAAY,KAAK,IAAI,GAAG,EAAO,YAAY,SAAS,EAAO;AACjE,UAAM,EACJ,MAAM,EAAO,MAAM,GAAG,IACtB,KAAK,EAAO,MAAM,IAAW,GAAG,IAChC,QAAQ,EAAO,MAAM,IAAY,MAAM;;;AAP7C;AAAU,GAAA,IAAA;AAYV,YAAqB,GAAW;AAC9B,WAAW,KAAW,GAAS;AAC7B,MAAG,iBAAiB,EAAQ,MAAM;;AAFtC;AAAS,GAAA,IAAA;ACjGH,YAAmB,GAA0B;AACjD,MAAM,IAAO,EAAY,KACtB,QAAQ,qBAAqB,OAC7B,QAAQ,mBAAmB,IAC3B;AACE,SAAO,eAAe,IAAI,MAG7B,QAAO,EAAY,QAAQ,GAC3B,OAAO,eAAe,OAAO,GAAM;;AATjC;AAAU,GAAA,IAAA;ACGV,YAAqB,GAAyB,GAAY;AAC9D,MAAM,IAAM,EAAW,QAAQ;AAC/B,MAAI,EAAW,YAAA;AACb,aAAW,KAAM,EAAW,WAAW,iBAAiB,kBAAkB,KAAO;AAC/E,UAAI,CAAC,EAAG,QAAQ;AAAM,eAAO;;AAGjC,WAAW,KAAM,EAAW,iBAAiB,kBAAkB,KAAO;AACpE,QAAI,EAAG,QAAQ,OAAS;AAAY,aAAO;;AARzC;AAAU,GAAA,IAAA;AAYV,YAAsB,GAAyB,GAAY;AAC/D,MAAM,IAAM,EAAW,QAAQ,eACzB,IAAU;AAChB,MAAI,EAAW;AACb,aAAW,KAAM,EAAW,WAAW,iBAAiB,mBAAmB,KAAO;AAC3E,QAAG,QAAQ,MAAM,EAAQ,KAAK;AAGvC,WAAW,KAAM,EAAW,iBAAiB,mBAAmB,KAAO;AACjE,MAAG,QAAQ,OAAS,KAAY,EAAQ,KAAK;AAEnD,SAAO;;AAXH;AAAU,GAAA,IAAA;ACfV,YAAmC,GAA2B,GAAM;AACxE,SAAO,eAAe,GAAO,GAAK,EAChC,cAAc,MACd,MAAG;AACD,WAAO,GAAW,MAAM;;;AAJxB;AAAU,GAAA,IAAA;AAgBV,YAAoC,GAA2B,GAAM;AACzE,SAAO,eAAe,GAAO,GAAK,EAChC,cAAc,MACd,MAAG;AACD,WAAO,GAAY,MAAM;;;AAJzB;AAAU,GAAA,IAAA;ACzBV,YAAyB,GAAoB;AACjD,WAAW,KAAY,EAAQ,iBAAsC;AAC/D,MAAS,kBAAkB,KAC7B,EACG,aAAa,EACZ,MAAM,EAAS,aAAa,uBAAuB,WAAW,WAAW,UAE1E,OAAO,EAAS,QAAQ,UAAU;;AAPrC;AAAU,GAAA,IAAA;ACEhB,IAAM,KAAQ,oBAAI;AAUZ,WAAiC,GAA6B,GAAM;AACnE,KAAM,IAAI,MAAQ,GAAM,IAAI,GAAO,KACxC,GAAM,IAAI,GAAQ,KAAK;;AAFnB;AAAU,GAAA,GAAA;AAwBhB,IAAM,KAAc,oBAAI;AAClB,YAA0B,GAAuB,GAAwB;AAC7E,MAAI,CAAA,GAAY,IAAI,IACpB;AAAA,OAAY,IAAI,IACX,KAAO,KAAQ,GAAa,OAAO,eAAe;AACvD,aAAW,KAAO,GAAO;AACvB,UAAM,IAAiD,EAAW,IAC5D,IAAO,GAAoB,IAC7B,KAAiC,EACnC,cAAc,MACd,MAAG;AACD,eAAO,KAAK,aAAa,MAAS;SAEpC,IAAuB,IAAgB;AACrC,aAAK,aAAa,GAAM,MAAY;;AAGpC,aAAO,KAAU,WACnB,KAAa,EACX,cAAc,MACd,MAAG;AACD,eAAO,OAAO,KAAK,aAAa,MAAS;SAE3C,IAAuB,IAAgB;AACrC,aAAK,aAAa,GAAM;YAGnB,OAAO,KAAU,aAC1B,MAAa,EACX,cAAc,MACd,MAAG;AACD,eAAO,KAAK,aAAa;SAE3B,IAAuB,IAAiB;AACtC,aAAK,gBAAgB,GAAM;YAIjC,OAAO,eAAe,GAAU,GAAK,KACjC,KAAO,KAAY,CAAC,EAAS,aAAa,MAC5C,GAAW,IAAK,KAAK,GAAU;;;;AAvC/B;AAAU,GAAA,IAAA;AA4ChB,YAAsB,GAA8C;AAClE,MAAM,IAAqB,oBAAI,OAC3B,IAA2D;AAE/D,SAAO,KAAS,MAAU,eAAa;AACrC,QAAM,IAAY,GAAM,IAAkC,MAAU;AACpE,aAAW,KAAQ;AAAW,QAAM,IAAI;AACxC,QAAQ,OAAO,eAAe;;AAGhC,SAAO;;AAVT;AAAS,GAAA,IAAA;AAaT,YAA6B,GAAY;AACvC,SAAO,QAAQ,EAAK,QAAQ,qBAAqB,SAAS,QAAQ,OAAO,KAAK;;AADhF;AAAS,GAAA,IAAA;AAIH,YAAmC,GAA0B;AACjE,MAAI,IAAW,EAAY,sBAAsB;AACjD,SAAO,eAAe,GAAa,sBAAsB,EACvD,cAAc,MACd,MAAG;AAED,WAAO,CAAC,GADQ,GAAa,EAAY,YACrB,IAAI,IAAqB,OAAO;KAEtD,IAAI,GAAoB;AACtB,QAAW;;;AATX;AAAU,GAAA,IAAA;AC5FhB,IAAM,KAAY,oBAAI;AAEhB,YAA6B,GAAuB,GAAqC;AAC7F,IAAS,gBAAgB,iBAAiB,OAC1C,eAAe,QAAQ,IACvB,GAAU,IAAI,IACd,GAAe,IACf,GAAgB,IAChB,GAAK,IACD,KAAS,EAAQ,KAAK,IACtB,EAAS,cAAY,GAAW,EAAS;;AARzC;AAAU,GAAA,IAAA;AAWV,YACJ,GACA,GACA,GACA,GACA,GAA0G;AAE1G,KAAgB,IACZ,MAAS,mBAAmB,KAC9B,EAAyB,KAAK,GAAU,GAAM,GAAU;;AATtD;AAAU,GAAA,IAAA;AAaV,YAA0B,GAA0B;AACxD,KAAyB,IACzB,GAAS;;AAFL;AAAU,GAAA,IAAA;ACxBV,YAAqB,GAA0B;AACnD,MAAM,IAAU,EAAY,UAAU;AACtC,IAAY,UAAU,oBAAoB,WAAA;AACxC,OAAmB,MAAM;;AAE3B,MAAM,IAAmB,EAAY,UAAU;AAC/C,IAAY,UAAU,2BAA2B,SAE/C,GACA,GACA,IAAiB;AAEjB,OAA2B,MAAM,GAAM,GAAU,IAAU;KAE7D,GAAgB;;AAdZ;AAAU,GAAA,IAAA;ACET,IAAM,KAAc,GAAC,OAC1B,OAAO,KAAQ,YACf,MAAQ,QACR,OAAQ,EAAkB,SAAU,YACpC,OAAQ,EAAkB,gBAAiB,UAJlB;AAMpB,YAAgE,GAA6C;AAClH,kBAAkC,EAAK;IAAvC,cAjBF;AAiBE,YAAA,GAAA;AACQ,WAAA,QAAQ;AACR,WAAA,eAAe;;;AAFvB;AAAA,SAAA,GAAA,GAAA,wBACQ,EAAA,CAAL,IADH,EACQ,WAAA,SAAA,IACA,EAAA,CAAL,IAFH,EAEQ,WAAA,gBAAA,IAGD;;AANF;AAAS,GAAA,IAAA;ACRT,IAAM,KAAiB,GAAC,OAC7B,OAAO,KAAQ,YAAY,MAAQ,QAAQ,OAAQ,EAAqB,YAAa,UADzD;AAGvB,YACL,GACmC;AACnC,kBAAqC,EAAK;QACpC,SAAS,GAAoB;AAC/B,WAAK,aAAa,iBAAiB,EAAS,OAAO;;QAGjD,WAAqB;AACvB,UAAM,IAAe,KAAK,aAAa;AACvC,aAAI,MAAiB,OAAa,KAC9B,MAAiB,KAAW,KAEzB,EACJ,MAAM,KACN,IAAI,OAAQ,SAAS,IACrB;;QAGD,eAAwB;AAC1B,aAAO,KAAK,SAAS,SAAS;;;AAjBlC;AAAA,SAAA,GAAA,GAAA,2BAqBO;;AAxBF;AAAS,GAAA,IAAA;ACGT,YACL,GACkC;AAClC,kBAAoC,EAAK;IAAzC,cAjBF;AAiBE,YAAA,GAAA;AACQ,WAAA,WAAW;;QAEb,UAAmB;AACrB,aAAO,CAAC,KAAK;;IAGf,SAAe;AACb,WAAK,WAAW;;IAGlB,UAAgB;AACd,WAAK,WAAW;;;AAZpB;AAAA,SAAA,GAAA,GAAA,0BACQ,EAAA,CAAL,IADH,EACQ,WAAA,YAAA,IAeD;;AAnBF;AAAS,GAAA,IAAA;ACChB,IAAI,IAAW,GAAA,WAAW;AACtB,SAAA,IAAW,OAAO,UAAU,GAAA,SAAkB,GAAG;AAC7C,aAAS,GAAG,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AACjD,UAAI,UAAU;AACd,eAAS,MAAK;AAAO,eAAO,UAAU,eAAe,KAAK,GAAG,OAAI,GAAE,MAAK,EAAE;;AAE9E,WAAO;KALiB,aAOrB,EAAS,MAAM,MAAM;GARjB;AAWf,YAAgB,GAAG,GAAG;AAClB,MAAI,IAAI;AACR,WAAS,KAAK;AAAO,WAAO,UAAU,eAAe,KAAK,GAAG,MAAM,EAAE,QAAQ,KAAK,KAC9E,GAAE,KAAK,EAAE;AACb,MAAI,KAAK,QAAQ,OAAO,OAAO,yBAA0B;AACrD,aAAS,IAAI,GAAG,IAAI,OAAO,sBAAsB,IAAI,IAAI,EAAE,QAAQ;AAC3D,QAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,UAAU,qBAAqB,KAAK,GAAG,EAAE,OACvE,GAAE,EAAE,MAAM,EAAE,EAAE;AAE1B,SAAO;;AATX;AAAS,GAAA,IAAA;AAYT,YAAkB,GAAG;AACjB,MAAI,IAAI,OAAO,UAAW,cAAc,OAAO,UAAU,IAAI,KAAK,EAAE,IAAI,IAAI;AAC5E,MAAI;AAAG,WAAO,EAAE,KAAK;AACrB,MAAI,KAAK,OAAO,EAAE,UAAW;AAAU,WAAO,EAC1C,MAAM,WAAY;AACd,aAAI,KAAK,KAAK,EAAE,UAAQ,KAAI,SACrB,EAAE,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;;AAG5C,QAAM,IAAI,UAAU,IAAI,4BAA4B;;AATxD;AAAS,GAAA,IAAA;AAYT,YAAgB,GAAG,GAAG;AAClB,MAAI,IAAI,OAAO,UAAW,cAAc,EAAE,OAAO;AACjD,MAAI,CAAC;AAAG,WAAO;AACf,MAAI,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,IAAI;AAC/B,MAAI;AACA,WAAQ,OAAM,UAAU,MAAM,MAAM,CAAE,KAAI,EAAE,QAAQ;AAAM,SAAG,KAAK,EAAE;WAEjE,GAFiE;AAExD,SAAI,EAAE,OAAO;YAAA;AAEzB,QAAI;AACI,WAAK,CAAC,EAAE,QAAS,KAAI,EAAE,WAAY,EAAE,KAAK;cAAA;AAExC,UAAI;AAAG,cAAM,GAAE;;;AAE7B,SAAO;;AAdX;AAAS,GAAA,IAAA;AAiBT,YAAuB,GAAI,GAAM,GAAM;AACnC,MAAI,KAAQ,UAAU,WAAW;AAAG,aAAS,IAAI,GAAG,IAAI,EAAK,QAAQ,IAAI,IAAI,GAAG;AACxE,MAAA,OAAM,CAAE,MAAK,OACR,OAAI,MAAK,MAAM,UAAU,MAAM,KAAK,GAAM,GAAG,KAClD,GAAG,KAAK,EAAK;AAGrB,SAAO,EAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAK;;AAPtD;AAAS,GAAA,IAAA;ACnET,IAAI;AAEH,AAAA,UAAU,GAAa;AACtB,IAAY,QAAW,gBACvB,EAAY,OAAU,eACtB,EAAY,QAAW,gBACvB,EAAY,OAAU,eACtB,EAAY,SAAY,iBACxB,EAAY,YAAe,IAC3B,EAAY,SAAY,iBACxB,EAAY,QAAW,gBACvB,EAAY,YAAe,cAC3B,EAAY,aAAgB,eAC5B,EAAY,MAAS,cACrB,EAAY,OAAU,eACtB,EAAY,SAAY,iBACxB,EAAY,iBAAoB,mBAChC,EAAY,qBAAwB,uBACpC,EAAY,gBAAmB,kBAC/B,EAAY,cAAiB,gBAC7B,EAAY,SAAY,iBACxB,EAAY,OAAU,eACtB,EAAY,SAAY;GACvB,MAAgB,MAAc;AAEjC,IAAI;AAEH,AAAA,UAAU,GAAgB;AACzB,IAAe,SAAY,YAC3B,EAAe,WAAc;GAC5B,MAAmB,MAAiB;AC5BvC,IAAI,KAAQ,GAAY;AAAxB,IACI,KAAO,GAAY;AADvB,IAEI,KAAQ,GAAY;AAFxB,IAGI,KAAO,GAAY;AAHvB,IAII,KAAS,GAAY;AAJzB,IAKI,KAAY,GAAY;AAL5B,IAMI,KAAS,GAAY;AANzB,IAOI,KAAQ,GAAY;AAPxB,IAQI,KAAY,GAAY;AAR5B,IASI,KAAM,GAAY;AATtB,IAUI,KAAO,GAAY;AAVvB,IAWI,KAAS,GAAY;AAXzB,IAYI,KAAiB,GAAY;AAZjC,IAaI,KAAgB,GAAY;AAbhC,IAcI,KAAQ,GAAY;AAdxB,IAeI,KAAS,GAAY;AAfzB,IAgBI,KAAS,GAAY;AAhBzB,IAiBI,KAAO,GAAY;ACnBvB,IAAI,KAAkB;AAAtB,IACI,KAAqB;AADzB,IAEI,KAAqB;AAFzB,IAGI,KAAiB;ACHrB,IAAI,KAAgB;ACIpB,IAAI;AAIJ,YAAsB,GAAe,GAAc,GAAW;AACxD,QAAc,UAChB,KAAY;AAGd,MAAI,IAAmB,GAAa,GAAe,IAC/C,IAAkB,GAAa,GAAc;AAEjD,SAAI,GAAS,KACP,GAAS,KACJ,MAAoB,IAItB,QAGL,GAAS,KACJ,KAAoB,IAGtB,OAAO,KAAK,GAAkB,MAAM,SAAU,IAAK;AACxD,WAAM,MAAO,IAIN,GAAa,EAAiB,KAAM,EAAgB,OAHlD;;;AAvBb;AAAS,GAAA,IAAA;AA6BT,YAAsB,GAAO;AAC3B,MAAI;AACF,WAAO,GAAS,MAAU,OAAO,KAAU,WAAW,GAAG,OAAO,KAAS,EAAM;WACxE,GADwE;AAE/E,UAAM,IAAI,MAAM;;;AAJpB;AAAS,GAAA,IAAA;AAcT,YAAqB,GAAS,GAAW;AACvC,MAAI;AACF,WAAI,GAAQ,KACH,IAGF,EAAQ,WAAW,MAAM;WACzB,GADyB;AAEhC,UAAM,IAAI,MAAM,IAAI,OAAO,GAAS;;;AARxC;AAAS,GAAA,IAAA;AAWT,YAAqB,GAAO;AAC1B,SAAO,OAAO,KAAU,YAAY,WAAW,KAAS,aAAa,KAAS,WAAW,KAAS,YAAY;;AADhH;AAAS,GAAA,IAAA;AAGT,YAAsB,GAAY,GAAW;AAC3C,MAAI,GAAY;AACd,WAAO,EAAW;AAGpB,MAAI,GAAQ;AACV,WAAO,GAAiB;AAG1B,MAAI,OAAO,KAAe;AACxB,WAAO;AAGT,MAAI,IAAY,GAAY,GAAY;AACxC,SAAO,GAAiB;;AAd1B;AAAS,GAAA,IAAA;AAgBT,YAA0B,GAAW;AACnC,MAAI,EAAU,WAAW;AACvB,WAAO,EAAU;AAMnB,WAHI,IAAQ,IACR,IAAS,GAEJ,IAAI,GAAG,IAAI,EAAU,SAAS,GAAG;AACpC,UAAM,EAAU,SAAS,IAC3B,EAAO,EAAU,MAAM,EAAU,IAAI,KAErC,GAAO,EAAU,MAAM,IACvB,IAAS,EAAO,EAAU;AAI9B,SAAO;;AAjBT;AAAS,GAAA,IAAA;AAmBT,YAAmB,GAAY,GAAU;AAIvC,WAHI,IAAS,IACT,IAAiB,OAAO,KAAK,IAExB,IAAI,GAAG,IAAI,EAAe,QAAQ,KAAK;AAC9C,QAAI,KAAM,EAAe;AACzB,MAAO,MAAO,EAAS,EAAW,KAAM,IAAK,GAAY;;AAG3D,SAAO;;AATT;AAAS,GAAA,IAAA;AAWT,YAAyB,GAAY,GAAU,GAAW;AACxD,MAAI,GAAK,GAEL,KAAS;AAEb,MAAI;AACF,aAAS,KAAK,GAAS,OAAO,KAAK,KAAc,IAAK,GAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,GAAG,QAAQ;AACzF,UAAI,IAAM,EAAG,OACT,IAAO,EAAW;AAElB,OAAC,EAAU,MAIf,IAAO,KAAO,EAAS,GAAM,GAAK;;WAE7B,IAF6B;AAGpC,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,WAAM,CAAC,EAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;cAAA;AAEhD,UAAI;AAAK,cAAM,EAAI;;;AAIvB,SAAO;;AA5BT;AAAS,GAAA,IAAA;AAmCT,IAAI,KAAO,GAAA,SAAU,GAAO;AAC1B,SAAO,SAAU,GAAQ;AACvB,QAAI,GAAK,GAEL,IAAS;AAEb,QAAI;AACF,eAAS,KAAU,GAAS,IAAQ,KAAY,GAAQ,QAAQ,CAAC,GAAU,MAAM,KAAY,GAAQ,QAAQ;AAC3G,YAAI,IAAO,GAAU;AACrB,YAAS,EAAO;;aAEX,GAFW;AAGlB,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAa,CAAC,GAAU,QAAS,KAAK,GAAQ,WAAS,EAAG,KAAK;gBAAA;AAEnE,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,WAAO;;GAvBA;AA+BX,YAAoB,GAAO,GAAc;AACvC,SAAO,SAAU,GAAQ;AACvB,QAAI,GAAK,GAEL,KAAS;AAEb,QAAI;AACF,eAAS,KAAU,GAAS,IAAQ,IAAY,GAAQ,QAAQ,CAAC,EAAU,MAAM,IAAY,GAAQ,QAAQ;AAC3G,YAAI,IAAO,EAAU;AACrB,aAAS,GAAO,GAAc;;aAEzB,GAFyB;AAGhC,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAa,CAAC,EAAU,QAAS,KAAK,GAAQ,WAAS,EAAG,KAAK;gBAAA;AAEnE,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,WAAO;;;AAvBX;AAAS,GAAA,IAAA;AA0BT,YAAsB,GAAY;AAChC,MAAI,CAAC;AACH,WAAO,CAAC;AAGV,MAAI,GAAS;AACX,WAAO,CAAC,CAAC;AAGX,MAAI,IAAS,GAAQ,OAAO,KAAK,GAAY,IAAI,SAAU,GAAK;AAC9D,QAAI,IAAgB,EAAW;AAE/B,WAAI,OAAO,KAAkB,YAAa,EAAC,KAAiB,CAAC,OAAO,KAAK,GAAe,UAC/E,CAAC,CAAC,MAGJ,GAAa,EAAW,IAAM,IAAI,SAAU,GAAS;AAC1D,aAAO,CAAC,GAAK,OAAO;;;AAGxB,SAAO;;AApBT;AAAS,GAAA,IAAA;AA8DT,YAAiB,GAAO;AACtB,MAAI;AAEJ,SAAQ,KAAK,IAAI,OAAO,MAAM,GAAI,GAAc,IAAI,GAAO,IAAQ;;AAHrE;AAAS,GAAA,IAAA;AAKT,YAAuB,GAAO;AAC5B,SAAI,GAAQ,KACH,IAGF,CAAC;;AALV;AAAS,GAAA,IAAA;AAOT,YAAiB,GAAO;AACtB,SAAI,MAAU,SACL,KAGF,GAAc;;AALvB;AAAS,GAAA,IAAA;AAOT,YAAoB,GAAQ,GAAS,GAAQ;AAC3C,MAAI,GAAK;AAET,MAAI,GAAW;AACb,WAAO,EAAO,GAAS,EAAO;AAGhC,MAAI,KAAS;AAEb,MAAI;AACF,aAAS,KAAK,GAAS,OAAO,KAAK,KAAU,IAAK,GAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,GAAG,QAAQ;AACrF,UAAI,IAAM,EAAG,OACT,IAAY,EAAO;AAEnB,SAAW,KACb,GAAO,KAAO,EAAU,GAAS,EAAO,QAExC,GAAO,KAAO;;WAGX,IAHW;AAIlB,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,WAAM,CAAC,EAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;cAAA;AAEhD,UAAI;AAAK,cAAM,EAAI;;;AAIvB,SAAO;;AAhCT;AAAS,GAAA,IAAA;AAkCT,YAAwB,GAAW;AACjC,SAAO,kBAAkB,KAAK;;AADhC;AAAS,GAAA,IAAA;AAGT,YAAuB,GAAO;AAM5B,SALI,CAAA,CAAA,cAAiB,WAKjB,MAAU,QAAS,IAAW,MAAU,OAAO,KAAU,aAAa,GAAW,EAAM;;AAN7F;AAAS,GAAA,IAAA;AAYT,YAAoB,GAAO;AACzB,SAAO,MAAU,QAAQ,OAAO,KAAU,YAAY,gBAAgB,KAAS,OAAO,EAAM,cAAe;;AAD7G;AAAS,GAAA,IAAA;AAGT,YAAmB,GAAO,GAAW;AACnC,MAAI,GAAK,GAEL,IAAK,GAAO,CAAC,IAAI,KAAK,IACtB,KAAS,EAAG,IACZ,KAAQ,EAAG;AAEf,MAAI;AACF,aAAS,IAAU,GAAS,IAAQ,IAAY,EAAQ,QAAQ,CAAC,EAAU,MAAM,IAAY,EAAQ,QAAQ;AAC3G,UAAI,IAAO,EAAU;AAEjB,QAAU,KACZ,GAAO,KAAK,KAEZ,GAAM,KAAK;;WAGR,IAHQ;AAIf,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,WAAa,CAAC,EAAU,QAAS,KAAK,EAAQ,WAAS,EAAG,KAAK;cAAA;AAEnE,UAAI;AAAK,cAAM,EAAI;;;AAIvB,SAAO,CAAC,IAAQ;;AA7BlB;AAAS,GAAA,IAAA;AA+BT,YAA6B,GAAM,GAAY;AAC7C,SAAO,GAAU,EAAK,QAAQ,SAAU,GAAS,GAAK;AACpD,QAAI,CAAA,CAAC,GAIL;AAAA,UAAI,IAAiB,IAAS,KAAc,SAAY,EAAW,OAAU,KAAU,EAAQ,UAAU;AAEzG,UAAI,CAAA,CAAC;AAIL,eAAO,EACL,SAAS,GACT,QAAQ,GAAoB,GAAS;;;;AAd3C;AAAS,GAAA,IAAA;AAkBT,YAA4B,GAAM,GAAY;AAC5C,SAAO,EACL,SAAS,GACT,QAAQ,GAAoB,GAAM;;AAHtC;AAAS,GAAA,IAAA;AAMT,YAAuB,GAAS,GAAQ,GAAe,GAAO;AACvD,QACH,GAAK,CAAC,CAAC,GAAS;AAGlB,MAAI,IAAiB,KAAU,EAAc,OAAO,SAAU,IAAK,IAAc;AAC/E,QAAI,GAAK,GAEL,IAAa,GAAa,YAC1B,KAAO,EACT,OAAO,GACP,QAAQ,IACR,QAAQ,KAEN,KAAgB;AAEpB,QAAI,GAAW;AACb,WAAgB,EAAW,IAAK,EAAO,MAAM;;AAE7C,UAAI;AACF,iBAAS,KAAK,GAAS,OAAO,KAAK,KAAc,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AACzF,cAAI,KAAM,GAAG,OACT,IAAiB,EAAW;AAChC,aAAc,MAAO,GAAW,KAAkB,EAAe,IAAK,EAAO,MAAM,MAAQ;;eAEtF,GAFsF;AAG7F,YAAM,EACJ,OAAO;gBAAA;AAGT,YAAI;AACE,gBAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;kBAAA;AAEhD,cAAI;AAAK,kBAAM,EAAI;;;AAKzB,WAAO,OAAO,OAAO,IAAI,IAAK;KAC7B;AACH,SAAO;;AAxCT;AAAS,GAAA,IAAA;AA2CT,IAAI,KAAO,GAAA,WAAY;GAAZ;AAEN,MACH,MAAO,GAAA,SAAU,GAAW,GAAS;AACnC,MAAI,IAAQ,aAAqB,QAAQ,IAAY;AAErD,MAAI,CAAA,EAAC,KAAS,MAIV,YAAY,QAAW;AACzB,QAAI,IAAO,CAAC,YAAY,OAAO;AAE3B,SACF,EAAK,KAAK,IAIZ,QAAQ,KAAK,MAAM,SAAS;;GAfzB;AAmBT,YAAiB,GAAO;AACtB,SAAO,MAAM,QAAQ;;AADvB;AAAS,GAAA,IAAA;AAIT,YAAoB,GAAO;AACzB,SAAO,OAAO,KAAU;;AAD1B;AAAS,GAAA,IAAA;AAGT,YAAkB,GAAO;AACvB,SAAO,OAAO,KAAU;;AAD1B;AAAS,GAAA,IAAA;AAGT,YAAiB,GAAW,GAAU;AACpC,MAAI,CAAA,CAAC;AAIL,WAAI,GAAS,KACJ,EACL,MAAM,IACN,MAAM,GACN,WAAW,IAAW,EAAS,KAAa,WAI5C,GAAW,KACN,EACL,MAAM,IACN,MAAM,EAAU,MAChB,WAAW,MAIR;;AArBT;AAAS,GAAA,IAAA;AAuBT,YAAsB,GAAO;AAC3B,MAAI;AACF,WAAO,eAAe,KAAS,GAAW,EAAM;WACzC,GADyC;AAEhD,WAAO;;;AAJX;AAAS,GAAA,IAAA;AAOT,IAAI,KAAgC,WAAY;AAC9C,SAAO,OAAO,UAAW,cAAc,OAAO,cAAc;;AAD9D,IAII,KAAkB,MAAK,IAAI,GAAG,MAAoB,WAAY;AAChE,SAAO;GACN,GAAG,OAAO,cAAc,WAAY;AACrC,SAAO;GACN;AACH,YAAmB,GAAO;AACxB,SAAO,CAAC,CAAC,KAAS,kBAAkB;;AADtC;AAAS,GAAA,IAAA;AAGT,YAAiB,GAAO;AACtB,SAAO,CAAC,CAAC,KAAS,OAAO,EAAM,QAAS;;AAD1C;AAAS,GAAA,IAAA;AAUT,YAAuB,GAAO,GAC5B;AACA,SAAI,GAAS,MAAU,OAAO,KAAU,WAC/B,EAAS,EACd,MAAM,KACL,KAGE;;AART;AAAS,GAAA,IAAA;AAUT,YAAsB,GAAO,GAAY;AACvC,MAAI,CAAC,GAAS,MAAU,YAAY,KAAS,EAAM,WAAW;AAC5D,WAAO;AAGT,MAAI,IAAc,GAAc;AAChC,SAAO,EAAS,EACd,MAAM,EAAY,MAClB,MAAM,GACN,QAAQ,SACR,MAAM,cACL;;AAXL;AAAS,GAAA,IAAA;AAaT,YAAiC,GAAO,GAAY;AAClD,MAAI,IAAc,GAAc,GAAY,IAAI,SAAU,GAAgB;AACxE,WAAI,OAAO,KAAmB,eAAe,OAAO,KAAmB,YAAY,GAAU,KACpF,EACL,QAAQ,GACR,OAAO,MAIJ,EAAS,EAAS,IAAI,IAAiB,EAC5C,OAAO;;AAGX,SAAO;;AAbT;AAAS,GAAA,IAAA;AAeT,YAAyB,GAAQ;AAC/B,MAAI,CAAA,OAAW,UAAa,MAAW;AAIvC,WAAO,GAAQ;;AALjB;AAAS,GAAA,IAAA;AAOT,YAA8C,GAAe,GAAc,GAAI;AAC7E,MAAI,CAAC,IAAe;AAClB,QAAI,IAAqB,EAAc,QAAQ,oBAAoB,OAAO,EAAc,OAAO,OAAO;AAEtG,QAAI,MAAkB;AAEpB,cAAQ,MAAM,2CAA2C,OAAO,GAAI,kBAAkB,OAAO,GAAe,MAAM,OAAO;SACpH;AACL,UAAI,IAAa,EAAa,QAAQ,oBAAoB,OAAO,EAAa,OAAO,OAAO;AAE5F,cAAQ,MAAM,wFAAwF,OAAO,GAAI,SAAS,oBAAoB,OAAO,GAAe,OAAO,OAAO,GAAoB,uBAAuB,OAAO,GAAc,MAAM,OAAO;;;;AAVrQ;AAAS,GAAA,IAAA;AAcT,YAAuB,GAAS,GAAO,GAAS,GAAQ,GAAO;AAC7D,MAAI,KAAS,EAAQ,QAAQ,QACzB,KAAY,EACd,OAAO,GACP,MAAM,GACN,QAAQ;AAGV,MAAI,EAAM,SAAS;AACjB,WAAS,QAAW,OAA4B,SAAS,GAAO,EAAM,UAAU,EAAM,WAAW,GAAS,EAAO,MAAM;AAGzH,MAAI,IAAS,MAAW,OAA4B,SAAS,GAAO,EAAM;AAE1E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,UAAU,OAAO,EAAM,MAAM,qCAAqC,OAAO,EAAQ,IAAI;AAGvG,SAAO,EAAO,GAAS,EAAO,MAAM;;AAlBtC;AAAS,GAAA,IAAA;AAoBT,YAAwB,GAAK;AAC3B,SAAI,OAAO,KAAQ,WACV,EACL,MAAM,MAIH;;AAPT;AAAS,GAAA,IAAA;AAST,YAAoB,GAAa,GAAc,GAAmB;AAChE,MAAI,OAAO,KAAgB;AACzB,WAAO;AAGT,MAAI,IAAO,GAAA,WAAY;KAAZ;AAIX,SAAO,EACL,MAAM,GACN,OAAO,KAAgB,GACvB,UAAU,KAAqB;;AAZnC;AAAS,GAAA,IAAA;AAeT,YAAwB,GAAa,GAAO;AAC1C,SAAO,GAAG,OAAO,GAAa,gBAAgB,OAAO,GAAO;;AAD9D;AAAS,GAAA,IAAA;ACrmBT,IAAI,KAAyB,GAAa,EACxC,MAAM;AAER,YAA2B,GAAY,GAAmB;AACxD,SAAO,KAAoB,EAAkB,MAAe;;AAD9D;AAAS,GAAA,IAAA;AAGT,YAAwB,GAAQ,GAAmB;AACjD,MAAI;AAEJ,MAAI,GAAS,MAAW,OAAO,KAAW,UAAU;AAClD,QAAI,IAAO,GAAkB,GAAQ;AAEjC,OAAW,KACb,IAAe,EACb,MAAM,GACN,MAAM,MAEC,IACT,IAAe,IAEf,IAAe,EACb,MAAM,GACN,MAAM;aAGD,GAAW;AACpB,QAAe,EAEb,MAAM,EAAO,QAAQ,EAAO,YAC5B,MAAM;OAEH;AACL,QAAI,IAAO,GAAkB,EAAO,MAAM;AAE1C,QAAI,GAAW;AACb,UAAe,EAAS,EAAS,IAAI,IAAS,EAC5C,MAAM;aAEC,GAAM;AACf,UAAI,IAAa,EAAK,QAAQ,EAAO;AACrC,UAAe,EAAS,EAAS,EAAS,IAAI,IAAO,IAAS,EAC5D,MAAM;;AAGR,UAAe;;AAInB,SAAO;;AA1CT;AAAS,GAAA,IAAA;AA4CT,IAAI,KAAkB,GAAA,SAAU,GAAQ,GAAmB;AACzD,MAAI,CAAC;AACH,WAAO;AAGT,MAAI,IAAU,GAAQ,KAAU,IAAS,CAAC;AAC1C,SAAO,EAAQ,IAAI,SAAU,GAAW;AACtC,WAAO,GAAe,GAAW;;GAPf;AAUtB,YAA8B,GAAQ;AACpC,MAAI,IAAe,GAAe;AAClC,SAAO,EAAS,EAAS,EACvB,IAAI,GAAS,KAAU,IAAS,EAAa,MAC5C,IAAe,EAChB,MAAM,EAAa;;AALvB;AAAS,GAAA,IAAA;AAeT,YAAe,GAAO;AACpB,SAAK,GAAS,KAMP,EACL,MAAM,IACN,OAAO,MAPA,GAAK,GAAO,EACjB,IAAI,GAAe;;AAHzB;AAAS,GAAA,IAAA;AAYT,YAAsB,GAAQ;AAC5B,SAAO,EACL,MAAM,IACN,QAAQ,GAAa,EAAO;;AAHhC;AAAS,GAAA,IAAA;AAiBT,YAAc,GAAO,GAAS;AAC5B,SAAO,EACL,IAAI,IAAU,EAAQ,KAAK,QAC3B,MAAM,IACN,OAAO,GAAW,KAAS,IAAQ,GAAc,IACjD,OAAO,IAAU,EAAQ,QAAQ,QACjC,IAAI,KAAW,EAAQ,OAAO,SAAY,EAAQ,KAAK,GAAW,KAAS,EAAM,OAAO,GAAa;;AANzG;AAAS,GAAA,IAAA;AAST,YAAqB,GAAQ,GAAK,GAAQ,GAAW;AACnD,MAAI,IAAO,EACT,QAAQ,KAGN,KAAgB,GAAa,GAAW,EAAO,SAAS,EAAO,MAAM,GAAK,EAAO,MAAM,KAAQ,EAAO,QACtG;AAEJ,MAAI,GAAS,EAAO,QAAQ;AAC1B,QAAI,IAAc,KAAa,EAAU,EAAO;AAChD,SAAgB,GAAW,KAAe,EAAY,GAAK,EAAO,MAAM,KAAQ;;AAEhF,SAAgB,GAAW,EAAO,SAAS,EAAO,MAAM,GAAK,EAAO,MAAM,KAAQ,EAAO;AAG3F,MAAI,IAAiB,GAAW,EAAO,MAAM,EAAO,GAAG,GAAK,EAAO,MAAM,KAAQ,EAAO;AACxF,SAAO,EAAS,EAAS,IAAI,IAAS,EACpC,IAAI,GACJ,QAAQ,IACR,OAAO,GAAc,MACrB,OAAO;;AApBX;AAAS,GAAA,IAAA;AAmGT,IAAI,KAAa,GAAA,SAAU,GAAQ,GAAK,GAAQ;AAC9C,SAAO,EAAS,EAAS,IAAI,IAAS,EACpC,OAAO,GAAS,EAAO,QAAQ,EAAO,OAAO,EAAO,KAAK,GAAK,EAAO,MAAM,EACzE,QAAQ;GAHG;AAAjB,IAeI,KAAS,GAAA,SAAU,GAAQ;AAC7B,SAAO,EACL,MAAM,IACN,QAAQ;GAHC;AAYb,YAAe,GAAU;AACvB,MAAI,IAAc,GAAqB;AACvC,SAAO,EACL,MAAM,GAAY,OAClB,UAAU,GACV,MAAM;;AALV;AAAS,GAAA,IAAA;AAcT,YAAc,GAAU;AACtB,MAAI,IAAW,GAAW,KAAY,IAAW,GAAqB;AACtE,SAAO,EACL,MAAM,GAAY,MAClB,UAAU,GACV,MAAM;;AALV;AAAS,GAAA,IAAA;AAQT,YAAqB,GAAQ,GAAS,GAAQ;AAC5C,MAAI,IAAmB,GAAW,EAAO,YAAY,EAAO,SAAS,GAAS,EAAO,QAAQ,EAAO,UAChG,IAAmB,OAAO,KAAqB,WAAW,EAC5D,IAAI,MACF,GACA,KAAe,EACjB,MAAM,GAAY,MAClB,UAAU;AAEZ,SAAO;;AATT;AAAS,GAAA,IAAA;AAkCT,YAAe,GAAU,GAAI;AAC3B,MAAI,IAAW,IAAK,IAAI,OAAO,KAAM;AACrC,SAAO,GAAG,OAAO,GAAY,OAAO,KAAK,OAAO,GAAU,KAAK,OAAO;;AAFxE;AAAS,GAAA,IAAA;AAYT,YAAc,GAAI,GAAM;AACtB,MAAI,IAAO,GAAG,OAAO,GAAY,WAAW,KAAK,OAAO,IACpD,IAAc,EAChB,MAAM,GACN,MAAM;AAGR,SAAA,EAAY,WAAW,WAAY;AACjC,WAAO;KAGF;;AAXT;AAAS,GAAA,IAAA;AAuBT,YAAoB,GAAI,GAAM;AAC5B,MAAI,IAAO,GAAG,OAAO,GAAY,YAAY,KAAK,OAAO,IACrD,IAAc,EAChB,MAAM,GACN,MAAM;AAGR,SAAA,EAAY,WAAW,WAAY;AACjC,WAAO;KAGF;;AAXT;AAAS,GAAA,IAAA;AAaT,YAAe,GAAI,GAAM;AACvB,MAAI,IAAO,GAAG,OAAO,GAAY,eAAe,KAAK,OAAO,IACxD,IAAc,EAChB,MAAM,GACN,MAAM;AAGR,SAAA,EAAY,WAAW,WAAY;AACjC,WAAO;KAGF;;AAXT;AAAS,GAAA,IAAA;AAyDT,YAAwB,GAAS,GAAc,GAAgB,GAAQ,GAAS,IAAqB;AAC/F,SAAwB,UAC1B,MAAsB;AAGxB,MAAI,KAAK,GAAO,KAAsB,CAAC,IAAI,KAAW,GAAU,GAAS,SAAU,IAAQ;AACzF,WAAO,GAAO,SAAS;MACrB,IACA,IAAgB,GAAG,IACnB,IAAe,GAAG,IAElB,IAAiB,EAAc,SAAS,GAAc,GAAgB,GAAQ,GAAe,KAAgB,GAC7G,KAAoB,KAAsB,CAAC,KAAkB,QAC7D,KAAkB,GAAQ,EAAa,IAAI,SAAU,IAAc;AACrE,QAAI;AAEJ,YAAQ,GAAa;WACd;AACH,eAAO,GAAa;WAEjB;AACH,YAAI,KAAa,GAAY,IAAc,GAAgB,GAAQ,EAAQ,QAAQ;AAEnF,eAAK,MAEH,GAAK,CAAC,GAAS,GAAa,UAAU,OAAO,GAAW,SAAU,UAClE,4CAA4C,OAAO,GAAa,OAAO,4BAA4B,OAAO,EAAQ,IAAI,OAGjH;WAEJ;AACH,eAAO,GAAW,IAAc,GAAgB;WAE7C,IACH;AACE,YAAI,IAAe,IACf,IAAkB,MAAK,EAAa,MAAM,KAAK,SAAU,GAAW;AACtE,cAAI,KAAQ,GAAQ,EAAU,MAAM,EAAQ,QAAQ;AACpD,iBAAO,CAAC,MAAS,GAAc,GAAS,IAAO,GAAgB,GAAQ;gBACjE,QAAQ,OAAO,SAAS,SAAS,GAAG;AAE5C,YAAI,CAAC;AACH,iBAAO;AAGT,YAAI,IAAK,GAAO,GAAe,GAAS,GAAc,GAAgB,GAAQ,GAAgB,GAAQ,IAAiB,EAAQ,QAAQ,UAAU,KAAsB,IACnK,KAA4B,EAAG,IAC/B,IAA4B,EAAG;AAEnC,eAAA,IAAiB,GACjB,MAAsB,QAAgD,GAAkB,KAAK,IACtF;;WAGN,IACH;AACE,YAAI,IAAiB,GAAa,IAAI,GAAgB,EAAO;AAE7D,YAAI,CAAC;AACH,iBAAO;AAGT,YAAI,IAAK,GAAO,GAAe,GAAS,GAAc,GAAgB,GAAQ,GAAgB,GAAQ,IAAiB,EAAQ,QAAQ,UAAU,KAAsB,IACnK,IAA0B,EAAG,IAC7B,KAAkB,EAAG;AAEzB,eAAA,IAAiB,IACjB,MAAsB,QAAgD,GAAkB,KAAK,IACtF;;WAGN;AAED,eAAO,GAAY,IAAc,GAAgB;WAGhD,IACH;AACE,YAAiB,GAAc,GAAgB,GAAQ,CAAC,KAAe,IACvE,MAAsB,QAAgD,GAAkB,KAAK;AAC7F;;;AAIF,YAAI,IAAuB,GAAe,IAAc,EAAQ,QAAQ,UACpE,IAAS,EAAqB;AAElC,YAAI,KAAU,IAAmB;AAC/B,cAAI,IAAiB,GAAkB,SAAS;AAChD,cAAuB,EAAS,EAAS,IAAI,IAAuB,EAClE,MAAM,SAAU,GAAM;AAGpB,qBAFI,KAAO,IAEF,KAAK,GAAG,KAAK,UAAU,QAAQ;AACtC,iBAAK,KAAK,KAAK,UAAU;AAG3B,cAAO,MAAM,QAAQ,GAAc,CAAC,GAAkB,KAAkB,GAAO,KAAO;;;AAK5F,eAAO;;KAEV,OAAO,SAAU,IAAG;AACrB,WAAO,CAAC,CAAC;;AAEX,SAAO,CAAC,IAAiB;;AA5G3B;AAAS,GAAA,IAAA;ACpZT,IAAI,KAAe;AAAnB,IACI,KAAU,GAAA,SAAU,GAAS,GAAI;AACnC,KAAa,KAAK;AAClB,MAAI,IAAS,EAAG;AAChB,SAAA,GAAa,OACN;GAJK;ACDd,YAAyB,GAAI;AAC3B,MAAI;AAEJ,SAAO,IAAK,EACV,IAAI,GACJ,MAAM,WAAY;KAGlB,WAAW,WAAY;AACrB,WAAO,EACL,aAAa,WAAY;;KAK7B,aAAa,WAAY;KAGzB,QAAQ,WAAY;AAClB,WAAO,EACL,IAAI;OAGP,EAAG,MAAoB,WAAY;AACpC,WAAO;KACN;;AAzBL;AAAS,GAAA,IAAA;AAkCT,YAA8B,GAAkB,GAAS,GAAS,GAAQ;AACxE,MAAI,GAEA,KAAY,GAAe,EAAiB,MAC5C,KAAkB,KAAK,KAAY,OAA6B,SAAS,EAAQ,QAAQ,cAAc,QAAQ,MAAO,SAAS,SAAS,EAAG,GAAU,OACrJ,IAAe,EAAiB,OAAO,GAAW,EAAiB,MAAM,GAAS,KAAU,QAC5F,IAAY,KAAiB,GAAoB,IAAgB,EAAiB,IAAI,KAAgB,GAAgB,EAAiB;AAE3I,SAAA,EAAU,OAAO,GACV;;AATT;AAAS,GAAA,IAAA;AAWT,YAA6B,GAAQ,GAAI,GAAM;AAC7C,MAAI,IAAY,GAAgB;AAIhC,MAFA,EAAU,WAAW,MAEjB,GAAU,IAAS;AAErB,QAAI,IAAiB,EAAU,QAAQ,GAAQ,QAAW,WAAY;AACpE,aAAQ,KAAO,EAAO,YAAY,KAAQ,GAAQ;;AAGpD,MAAU,cAAc,WAAY;AAClC,aAAO;;;AAIX,SAAO;;AAhBT;AAAS,GAAA,IAAA;AAkBT,YAAiB,GAAM;AACrB,MAAI;AACF,WAAO,OAAO,EAAK,QAAS;WACrB,GADqB;AAE5B,WAAO;;;AAJX;AAAS,GAAA,IAAA;AAOT,YAAwB,GAAM;AAC5B,SAAO,GAAQ,MAAS,QAAQ;;AADlC;AAAS,GAAA,IAAA;AAIT,YAAoB,GAAc;AAChC,MAAI;AAEJ,SAAO,EAAU,KAAK,EACpB,WAAW,WAAY;AACrB,WAAO,EACL,aAAa,WAAY;;KAK7B,IAAI,aACJ,aAAa,WAAY;OAGxB,EAAG,MAAoB,WAAY;AACpC,WAAO;KACN,IAAK;;AAjBV;AAAS,GAAA,IAAA;AC3ET,IAAI,KAAa,GAAA,SAAU,GAAW;AACpC,SAAO,EAAU,SAAS,YAAY,EAAU,SAAS;GAD1C;AAGjB,YAAqB,GAAW;AAC9B,SAAO,OAAO,KAAK,EAAU,QAAQ,IAAI,SAAU,GAAK;AACtD,WAAO,EAAU,OAAO;;;AAF5B;AAAS,GAAA,IAAA;AAKT,YAA0B,GAAW;AACnC,MAAI,IAAa,CAAC;AAElB,SAAI,GAAW,KACN,IAGF,EAAW,OAAO,GAAQ,GAAY,GAAW,IAAI;;AAP9D;AAAS,GAAA,IAAA;AAST,YAA0B,GAAgB,GAAY;AACpD,MAAI,GAAK,GAAI,GAAK,IAAI,IAAK,GAAI,GAAK,GAEhC,KAAoB,IAAI,IAAI,IAC5B,KAAc,GAAW,KACzB,KAAgB,IAAI,IAAI;AAE5B,MAAI;AAEF,aAAS,KAAkB,GAAS,KAAgB,KAAoB,GAAgB,QAAQ,CAAC,GAAkB,MAAM,KAAoB,GAAgB;AAI3J,eAHI,IAAI,GAAkB,OACtB,IAAI,EAAE,QAEH,KAAK,CAAC,GAAc,IAAI;AAC7B,WAAc,IAAI,IAClB,IAAI,EAAE;WAGH,GAHG;AAIV,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,YAAqB,CAAC,GAAkB,QAAS,KAAK,GAAgB,WAAS,EAAG,KAAK;cAAA;AAE3F,UAAI;AAAK,cAAM,EAAI;;;AAIvB,MAAI,IAAU,GAAW;AAEzB,MAAI;AAEF,aAAS,KAAkB,GAAS,KAAgB,IAAoB,GAAgB,QAAQ,CAAC,EAAkB,MAAM,IAAoB,GAAgB,QAAQ;AACnK,UAAI,IAAI,EAAkB;AAE1B,UAAI,EAAE,SAAS,cAAe,EAAC,EAAQ,IAAI,MAAM,CAAC,EAAQ,IAAI,GAAG;AAC3D,WAAY,IAAI,KAClB,GAAY,IAAI,GAAG,QAAQ,SAAU,GAAI;AACvC,iBAAO,GAAc,IAAI;aAG3B,EAAE,kBAAkB,QAAQ,SAAU,GAAI;AACxC,iBAAO,GAAc,IAAI;;eAIzB,EAAE,SAAS;AACb,YAAI;AACF,mBAAS,IAAM,MAAM,QAAQ,GAAS,GAAY,MAAM,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AAChG,gBAAI,KAAQ,EAAG;AAEX,eAAM,SAAS,aAId,IAAc,IAAI,OACrB,IAAc,IAAI,KAEd,GAAY,IAAI,MAClB,GAAY,IAAI,IAAO,QAAQ,SAAU,GAAI;AAC3C,qBAAO,GAAc,IAAI;iBAG3B,GAAM,kBAAkB,QAAQ,SAAU,GAAI;AAC5C,qBAAO,GAAc,IAAI;;;iBAK1B,GAL0B;AAMjC,eAAM,EACJ,OAAO;kBAAA;AAGT,cAAI;AACE,iBAAM,CAAC,EAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;oBAAA;AAEhD,gBAAI;AAAK,oBAAM,GAAI;;;;WAMtB,GANsB;AAO7B,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,WAAqB,CAAC,EAAkB,QAAS,MAAK,GAAgB,WAAS,GAAG,KAAK;cAAA;AAE3F,UAAI;AAAK,cAAM,EAAI;;;AAIvB,MAAI;AAEF,aAAS,IAAkB,GAAS,KAAgB,IAAoB,EAAgB,QAAQ,CAAC,EAAkB,MAAM,IAAoB,EAAgB;AAI3J,eAHI,IAAI,EAAkB,OACtB,IAAI,EAAE,QAEH,KAAK,CAAC,GAAc,IAAI;AAC7B,WAAc,IAAI,IAClB,IAAI,EAAE;WAGH,GAHG;AAIV,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,WAAqB,CAAC,EAAkB,QAAS,KAAK,EAAgB,WAAS,EAAG,KAAK;cAAA;AAE3F,UAAI;AAAK,cAAM,EAAI;;;AAIvB,SAAO;;AAxHT;AAAS,GAAA,IAAA;AA2HT,YAAyB,GAAU,GAAS;AAC1C,MAAI,IAAkB,EAAQ,IAAI;AAElC,MAAI,CAAC;AACH,WAAO;AAGT,MAAI,EAAS,SAAS,YAAY;AAChC,QAAI,IAAiB,EAAgB;AAErC,QAAI,GAAA;AACF,UAAI,GAAW;AACb,eAAO,EAAe;;AAGxB,aAAO;;AAIX,MAAI,IAAa;AACjB,SAAA,EAAgB,QAAQ,SAAU,IAAK;AACrC,MAAW,GAAI,OAAO,GAAgB,IAAK;MAEtC;;AAvBT;AAAS,GAAA,IAAA;AA0BT,YAAoB,GAAe;AACjC,MAAI,GAAK,GAEL,IAAU,oBAAI;AAElB,MAAI;AACF,aAAS,IAAkB,GAAS,IAAgB,KAAoB,EAAgB,QAAQ,CAAC,GAAkB,MAAM,KAAoB,EAAgB,QAAQ;AACnK,UAAI,KAAI,GAAkB;AAErB,QAAQ,IAAI,OACf,EAAQ,IAAI,IAAG,KAGb,GAAE,UACC,GAAQ,IAAI,GAAE,WACjB,EAAQ,IAAI,GAAE,QAAQ,KAGxB,EAAQ,IAAI,GAAE,QAAQ,KAAK;;WAGxB,GAHwB;AAI/B,QAAM,EACJ,OAAO;YAAA;AAGT,QAAI;AACE,YAAqB,CAAC,GAAkB,QAAS,KAAK,EAAgB,WAAS,EAAG,KAAK;cAAA;AAE3F,UAAI;AAAK,cAAM,EAAI;;;AAIvB,SAAO;;AAjCT;AAAS,GAAA,IAAA;AAmCT,YAAkB,GAAU,GAAe;AACzC,MAAI,IAAS,GAAiB,CAAC,IAAW;AAC1C,SAAO,GAAgB,GAAU,GAAW;;AAF9C;AAAS,GAAA,IAAA;AAIT,YAAa,GAAU,GAAM;AAC3B,SAAI,MAAM,QAAQ,KACT,EAAS,KAAK,SAAU,GAAQ;AACrC,WAAO,MAAW;OAIlB,aAAoB,MACf,EAAS,IAAI,KAGf;;AAXT;AAAS,GAAA,IAAA;AAaT,YAAoB,GAAe;AACjC,SAAO,GAAc,IAAI,GAAO,IAAI,IAAI,GAAQ,GAAc,IAAI,GAAO,EAAc,IAAI,SAAU,GAAI;AACvG,WAAO,EAAG;OACP,WAAW;;AAHlB;AAAS,GAAA,IAAA;AAKT,YAAwB,GAAe,GAAW;AAChD,SAAI,EAAU,SAAS,aACd,GAAY,GAAW,KAAK,SAAU,GAAG;AAC9C,WAAO,EAAE,SAAS,WAAW,GAAI,GAAe;OAIhD,EAAU,SAAS,aACd,GAAY,GAAW,MAAM,SAAU,GAAI;AAChD,WAAO,GAAe,GAAe;OAIlC;;AAbT;AAAS,GAAA,IAAA;AAeT,YAAiB,GAAe;AAC9B,SAAI,MAAkB,UACpB,KAAgB,KAGX,EAAc,OAAO,SAAU,GAAK,GAAW;AACpD,WAAI,EAAU,SAAS,UACrB,GAAI,EAAU,MAAM,EAAU,OAGzB;KACN;;AAXL;AAAS,GAAA,IAAA;AAaT,YAAkC,GAAe;AAC/C,SAAO,IAAI,IAAI,GAAQ,EAAc,IAAI,SAAU,GAAI;AACrD,WAAO,EAAG;;;AAFd;AAAS,GAAA,IAAA;ACvPT,YAA0B,GAAG,GAAG;AAC9B,MAAI,MAAM;AACR,WAAO;AAGT,MAAI,MAAM,UAAa,MAAM;AAC3B,WAAO;AAGT,MAAI,GAAS,MAAM,GAAS;AAC1B,WAAO,MAAM;AAGf,MAAI,IAAQ,OAAO,KAAK,IACpB,IAAQ,OAAO,KAAK;AACxB,SAAO,EAAM,WAAW,EAAM,UAAU,EAAM,MAAM,SAAU,GAAK;AACjE,WAAO,GAAiB,EAAE,IAAM,EAAE;;;AAhBtC;AAAS,GAAA,IAAA;AAmBT,YAAuB,GAAO;AAC5B,SAAI,OAAO,KAAU,YAAY,MAAU,OAClC,QAGF,WAAW,KAAS,YAAY;;AALzC;AAAS,GAAA,IAAA;AAYT,YAA2B,GAAQ,GAAO;AACxC,MAAI,IAAO,EAAO,MAEd,IAAc,EAAS,EAAS,IAAI,IAAS,EAC/C,MAAM,MAAS,SAAY,WAAY;AACrC,WAAO,EAAK,EAAM,SAAS,EAAM,OAAO,EACtC,QAAQ,GACR,OAAO,GACP,QAAQ,EAAM;MAEd;AAGN,SAAO;;AAbT;AAAS,GAAA,IAAA;AAgBT,IAAI,KAIJ,WAAY;AAaV,aAAe,GAAQ;AACrB,QAAI,IAAQ,MAER;AAEJ,SAAK,UAAU,IACf,KAAK,aAAa,IAClB,KAAK,OAAO,IACZ,KAAK,SAAS,IACd,KAAK,QAAQ,EAAO,OACpB,KAAK,UAAU,EAAO,SACtB,KAAK,SAAS,EAAO,QACrB,KAAK,aAAa,EAAO,YACzB,KAAK,QAAQ,KAAK,OAAO,MACzB,KAAK,eAAe,EAAO,cAC3B,KAAK,UAAU,EAAO,SACtB,KAAK,UAAU,EAAO,WAAW,IACjC,KAAK,aAAa,EAAO,cAAc,IACvC,KAAK,OAAO,GAAQ,EAAO,gBAC3B,KAAK,SAAS,EAAO,UAAU,IAC/B,KAAK,UAAU,KAAK,QAAQ,KAAK,OACjC,KAAK,YAAY,KAAK,UAAU,KAAK,OACrC,KAAK,gBAAgB,EAAO,eAC5B,KAAK,cAAc,EAAO,aAC1B,KAAK,WAAW,EAAO,UACvB,KAAK,OAAO,CAAC,CAAC,EAAO,MACrB,KAAK,OAAQ,KAAK,MAAM,QAAQ,EAAO,QAAQ,IAAI,IAAI,EAAO,QAAQ,EAAO,UAAU,QAAQ,MAAO,SAAS,IAAK,oBAAI,OACxH,KAAK,UAAU,EAAO,SACtB,OAAO,eAAe,MAAM,cAAc,EACxC,KAAK,WAAY;AACf,aAAO,GAAW,EAAM;;;AA9B9B;AAAS,SAAA,GAAA,GAAA,UAyCT,EAAM,OAAO,SAAU,GAAY,GAAS;AAC1C,QAAI,aAAsB;AACxB,aAAI,EAAW,YAAY,IAClB,IAAI,EAAM,EACf,OAAO,EAAW,OAClB,SAAS,GACT,QAAQ,EAAW,QACnB,YAAY,MACZ,cAAc,EAAW,cACzB,SAAS,EAAW,SACpB,SAAS,IACT,YAAY,EAAW,YACvB,MAAM,IACN,QAAQ,IACR,eAAe,IACf,aAAa,IACb,UAAU,QAIP;AAGT,QAAI,IAAS;AACb,WAAO,IAAI,EAAM,EACf,OAAO,GACP,SAAS,GACT,QAAQ,GACR,YAAY,MACZ,cAAc,QACd,SAAS,QACT,SAAS,IACT,YAAY,QACZ,MAAM,QACN,QAAQ,IACR,eAAe,IACf,aAAa,IACb,UAAU;KASd,EAAM,SAAS,SAAU,GAAQ;AAC/B,WAAO,IAAI,EAAM;KASnB,EAAM,QAAQ,SAAU,GAAY,GAAS;AAC3C,QAAI,aAAsB,GAAO;AAC/B,UAAI,CAAC,EAAW,QAAQ;AACtB,eAAO;AAGT,UAAI,IAAS;AACb,aAAO,IAAI,EAAM,EACf,OAAO,EAAW,OAClB,SAAS,GACT,QAAQ,GACR,YAAY,MACZ,cAAc,EAAW,cACzB,SAAS,EAAW,SACpB,YAAY,EAAW,YACvB,eAAe,EAAW,eAC1B,aAAa,IACb,UAAU;;AAId,WAAO,EAAM,KAAK,GAAY;KAShC,EAAM,UAAU,YAAY,SAAU,GAAY,GAAW;AAC3D,QAAI,IAAQ;AAUZ,QARI,MAAe,UACjB,KAAa,KAAK,QAGhB,MAAc,UAChB,KAAY,MAGV,GAAS;AACX,aAAO,CAAC;AAGV,QAAI,IAAY,OAAO,KAAK;AAC5B,WAAO,EAAU,OAAO,MAAM,GAAW,GAAc,IAAI,GAAO,EAAU,IAAI,SAAU,IAAK;AAC7F,aAAO,EAAM,UAAU,EAAW,KAAM,GAAW,IAAI,SAAU,IAAG;AAClE,eAAO,KAAM,IAAY;;SAExB;KAGP,EAAM,UAAU,SAAS,WAAY;AACnC,QAAI,IAAK;AACL,MAAG,eACH,EAAG;AACH,QAAI,IAAO,EAAG;AACd,MAAG;AACH,QAAI,IAAa,GAAO,GAAI,CAAC,iBAAiB,eAAe,QAAQ;AAEzE,WAAO,EAAS,EAAS,IAAI,IAAa,EACxC,MAAM,MAAM,KAAK;KAIrB,EAAM,UAAU,UAAU,SAAU,GAAkB;AACpD,WAAO,GAAa,GAAkB,KAAK;KAQ7C,EAAM,UAAU,SAAS,SAAU,GAAK;AACtC,WAAO,KAAK,KAAK,IAAI;KAYvB,EAAM,UAAU,MAAM,SAAU,GAAO;AACrC,QAAI;AAEA,UACF,GAAK,CAAC,CAAC,KAAK,SAAS;AAGvB,QAAI,IAAkB,KAAK,KAAK,aAAa,QAAQ,MAAO,SAAS,SAAS,EAAG,kBAAkB,MAAM;AACzG,WAAO,CAAC,CAAE,MAAmB,OAAoC,SAAS,EAAe,YAAY,WACrG,EAAe,YAAY,KAAK,SAAU,GAAG;AAC3C,aAAO,EAAE,WAAW,UAAa,EAAE,QAAQ;;KAIxC;;AC5QT,IAAI,KAAiB,EACnB,aAAa;AADf,IAII,KAIJ,WAAY;AACV,aAAmB,GAAS;AAC1B,SAAK,kBAAkB,OACvB,KAAK,QAAQ,IACb,KAAK,cAAc,OACnB,KAAK,UAAU,EAAS,EAAS,IAAI,KAAiB;;AAJxD;AAAS,SAAA,GAAA,GAAA,cAOT,EAAU,UAAU,aAAa,SAAU,GAAU;AAGnD,QAFA,KAAK,cAAc,MAEf,GAAU;AACZ,UAAI,CAAC,KAAK,QAAQ,aAAa;AAC7B,aAAK,SAAS;AACd;;AAGF,WAAK,QAAQ;;AAGf,SAAK;KAGP,EAAU,UAAU,WAAW,SAAU,GAAM;AAC7C,QAAI,CAAC,KAAK,eAAe,KAAK,iBAAiB;AAC7C,WAAK,MAAM,KAAK;AAChB;;AAGF,QAAI,KAAK,MAAM,WAAW;AACxB,YAAM,IAAI,MAAM;AAGlB,SAAK,QAAQ,IACb,KAAK;KAGP,EAAU,UAAU,QAAQ,WAAY;AACtC,SAAK,QAAQ;KAGf,EAAU,UAAU,cAAc,WAAY;AAG5C,aAFI,IAAe,KAAK,MAAM,SAEvB;AACL,WAAK,QAAQ,IACb,IAAe,KAAK,MAAM;KAI9B,EAAU,UAAU,UAAU,SAAU,GAAU;AAChD,SAAK,kBAAkB;AAEvB,QAAI;AACF;aACO,GADP;AAIA,YAAA,KAAK,SACC;cAAA;AAEN,WAAK,kBAAkB;;KAIpB;;AC3ET,IAAI,KAAwB,oBAAI;AAAhC,IACI,KAAiB;AADrB,IAEI,KAAW,EACb,QAAQ,WAAY;AAClB,SAAO,KAAK,OAAO;GAErB,UAAU,SAAU,GAAI,GAAO;AAC7B,SAAA,GAAS,IAAI,GAAI,IACV;GAET,KAAK,SAAU,GAAI;AACjB,SAAO,GAAS,IAAI;GAEtB,MAAM,SAAU,GAAI;AAClB,KAAS,OAAO;;ACZpB,cAAqB;AACnB,MAAI,OAAO,cAAe;AACxB,WAAO;AAGT,MAAI,OAAO,QAAS;AAClB,WAAO;AAGT,MAAI,OAAO,UAAW;AACpB,WAAO;AAGT,MAAI,OAAO,UAAW;AACpB,WAAO;AAGJ,QACH,QAAQ,KAAK;;AAlBjB;AAAS,GAAA,IAAA;AAsBT,cAAuB;AACrB,MAAI,IAAS;AAEb,MAAI,KAAU,gBAAgB;AAC5B,WAAO,EAAO;;AAJlB;AAAS,GAAA,IAAA;AAUT,YAAyB,GAAS;AAChC,MAAI,CAAA,CAAC,MAIL;AAAA,QAAI,IAAW;AAEX,SACF,EAAS,SAAS;;;AARtB;AAAS,GAAA,IAAA;ACsCT,YAAuB,GAAU,GAAS;AACpC,QAAY,UACd,KAAU;AAGZ,MAAI,IAAQ,EAAS,cACjB,IAAY,oBAAI,OAChB,IAAU,IACV,KAAW,OAEX,KAAQ,GAAA,WAAY;AACtB,QAAI,CAAA,IAMJ;AAAA,WAFA,KAAW,MAEJ,EAAQ,SAAS,KAAG;AACzB,YAAI,IAAU,EAAQ;AACtB,YAAQ,EAAS,WAAW,GAAO,GAAS,IAC5C,EAAU,QAAQ,SAAU,IAAU;AACpC,iBAAO,GAAS,KAAK;;;AAIzB,WAAW;;KAfD,UAkBR,IAAQ,GAAW,EACrB,IAAI,EAAQ,IACZ,MAAM,SAAU,GAAO;AACrB,MAAQ,KAAK,IACb;KAEF,aAAa,WAAY;AACvB,WAAO;KAET,WAAW,SAAU,GAAM,IAAa,IAAU;AAChD,QAAI,KAAW,GAAW,GAAM,IAAa;AAC7C,WAAA,EAAU,IAAI,KACd,GAAS,KAAK,IACP,EACL,aAAa,WAAY;AACvB,QAAU,OAAO;;QAKrB,IAAW,EACb,QAAQ,EAAQ,QAChB,MAAM,GACN,IAAI,EAAQ,MAAM,aAClB,WAAW;AAEb,SAAA,IAAQ,EAAS,QAAQ,EAAS,MAAM,KAAY,GAC7C;;AAvDT;AAAS,GAAA,IAAA;ACzDT,IAAI,KAAwB,EAC1B,MAAM,OACN,aAAa;AAFf,IAII;AAEH,AAAA,UAAU,GAAmB;AAC5B,IAAkB,EAAkB,aAAgB,KAAK,cACzD,EAAkB,EAAkB,UAAa,KAAK,WACtD,EAAkB,EAAkB,UAAa,KAAK;GACrD,MAAsB,MAAoB;AAE7C,IAAI,KAIJ,WAAY;AAOV,aAAqB,GAAS,GAAS;AACrC,QAAI,IAAQ;AAER,UAAY,UACd,KAAU,EAAY,iBAGxB,KAAK,UAAU,GACf,KAAK,YAAY,IAAI,MACrB,KAAK,mBAAmB,IACxB,KAAK,YAAY,oBAAI,OACrB,KAAK,mBAAmB,oBAAI,OAC5B,KAAK,gBAAgB,oBAAI,OACzB,KAAK,gBAAgB,oBAAI,OACzB,KAAK,iBAAiB,oBAAI,OAC1B,KAAK,gBAAgB,oBAAI,OAKzB,KAAK,cAAc,OACnB,KAAK,SAAS,GAAkB,YAChC,KAAK,WAAW,oBAAI,OACpB,KAAK,YAAY,oBAAI,OAKrB,KAAK,OAAO,KAAK,OAWjB,KAAK,OAAO,SAAU,IAAO,IAAS;AACpC,UAAI,GAAQ;AACV,eAAA,EAAM,MAAM,KAEL,EAAM;AAGf,UAAI,KAAS,GAAa,GAAc,IAAO;AAE/C,UAAI,EAAM,WAAW,GAAkB;AAErC,eAAK,MACH,GAAK,OAAO,UAAW,OAAO,GAAO,MAAM,mCAAqC,OAAO,EAAM,QAAQ,IAAI;UAA2F,OAAO,KAAK,UAAU,GAAO,SAG5N,EAAM;AAGf,UAAI,EAAM,WAAW,GAAkB,WAAW,CAAC,EAAM,QAAQ;AAC/D,cAAM,IAAI,MAAM,UAAW,OAAO,GAAO,MAAM,yCAA2C,OAAO,EAAM,QAAQ,IAC7G;UAAoH,OAAO,KAAK,UAAU,GAAO;AAGrJ,aAAA,EAAM,UAAU,SAAS,WAAY;AAEnC,UAAM,QAAQ;AAEd,YAAI,KAAY,EAAM,UAAU;AAEhC,UAAM,OAAO,IAAW;UAGnB,EAAM;OAIf,KAAK,SAAS,SAAU,IAAO,IAAI;AACjC,UAAI,KAAW,EAAM,UAAW,QAAO,GAAe,UAAU,EAAM,OAAO,OAAO,KAChF,KAAS,KAAW,EAAM,SAAS,GAAS,MAAM,EAAM,SAAS,IAAI,OAAO,GAAS,IAAI,MAAM,GAAQ,MAAM,KAAK;AAEtH,UAAI,CAAC,IAAQ;AACX,YAAI,CAAC;AACH,gBAAM,IAAI,MAAM,kCAAkC,OAAO,IAAI,oBAAoB,OAAO,EAAM,IAAI;AAI/F,cACH,GAAK,OAAO,YAAY,OAAO,EAAM,IAAI,0CAA0C,OAAO,GAAM;AAGlG;;AAGE,mBAAa,KAEf,GAAO,KAAK,EAAS,EAAS,IAAI,KAAQ,EACxC,MAAM,GAAM,SAAS,KAAU,GAAG,OAAO,GAAM,EAAM,OAAO,GAAM,MAClE,QAAQ,EAAM,gBAIhB,GAAO,KAAK,GAAM;;AAItB,QAAI,IAAkB,EAAS,EAAS,IAAI,EAAY,iBAAiB,IAErE,KAAQ,EAAgB,OACxB,KAAS,EAAgB,QACzB,IAAS,EAAgB,QACzB,IAAK,EAAgB,IACrB,IAAa,MAAO,SAAY,IAAK,EAAQ;AACjD,SAAK,KAAK,GACV,KAAK,SAAS,IACd,KAAK,QAAQ,IACb,KAAK,SAAS,GACd,KAAK,UAAU,GACf,KAAK,YAAY,IAAI,GAAU,EAC7B,aAAa,KAAK,QAAQ,gBAE5B,KAAK,YAAY,GAAS;;AAvH5B;AAAS,SAAA,GAAA,GAAA,gBA0HT,OAAO,eAAe,EAAY,WAAW,gBAAgB,EAC3D,KAAK,WAAY;AACf,QAAI,IAAQ;AAEZ,WAAI,KAAK,gBACA,KAAK,gBAGP,GAAQ,MAAM,WAAY;AAC/B,aAAA,EAAM,gBAAgB,EAAM,QAAQ,cAC7B,EAAM;;KAGjB,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAY,WAAW,SAAS,EACpD,KAAK,WAAY;AACf,WAAK,MACH,GAAK,KAAK,WAAW,GAAkB,YAAY,uDAAuD,OAAO,KAAK,IAAI,gDAGrH,KAAK;KAEd,YAAY,OACZ,cAAc,SAShB,EAAY,UAAU,UAAU,SAAU,GAAO,GAAe;AAC9D,QAAI,GAAK;AAET,QAAI;AACF,eAAS,KAAK,GAAS,EAAM,UAAU,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AAC/E,YAAI,IAAS,GAAG;AAChB,aAAK,KAAK,GAAQ,GAAO;;aAEpB,GAFoB;AAG3B,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;KAKzB,EAAY,UAAU,SAAS,SAAU,GAAO,GAAQ;AACtD,QAAI,GAAK,GAAI,IAAK,IAAI,GAAK,GAAI,GAAK,IAEhC,KAAQ;AAqBZ,QAlBA,EAAM,aAAa,KAAK,WAExB,KAAK,SAAS,GAEV,KAAK,QAAQ,WACf,KAAK,QAAQ,KAAK,QAIpB,KAAK,SAAS,QAAQ,SAAU,GAAO;AACrC,SAAM,MAAM,SAAS,EAAM,MAAM;QAG/B,KAAK,YACP,KAAK,SAAS,KAAK,EAAO,MAAM,IAI9B,EAAM;AACR,UAAI;AACF,iBAAS,KAAK,GAAS,KAAK,iBAAiB,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AACrF,cAAI,KAAW,GAAG;AAClB,aAAS,EAAM;;eAEV,GAFU;AAGjB,YAAM,EACJ,OAAO;gBAAA;AAGT,YAAI;AACE,gBAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;kBAAA;AAEhD,cAAI;AAAK,kBAAM,EAAI;;;AAKzB,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,YAAY,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AAChF,YAAI,KAAW,EAAG;AAClB,WAAS,GAAO,EAAM;;aAEjB,GAFiB;AAGxB,WAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAM,CAAC,EAAG,QAAS,MAAK,EAAG,WAAS,GAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,GAAI;;;AAIvB,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,mBAAmB,KAAK,EAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,EAAG,QAAQ;AACvF,YAAI,IAAkB,GAAG;AACzB,UAAgB,KAAK,MAAM,SAAS,KAAK,MAAM,UAAU,KAAK,MAAM,QAAQ,UAAU;;aAEjF,GAFiF;AAGxF,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI,IAAS,GAAe,EAAM,iBAAiB,IAAI,KAAK;AAE5D,QAAI,KAAK,MAAM,iBAAiB,GAAQ;AAEtC,UAAI,IAAsB,EAAM,cAAc,KAAK,SAAU,GAAI;AAC/D,eAAO,EAAG,SAAS,WAAW,EAAG,WAAW,GAAM;UAEhD,KAAW,KAAuB,EAAoB,WAAW,GAAW,EAAoB,UAAU,EAAM,SAAS,KAAU;AAEvI,UAAI;AACF,iBAAS,IAAK,GAAS,KAAK,gBAAgB,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AACpF,cAAI,KAAW,EAAG;AAClB,aAAS,GAAW,KAAK,IAAI;;eAExB,GAFwB;AAG/B,YAAM,EACJ,OAAO;gBAAA;AAGT,YAAI;AACE,eAAM,CAAC,EAAG,QAAS,MAAK,EAAG,WAAS,GAAG,KAAK;kBAAA;AAEhD,cAAI;AAAK,kBAAM,EAAI;;;AAIvB,WAAK;;KAWT,EAAY,UAAU,eAAe,SAAU,GAAU;AACvD,WAAA,KAAK,UAAU,IAAI,IAEf,KAAK,WAAW,GAAkB,WACpC,EAAS,KAAK,OAAO,KAAK,MAAM,QAG3B;KAGT,EAAY,UAAU,YAAY,SAAU,GAAwB,GACpE,GAAkB;AAChB,QAAI,IAAQ;AAEZ,QAAI,CAAC;AACH,aAAO,EACL,aAAa,WAAY;;AAM7B,QAAI,IACA,KAA2B;AAE/B,WAAI,OAAO,KAA2B,aACpC,KAAW,IAEX,MAAW,EAAuB,KAAK,KAAK,IAC5C,KAA2B,EAAuB,SAAS,KAAK,KAGlE,KAAK,UAAU,IAAI,KAEf,KAAK,WAAW,GAAkB,WACpC,GAAS,KAAK,QAGZ,MACF,KAAK,OAAO,KAGP,EACL,aAAa,WAAY;AACvB,YAAY,EAAM,UAAU,OAAO,KACnC,MAA4B,EAAM,cAAc,OAAO;;KAU7D,EAAY,UAAU,UAAU,SAAU,GAAU;AAClD,WAAA,KAAK,eAAe,IAAI,IACjB;KAQT,EAAY,UAAU,SAAS,SAAU,GAAU;AACjD,WAAA,KAAK,cAAc,IAAI,IAChB;KAQT,EAAY,UAAU,WAAW,SAAU,GAAU;AACnD,WAAA,KAAK,iBAAiB,IAAI,IACnB;KAQT,EAAY,UAAU,SAAS,SAAU,GAAU;AACjD,WAAA,KAAK,cAAc,IAAI,IAChB;KAQT,EAAY,UAAU,SAAS,SAAU,GAAU;AACjD,WAAA,KAAK,cAAc,IAAI,IAChB;KAQT,EAAY,UAAU,MAAM,SAAU,GAAU;AAC9C,WAAA,KAAK,UAAU,OAAO,IACtB,KAAK,eAAe,OAAO,IAC3B,KAAK,cAAc,OAAO,IAC1B,KAAK,cAAc,OAAO,IAC1B,KAAK,cAAc,OAAO,IAC1B,KAAK,iBAAiB,OAAO,IACtB;KAQT,EAAY,UAAU,QAAQ,SAAU,GAAc;AACpD,QAAI,IAAQ;AAEZ,QAAI,KAAK,WAAW,GAAkB;AAEpC,aAAO;AAOT,SAAK,QAAQ,SAEb,GAAS,SAAS,KAAK,WAAW,OAClC,KAAK,cAAc,MACnB,KAAK,SAAS,GAAkB;AAChC,QAAI,IAAgB,MAAiB,SAAY,KAAK,eAAe,GAAQ,MAAM,WAAY;AAC7F,aAAO,GAAc,KAAgB,EAAM,QAAQ,aAAa,KAAgB,EAAM,QAAQ,aAAa,GAAM,KAAK,GAAc,EAAM,QAAQ;;AAGpJ,WAAI,KAAK,QAAQ,YACf,KAAK,aAGP,KAAK,UAAU,WAAW,WAAY;AACpC,QAAM,OAAO,GAAe;QAEvB;KAST,EAAY,UAAU,OAAO,WAAY;AACvC,QAAI,GAAK,GAAI,GAAK,GAAI,IAAK,IAAI,GAAK,GAAI,GAAM,IAE1C,KAAQ;AAEZ,QAAI;AACF,eAAS,KAAK,GAAS,KAAK,YAAY,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AAChF,YAAI,KAAW,GAAG;AAClB,aAAK,UAAU,OAAO;;aAEjB,GAFiB;AAGxB,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,gBAAgB,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AACpF,YAAI,KAAW,EAAG;AAElB,cACA,KAAK,cAAc,OAAO;;aAErB,GAFqB;AAG5B,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAM,CAAC,EAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,mBAAmB,KAAK,EAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,EAAG,QAAQ;AACvF,YAAI,KAAW,GAAG;AAClB,aAAK,iBAAiB,OAAO;;aAExB,GAFwB;AAG/B,WAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,MAAK,EAAG,WAAS,GAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,GAAI;;;AAIvB,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,gBAAgB,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AACpF,YAAI,KAAW,EAAG;AAClB,aAAK,cAAc,OAAO;;aAErB,GAFqB;AAG5B,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAM,CAAC,EAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI,CAAC,KAAK;AAER,aAAO;AAGT,OAAc,IAAI,GAAO,KAAK,MAAM,gBAAgB,OAAO,KAAK,SAAU,GAAG,GAAG;AAC9E,aAAO,EAAE,QAAQ,EAAE;OAClB,QAAQ,SAAU,GAAW;AAC9B,UAAI,GAAM;AAEV,UAAI;AACF,iBAAS,KAAK,GAAS,EAAU,WAAW,OAAO,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AAC3F,cAAI,IAAS,GAAG;AAEhB,aAAM,KAAK,GAAQ,GAAM;;eAEpB,IAFoB;AAG3B,YAAO,EACL,OAAO;gBAAA;AAGT,YAAI;AACE,gBAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;kBAAA;AAEhD,cAAI;AAAM,kBAAM,EAAK;;;QAM3B,KAAK,SAAS,QAAQ,SAAU,GAAO;AACjC,SAAW,EAAM,SACnB,EAAM;;AAIV,QAAI;AAEF,eAAS,IAAK,GAAS,OAAO,KAAK,KAAK,oBAAoB,KAAK,EAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,EAAG,QAAQ;AACpG,YAAI,IAAM,GAAG;AACb,aAAK,MAAM,aAAa,KAAK,iBAAiB;;aAEzC,GAFyC;AAGhD,UAAO,EACL,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,MAAK,EAAG,WAAS,GAAG,KAAK;gBAAA;AAEhD,YAAI;AAAM,gBAAM,EAAK;;;AAIzB,WAAA,KAAK,UAAU,SACf,KAAK,cAAc,OACnB,KAAK,SAAS,GAAkB,SAChC,GAAS,KAAK,KAAK,YACZ;KAGT,EAAY,UAAU,QAAQ,SAAU,GAAQ;AAC9C,QAAI,IAAQ;AAEZ,QAAI,KAAK,WAAW,GAAkB,cAAc,KAAK,QAAQ;AAE1D,YACH,GAAK,OAAO,GAAG,OAAO,EAAO,QAAQ,kDAAmD,OAAO,KAAK,QAAQ,IAAI;UAAgF,OAAO,KAAK,UAAU;aAE/M,KAAK,WAAW,GAAkB;AAC3C,YAAM,IAAI,MACV,GAAG,OAAO,EAAO,QAAQ,kDAAmD,OAAO,KAAK,QAAQ,IAAI;AAGtG,SAAK,UAAU,SAAS,WAAY;AAClC,UAAI,GAAM,GAEN,KAAY,EAAM,OAClB,KAAe,OACf,IAAiB,IAEjB,IAAU,GAAA,SAAU,IAAS;AAC/B,YAAI,KAAS,GAAa;AAE1B,UAAM,QAAQ,KAEd,KAAY,GAAQ,GAAO,WAAY;AACrC,iBAAO,EAAM,QAAQ,WAAW,IAAW;YAE7C,EAAe,KAAK,MAAM,GAAgB,GAAc,IAAI,GAAO,GAAU,QAAQ,IAAI,SAAU,IAAG;AACpG,iBAAO,GAAkB,IAAG;aACzB,SACL,KAAe,MAAgB,CAAC,CAAC,GAAU;SAX/B;AAcd,UAAI;AACF,iBAAS,IAAW,GAAS,IAAS,KAAa,EAAS,QAAQ,CAAC,GAAW,MAAM,KAAa,EAAS,QAAQ;AAClH,cAAI,KAAU,GAAW;AAEzB,YAAQ;;eAEH,IAFG;AAGV,YAAO,EACL,OAAO;gBAAA;AAGT,YAAI;AACE,gBAAc,CAAC,GAAW,QAAS,KAAK,EAAS,WAAS,EAAG,KAAK;kBAAA;AAEtE,cAAI;AAAM,kBAAM,EAAK;;;AAIzB,SAAU,UAAU,IACpB,GAAU,UAAU,GAEpB,EAAM,OAAO,IAAW,GAAa,EAAO,EAAO,SAAS;;KAUhE,EAAY,UAAU,SAAS,SAAU,GAAO;AAC9C,WAAO,KAAK,KAAK,KAAK,MAAM;KAW9B,EAAY,UAAU,YAAY,SAAU,GAAO;AACjD,QAAI,IAAQ,MAER,IAAS,GAAa;AAE1B,QAAI,EAAO,KAAK,QAAQ,QAAmB,KAAK,CAAC,KAAK,MAAM,WAAW,KAAK,SAAU,IAAW;AAC/F,aAAO,GAAU,QAAQ,QAAmB;;AAE5C,YAAM,EAAO,KAAK;AAGpB,QAAI,IAAY,GAAQ,MAAM,WAAY;AACxC,aAAO,EAAM,QAAQ,WAAW,EAAM,OAAO;;AAE/C,WAAO;KAGT,EAAY,UAAU,UAAU,SAAU,GAAO;AAC/C,QAAI,GAAM;AAEV,QAAI;AACF,eAAS,IAAK,GAAS,KAAK,YAAY,KAAK,EAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,EAAG,QAAQ;AAChF,YAAI,KAAK,GAAG,OACR,IAAQ,KAAK,SAAS,IAAI;AAE9B,YAAI,CAAC;AACH,gBAAM,IAAI,MAAM,4BAA4B,OAAO,GAAO,wBAAwB,OAAO,KAAK,IAAI,4BAA4B,OAAO,IAAI;AAG3I,UAAM,KAAK;;aAEN,GAFM;AAGb,UAAO,EACL,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAM,gBAAM,EAAK;;;KAK3B,EAAY,UAAU,QAAQ,SAAU,GAAY;AAClD,QAAI,IAAQ;AAEZ,SAAK,iBAAiB,EAAW,MAAM,KAAK,MAAM,WAAW,WAAY;AACnE,QAAW,KACb,EAAM,OAAO,EAAW,QAAQ,EAAW,MAE3C,EAAM,KAAK,EAAW;OAEvB,EAAW;KAGhB,EAAY,UAAU,SAAS,SAAU,GAAQ;AAC/C,SAAK,MAAM,aAAa,KAAK,iBAAiB,KAC9C,OAAO,KAAK,iBAAiB;KAG/B,EAAY,UAAU,OAAO,SAAU,GAAQ,GAAO,GAAmB;AACnE,UAAsB,UACxB,KAAoB,KAAK,QAAQ,QAAQ;AAG3C,QAAI,IAAU,EAAM,SAChB,KAAS,EAAM,QACf,KAAe,EAAO,QAAQ,GAAkB,EAAO,MAAM,IAC7D,IAAO,GAAW,MAAgB,KAAe,KAAe,GAAa,OAAO,EAAO;AAE/F,QAAI;AACF,UAAI;AACF,eAAO,EAAK,GAAS,GAAO,MAAM,EAChC,QAAQ,GACR,OAAO,KAAK,OACZ,QAAQ;eAEH,GAFG;AAGV,cAAI,KAAK,UACP,KAAK,OAAO,KAAK,EACf,MAAM,gBACN,MAAM,MAIJ;;AAIV,YAAQ,EAAO;WACR;AACH,YAAI,IAAa;AAEjB,YAAI,OAAO,EAAW,SAAU,UAAU;AACxC,eAAK,MAAM;AACX;;AAEI,YAAW,KACb,KAAK,OAAO,EAAW,QAAQ,EAAW,MAE1C,KAAK,KAAK,EAAW;AAIzB;WAEG;AACH,aAAK,OAAO,EAAO;AACnB;WAEG,IACH;AACE,YAAI,KAAK,WAAW,GAAkB;AACpC;AAGF,YAAI,IAAW,EAAO;AAItB,YAAI,CAAC,KAAK,MAAM,WAAW,EAAS,MAAM,EAAS;AACjD;AAIF,YAAI,EAAS,SAAS,GAAY,QAAQ;AACxC,cAAI,KAAe,GAAe,EAAS,MACvC,KAAiB,KAAK,QAAQ,QAAQ,WAAW,KAAK,QAAQ,QAAQ,SAAS,GAAa,QAAQ,QACpG,KAAK,EAAS,IACd,KAAO,EAAS;AAEf,gBACH,GAAK,CAAE,cAAa,IACpB,6DAA6D,OAAO,EAAS,KAAK,qBAAqB,OAAO,KAAK,QAAQ,IAAI,UAAU;AAG3I,cAAI,KAAc,iBAAiB,IAAW,EAAS,cAAc,CAAC,CAAC,EAAS;AAEhF,cAAI,CAAC,IAAgB;AAEd,kBACH,GAAK,OAAO,oCAAoC,OAAO,EAAS,KAAK,kBAAkB,OAAO,KAAK,QAAQ,IAAI;AAGjH;;AAGF,cAAI,IAAe,KAAO,GAAW,IAAM,GAAS,MAAU;AAE9D,cAAI,OAAO,MAAmB;AAE5B;AAGF,cAAI,IAAS,GAAW,MAAkB,GAAe,GAAS,GAAO,MAAM,EAC7E,MAAM,GACN,KAAK,IACL,MAAM,EAAS,UACZ;AAEL,cAAI,CAAC;AAEH;AAGF,cAAI,IAAU;AAEV,aAAU,MACZ,KAAS,IAAe,EAAO,YAAY,KAAgB,GAC3D,IAAU,EACR,aAAa,OAIjB,KAAK,MAAM,GAAQ,IAAI;;AAEvB,eAAK,cAAc;AAGrB;;WAGC,IACH;AACE,aAAK,UAAU,EAAO,SAAS;AAC/B;;WAGC;AACH,YAAI,KAAQ,EAAO,OACf,IAAQ,EAAO;AAEf,aACF,KAAK,OAAO,IAAO,KAEnB,KAAK,OAAO;AAGd;;AAGK,cACH,GAAK,OAAO,4CAA4C,OAAO,EAAO,MAAM;AAG9E;;KAMN,EAAY,UAAU,cAAc,SAAU,GAAS;AACrD,QAAI;AAEJ,SAAK,SAAS,OAAO,IACrB,KAAK,UAAU,OAAO,IAGrB,KAAK,KAAK,WAAW,QAAQ,MAAO,UAAgB,OAAO,EAAG,SAAS;KAG1E,EAAY,UAAU,YAAY,SAAU,GAAS;AACnD,QAAI,IAAQ,KAAK,SAAS,IAAI;AAE1B,KAAC,KAIL,MAAK,YAAY,IAEb,GAAW,EAAM,SACnB,EAAM;KAIV,EAAY,UAAU,QAAQ,SAAU,GAAQ,GAAM,GAAS;AAC7D,QAAI,GAAc;AAChB,aAAO,KAAK,aAAa,QAAQ,QAAQ,IAAS;AAC7C,QAAI,GAAW;AACpB,aAAO,KAAK,cAAc,GAAQ;AAC7B,QAAI,GAAe;AACxB,aAAO,KAAK,WAAW,GAAQ;AAC1B,QAAI,GAAa;AACtB,aAAO,KAAK,gBAAgB,GAAQ;AAC/B,QAAI,GAAU;AACnB,aAAO,KAAK,aAAa,GAAQ,EAAS,EAAS,IAAI,IAAU,EAC/D,IAAI;AAED,QAAI,GAAW;AACpB,aAAO,KAAK,cAAc,GAAQ;AAElC,UAAM,IAAI,MAAM,2BAA4B,OAAO,GAAM,eAAiB,OAAO,OAAO,GAAQ;KAIpG,EAAY,UAAU,eAAe,SAAU,GAAS,GAAS;AAC/D,QAAI,IAAQ;AAER,UAAY,UACd,KAAU;AAGZ,QAAI,IAAe,IAAI,EAAY,GAAS,EAAS,EAAS,IAAI,KAAK,UAAU,EAC/E,QAAQ,MACR,IAAI,EAAQ,MAAM,EAAQ,QAGxB,KAAkB,EAAS,EAAS,IAAI,KAAwB;AAEhE,OAAgB,QAClB,EAAa,aAAa,SAAU,GAAO;AACzC,QAAM,KAAK,IAAQ,EACjB,OAAO,GACP,IAAI,EAAa;;AAKvB,QAAI,KAAQ;AACZ,WAAA,KAAK,SAAS,IAAI,EAAa,IAAI,KAE/B,GAAgB,eAClB,KAAK,UAAU,IAAI,EAAa,KAGlC,EAAa,OAAO,SAAU,GAAW;AACvC,QAAM,YAAY,EAAa,KAE/B,EAAM,KAAK,GAAa,GAAW,EACjC,QAAQ,EAAa;OAEtB,SACI;KAGT,EAAY,UAAU,gBAAgB,SAAU,GAAU,GAAI;AAC5D,QAAI,IAAW,GAAc,GAAU,EACrC,IAAI,GACJ,QAAQ;AAEV,WAAA,KAAK,SAAS,IAAI,GAAI,IACf;KAGT,EAAY,UAAU,eAAe,SAAU,GAAS,GAAI;AAC1D,QAAI,GAEA,IAAQ,MAER,KAAW,OACX;AACJ,MAAQ,KAAK,SAAU,GAAU;AAC1B,YACH,MAAe,GAEf,EAAM,YAAY,IAElB,EAAM,KAAK,GAAa,GAAW,GAAI,IAAW,EAChD,QAAQ;OAGX,SAAU,GAAW;AACtB,UAAI,CAAC,IAAU;AACb,UAAM,YAAY;AAElB,YAAI,IAAa,GAAM,GAAI;AAE3B,YAAI;AAEF,YAAM,KAAK,GAAa,GAAY,EAClC,QAAQ;iBAEH,IAFG;AAGV,aAAqC,GAAW,IAAO,IAEnD,EAAM,YACR,EAAM,SAAS,KAAK,GAAY,EAAM,QAGpC,EAAM,QAAQ,UAKhB,EAAM;;;;AAKd,QAAI,IAAS,KAAK,EAChB,IAAI,GACJ,MAAM,WAAY;OAGlB,WAAW,SAAU,GAAM,GAAa,IAAU;AAChD,UAAI,KAAW,GAAW,GAAM,GAAa,KACzC,KAAe;AACnB,aAAA,EAAQ,KAAK,SAAU,IAAU;AAC3B,cAIJ,IAAS,KAAK,KAEV,CAAA,MAIJ,GAAS;SACR,SAAU,IAAK;AACZ,cAIJ,GAAS,MAAM;UAEV,EACL,aAAa,WAAY;AACvB,eAAO,KAAe;;OAI5B,MAAM,WAAY;AAChB,WAAW;OAEb,QAAQ,WAAY;AAClB,aAAO,EACL,IAAI;OAGR,aAAa,WAAY;AACvB,aAAO;SAER,EAAG,MAAoB,WAAY;AACpC,aAAO;OACN;AACH,WAAA,KAAK,SAAS,IAAI,GAAI,IACf;KAGT,EAAY,UAAU,gBAAgB,SAAU,GAAU,GAAI;AAC5D,QAAI,GAEA,IAAQ,MAER,KAAW,OACX,KAAY,oBAAI,OAChB,IAAY,oBAAI,OAChB,GAEA,IAAU,GAAA,SAAU,IAAG;AACzB,UAAU,IACV,EAAU,QAAQ,SAAU,IAAU;AACpC,eAAO,GAAS;UAGd,CAAA,MAIJ,EAAM,KAAK,GAAa,IAAG,EACzB,QAAQ;OAXE,YAeV;AAEJ,QAAI;AACF,WAAe,EAAS,GAAS,SAAU,IAAa;AACtD,WAAU,IAAI;;aAET,IAFS;AAGhB,WAAK,KAAK,GAAM,GAAI;;AAGtB,QAAI,GAAc;AAGhB,aAAO,KAAK,aAAa,IAAc;AAGzC,QAAI,KAAS,KAAK,EAChB,IAAI,GACJ,MAAM,SAAU,IAAO;AACrB,aAAO,GAAU,QAAQ,SAAU,IAAU;AAC3C,eAAO,GAAS;;OAGpB,WAAW,SAAU,IAAM;AACzB,UAAI,KAAW,GAAW;AAC1B,aAAA,EAAU,IAAI,GAAS,OAChB,EACL,aAAa,WAAY;AACvB,UAAU,OAAO,GAAS;;OAIhC,MAAM,WAAY;AAChB,WAAW,MAEP,GAAW,OACb;OAGJ,QAAQ,WAAY;AAClB,aAAO,EACL,IAAI;OAGR,aAAa,WAAY;AACvB,aAAO;SAER,EAAG,MAAoB,WAAY;AACpC,aAAO;OACN;AACH,WAAA,KAAK,SAAS,IAAI,GAAI,KACf;KAGT,EAAY,UAAU,kBAAkB,SAAU,GAAQ,GAAI;AAC5D,QAAI,GAEA,IAAQ,MAER,IACA,KAAe,EAAO,UAAU,SAAU,GAAO;AACnD,WAAU,GAEV,EAAM,KAAK,GAAa,GAAO,EAC7B,QAAQ;OAET,SAAU,GAAK;AAChB,QAAM,YAAY,IAElB,EAAM,KAAK,GAAa,GAAM,GAAI,IAAM,EACtC,QAAQ;OAET,WAAY;AACb,QAAM,YAAY,IAElB,EAAM,KAAK,GAAa,GAAW,IAAK,EACtC,QAAQ;QAGR,IAAS,KAAK,EAChB,IAAI,GACJ,MAAM,WAAY;OAGlB,WAAW,SAAU,GAAM,GAAa,IAAU;AAChD,aAAO,EAAO,UAAU,GAAM,GAAa;OAE7C,MAAM,WAAY;AAChB,aAAO,GAAa;OAEtB,aAAa,WAAY;AACvB,aAAO;OAET,QAAQ,WAAY;AAClB,aAAO,EACL,IAAI;SAGP,EAAG,MAAoB,WAAY;AACpC,aAAO;OACN;AACH,WAAA,KAAK,SAAS,IAAI,GAAI,IACf;KAGT,EAAY,UAAU,aAAa,SAAU,GAAO,GAAM;AACxD,WAAA,KAAK,SAAS,IAAI,GAAM,IACjB;KAGT,EAAY,UAAU,gBAAgB,SAAU,GAAU;AACxD,QAAI,IAAiB,KAAK,QAAQ,WAAW,KAAK,QAAQ,QAAQ,aAAa,KAAK,QAAQ,QAAQ,WAAW,EAAS,QAAQ;AAEhI,QAAI,CAAC,GAAgB;AACd,YACH,GAAK,OAAO,yCAAyC,OAAO,EAAS,MAAM;AAI7E;;AAIF,QAAI,IAAU,EAAe,KAAK,MAAM,SAAS;AACjD,SAAK,YAAY,EAAS,IAAI;KAGhC,EAAY,UAAU,cAAc,SAAU,GAAI,GAAS;AACzD,QAAI;AAEJ,SAAK,SAAS,IAAI,GAAK,KAAK,EAC1B,IAAI,GACJ,MAAM,WAAY;OAGlB,WAAW,WAAY;AACrB,aAAO,EACL,aAAa,WAAY;;OAK7B,MAAM,KAAW,QACjB,aAAa,WAAY;OAGzB,QAAQ,WAAY;AAClB,aAAO,EACL,IAAI;SAGP,EAAG,MAAoB,WAAY;AACpC,aAAO;OACN;KAGL,EAAY,UAAU,YAAY,WAAY;AAC5C,QAAI,IAAS;AAEb,QAAI,KAAK,QAAQ,YAAY,GAAQ;AACnC,UAAI,EAAO,8BAA8B;AACvC,YAAI,IAAkB,OAAO,KAAK,QAAQ,YAAa,WAAW,KAAK,QAAQ,WAAW;AAC1F,aAAK,WAAW,EAAO,6BAA6B,QAAQ,EAAS,EAAS,EAC5E,MAAM,KAAK,IACX,WAAW,MACX,gBAAgB,SAAU,GAAO;AAC/B,iBAAO,EACL,OAAO,EAAM,OACb,SAAS,EAAM,SACf,SAAS,EAAM;aAGlB,IAAkB,EACnB,UAAU,EAAS,EACjB,MAAM,OACN,MAAM,SACL,IAAkB,EAAgB,WAAW,YAC9C,KAAK,UACT,KAAK,SAAS,KAAK,KAAK;;AAI1B,SAAgB;;KAIpB,EAAY,UAAU,SAAS,WAAY;AACzC,WAAO,EACL,IAAI,KAAK;KAIb,EAAY,UAAU,MAAoB,WAAY;AACpD,WAAO;KAGT,EAAY,UAAU,cAAc,WAAY;AAC9C,WAAI,KAAK,WAAW,GAAkB,aAC7B,KAAK,eAGP,KAAK;KAUd,EAAY,iBAAiB,EAC3B,SAAS,MACT,aAAa,MACb,OAAO,EACL,YAAY,SAAU,GAAI,GAAI;AAC5B,WAAO,WAAW,GAAI;KAExB,cAAc,SAAU,GAAI;AAC1B,WAAO,aAAa;OAGxB,QAAqB,QAAQ,IAAI,KAAK,UACtC,UAAU,SAEZ,EAAY,YAAY,IACjB;;AAqCT,YAAmB,GAAS,GAAS;AACnC,MAAI,IAAc,IAAI,GAAY,GAAS;AAC3C,SAAO;;AAFT;AAAS,GAAA,IAAA;ACt2CT,YAAwB,GAAK;AAC3B,MAAI,OAAO,KAAQ,UAAU;AAC3B,QAAI,IAAY,EACd,MAAM;AAGR,WAAA,EAAU,WAAW,WAAY;AAC/B,aAAO;OAIF;;AAGT,SAAO;;AAdT;AAAS,GAAA,IAAA;AAgBT,YAA4B,GAAc;AACxC,SAAO,EAAS,EAAS,EACvB,MAAM,MACL,IAAe,EAChB,QAAQ,WAAY;AAClB,MAAa,QACT,EAAa;AACb,QAAI,IAAY,GAAO,GAAc,CAAC,UAAU;AAEpD,WAAO,EAAS,EAAS,IAAI,IAAY,EACvC,MAAM,IACN,KAAK,GAAe,EAAa;;;AAXzC;AAAS,GAAA,IAAA;ACVT,IAAI,KAAa;AAAjB,IACI,KAAmB;AADvB,IAEI,KAAW;AAFf,IAGI,KAAe;AAHnB,IAKI,KAAY,GAAA,SAAU,GAAK;AAC7B,SAAO,EAAI,OAAO;GADJ;AALhB,IASI,KAAuB,GAAA,WAAY;AACrC,SAAO,EACL,SAAS,IACT,QAAQ,IACR,UAAU,IACV,YAAY,IACZ,QAAQ;GANe;AAT3B,IAmBI,KAAgC,GAAA,SAAU,GAAW,GAAO,GAAa;AAC3E,MAAI,IAA4B,EAAY,MAAM,GAAG,IAAI,KAAK,SAAU,IAAY;AAClF,WAAO,CAAE,WAAU,OAAe,CAAE,SAAQ,OAAgB,IAAS,GAAW,WAAW,GAAU,GAAW;MAE9G,IAAY,MAAU,KAAa,wBAAwB,UAAU,OAAO,GAAO;AACvF,KAAK,CAAC,GAA2B,+BAA+B,OAAO,GAAW,eAAe,OAAO,EAAU,IAAI,yBAAyB;GAL7G;AAnBpC,IA2BI,KAIJ,WAAY;AACV,aAIA,GAAQ,GAIR,GACA,GAAY;AACV,QAAI,KAAQ;AAER,UAAa,UACf,KAAW,aAAa,IAAS,EAAO,UAAU;AAGpD,QAAI;AAEJ,SAAK,SAAS,GACd,KAAK,WAAW,GAKhB,KAAK,QAAQ,IACb,KAAK,eAAe,MACpB,KAAK,UAAU,EACb,QAAQ,QACR,eAAe,oBAAI,OACnB,mBAAmB,QACnB,cAAc,QACd,IAAI,QACJ,aAAa,QACb,YAAY,IACZ,oBAAoB,UAEtB,KAAK,QAAQ,IACb,KAAK,OAAO,IACZ,KAAK,UAAU,OAAO,OAAO,MAAwB,IACrD,KAAK,SAAS,KAAe,OAAgC,SAAS,EAAW,QACjF,KAAK,MAAM,KAAK,OAAO,OAAQ,MAAe,OAAgC,SAAS,EAAW,QAAQ,KAAK,OAAO,MAAM,aAC5H,KAAK,UAAU,KAAK,SAAS,KAAK,OAAO,UAAU,MACnD,KAAK,OAAO,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,IAC9D,KAAK,YAAY,KAAK,OAAO,aAAc,MAAK,SAAS,KAAK,OAAO,YAAY,KACjF,KAAK,KAAK,KAAK,OAAO,MAAM,GAAc,CAAC,KAAK,QAAQ,MAAM,GAAO,KAAK,OAAO,OAAO,KAAK,KAAK,YAClG,KAAK,UAAU,KAAK,SAAS,KAAK,OAAO,UAAU,KAAK,OAAO,SAC/D,KAAK,OAAO,KAAK,OAAO,QAAS,MAAK,OAAO,WAAW,aAAa,KAAK,OAAO,UAAU,OAAO,KAAK,KAAK,OAAO,QAAQ,SAAS,aAAa,KAAK,OAAO,UAAU,YAAY,WACnL,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ,SAAU,MAAK,KAAK,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAK,IAC7G,KAAK,cAAc,KAAK,OAAO,aAE1B,MACH,GAAK,CAAE,eAAc,KAAK,SAAS,6EAA+E,OAAO,KAAK,OAAO,WAAW,oCAAoC,eAAe,OAAO,KAAK,MAAM,OAAO,mCAAmC,OAAO,KAAK,IAAI,gBAGjR,KAAK,UAAU,KAAK,OAAO,SAC3B,KAAK,SAAS,KAAK,OAAO,SAAS,GAAU,KAAK,OAAO,QAAQ,SAAU,GAAa,IAAK;AAC3F,UAAI,IAEA,KAAY,IAAI,EAAU,GAAa,IAAI,QAAW,EACxD,QAAQ,IACR,KAAK;AAEP,aAAA,OAAO,OAAO,GAAM,OAAO,EAAU,MAAK,IAAI,GAAG,GAAU,MAAM,IAAW,KAAK,GAAU,SACpF;SACJ;AAEL,QAAI,IAAQ;AAEZ,eAAa,GAAW;AACtB,UAAI,IAAK;AAET,QAAU,QAAQ;AAElB,UAAI;AACF,iBAAS,KAAK,GAAS,GAAY,KAAa,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AACxF,cAAI,KAAQ,GAAG;AACf,YAAI;;eAEC,GAFD;AAGN,aAAM,EACJ,OAAO;gBAAA;AAGT,YAAI;AACE,gBAAM,CAAC,GAAG,QAAS,MAAK,GAAG,WAAS,GAAG,KAAK;kBAAA;AAEhD,cAAI;AAAK,kBAAM,GAAI;;;;AAlBzB;AAAS,OAAA,GAAA,QAuBT,EAAI,OAEJ,KAAK,UAAU,KAAK,OAAO,YAAY,OAAO,YAAY,KAAK,OAAO,WAAW,OACjF,KAAK,aAAa,CAAC,CAAC,KAAK,OAAO,UAAY,MAAK,OAAO,KAAa,MAAM,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,SAAU,GAAI;AACrI,UAAI,KAAQ,EAAG;AACf,aAAO,OAAU;SACd,MAAc,KAAK,OAAO,KAH8B,QAI7D,KAAK,SAAS,CAAC,CAAC,KAAK,OAAO,QAE5B,KAAK,UAAU,GAAQ,KAAK,OAAO,SAAS,KAAK,OAAO,SAAS,IAAI,SAAU,GAAQ;AACrF,aAAO,GAAe;QAGxB,KAAK,SAAS,GAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ,IAAI,SAAU,GAAQ;AAClF,aAAO,GAAe;QAExB,KAAK,OAAO,KAAK,OAAO,MACxB,KAAK,WAAW,KAAK,SAAS,UAAU,KAAK,OAAO,OAAO,QAC3D,KAAK,SAAS,GAAQ,KAAK,OAAO,QAAQ,IAAI,SAAU,GAAc,IAAG;AACvE,UAAI,IAAI;AAER,UAAI,GAAU,IAAe;AAC3B,YAAI,KAAW,GAAe,GAAM,IAAI;AACxC,eAAA,GAAM,QAAQ,QAAQ,WAAW,EAAU,MAAK,IAAI,GAAG,MAAY,GAAc,KAAK,GAAM,QAAQ,QAAQ,WACrG,GAAmB,EACxB,KAAK,IACL,IAAI;iBAEG,GAAS,EAAa,MAAM;AACrC,YAAI,KAAW,EAAa,MAAM,GAAe,GAAM,IAAI;AAC3D,eAAO,GAAmB,EAAS,EAAS,IAAI,IAAe,EAC7D,IAAI,IACJ,KAAK,EAAa;iBAEX,GAAU,EAAa,QAAQ,GAAW,EAAa,MAAM;AACtE,YAAI,KAAW,EAAa,MAAM,GAAe,GAAM,IAAI;AAC3D,eAAA,GAAM,QAAQ,QAAQ,WAAW,EAAU,MAAK,IAAI,GAAG,MAAY,EAAa,KAAK,KAAK,GAAM,QAAQ,QAAQ,WACzG,GAAmB,EAAS,EAAS,EAC1C,IAAI,MACH,IAAe,EAChB,KAAK;aAEF;AACL,YAAI,KAAe,EAAa;AAChC,eAAO,GAAmB,EAAS,EAAS,EAC1C,IAAI,GAAe,GAAM,IAAI,OAC5B,IAAe,EAChB,KAAK;;QAIX,KAAK,aAAa,GAAQ,KAAK,OAAO,YAAY,OAAO,KAAK,QAAQ,IAAI,SAAU,GAAU;AAC5F,aAAO,GAAqB;QAE9B,KAAK,aAAa,KAAK,WAAW,KAAK,OACvC,KAAK,OAAO,GAAQ,KAAK,OAAO;;AAlJlC;AAAS,SAAA,GAAA,GAAA,cAyJT,EAAU,UAAU,QAAQ,WAAY;AAClC,SAAK,QAAQ,eAIjB,GAAiB,MAAM,QAAQ,SAAU,GAAW;AAClD,aAAO,EAAU;;KAWrB,EAAU,UAAU,aAAa,SAAU,GAAS,GAAS;AAC3D,QAAI,IAAK,KAAK,SACV,IAAU,EAAG,SACb,KAAa,EAAG,YAChB,KAAS,EAAG,QACZ,IAAW,EAAG,UACd,IAAS,EAAG;AAChB,WAAO,IAAI,EAAU,KAAK,QAAQ,EAChC,SAAS,EAAS,EAAS,IAAI,IAAU,EAAQ,UACjD,YAAY,EAAS,EAAS,IAAI,KAAa,EAAQ,aACvD,QAAQ,EAAS,EAAS,IAAI,KAAS,EAAQ,SAC/C,UAAU,EAAS,EAAS,IAAI,IAAW,EAAQ,WACnD,QAAQ,EAAS,EAAS,IAAI,IAAS,EAAQ,WAC9C,KAAY,OAA6B,IAAU,KAAK;KAS7D,EAAU,UAAU,cAAc,SAAU,GAAS;AACnD,WAAO,IAAI,EAAU,KAAK,QAAQ,KAAK,SAAS;KAGlD,OAAO,eAAe,EAAU,WAAW,WAAW,EACpD,KAAK,WAAY;AACf,WAAO,GAAW,KAAK,YAAY,KAAK,aAAa,KAAK;KAE5D,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,cAAc,EAIvD,KAAK,WAAY;AACf,WAAO,EACL,IAAI,KAAK,IACT,KAAK,KAAK,KACV,SAAS,KAAK,SACd,SAAS,KAAK,SACd,MAAM,KAAK,MACX,SAAS,KAAK,SACd,SAAS,KAAK,SACd,QAAQ,GAAU,KAAK,QAAQ,SAAU,GAAO;AAC9C,aAAO,EAAM;QAEf,IAAI,KAAK,IACT,aAAa,KAAK,aAClB,OAAO,KAAK,SACZ,MAAM,KAAK,QACX,YAAY,KAAK,cAAc,IAC/B,MAAM,KAAK,MACX,OAAO,KAAK,SAAS,IACrB,MAAM,KAAK,UACX,QAAQ,KAAK,QACb,aAAa,KAAK,aAClB,MAAM,KAAK;KAGf,YAAY,OACZ,cAAc,SAGhB,EAAU,UAAU,SAAS,WAAY;AACvC,WAAO,KAAK;KAGd,OAAO,eAAe,EAAU,WAAW,MAAM,EAI/C,KAAK,WAAY;AACf,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,QAAQ;AAGtB,QAAI,IAAc,KAAK;AACvB,WAAO,KAAK,QAAQ,KAAK,EAAY,OAAO,SAAU,GAAK,GAAY;AACrE,aAAA,EAAI,EAAW,aAAa,EAAI,EAAW,cAAc,IACzD,EAAI,EAAW,WAAW,KAAK,IACxB;OACN;KAEL,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,SAAS,EAClD,KAAK,WAAY;AACf,WAAO,KAAK,QAAQ,sBAAuB,MAAK,QAAQ,qBAAqB,KAAK,yBAAyB,KAAK,QAAQ;KAE1H,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,eAAe,EAIxD,KAAK,WAAY;AACf,WAAO,KAAK,QAAQ,eAAgB,MAAK,QAAQ,cAAc,KAAK,qBAAqB,KAAK,QAAQ;KAExG,YAAY,OACZ,cAAc,SAGhB,EAAU,UAAU,gBAAgB,SAAU,GAAW;AACvD,QAAI,KAAK,QAAQ,WAAW;AAC1B,aAAO,KAAK,QAAQ,WAAW;AAGjC,QAAI,IAAY,MAAc,IAC1B,IAAa,KAAK,YAAY,OAAO,SAAU,GAAY;AAC7D,UAAI,KAAgB,EAAW,cAAc;AAE7C,aAAO,IAAY,KAAgB,MAAiB,EAAW,cAAc;;AAE/E,WAAA,KAAK,QAAQ,WAAW,KAAa,GAC9B;KAOT,EAAU,UAAU,wBAAwB,WAAY;AACtD,QAAI,IAAQ,MAER,IAAc,KAAK,OAAO;AAE9B,QAAI,CAAC;AACH,aAAO;AAGT,QAAI,IAAkB,GAAA,SAAU,IAAO,IAAG;AACxC,UAAI,IAAW,GAAW,MAAS,GAAG,OAAO,EAAM,IAAI,WAAW,OAAO,IAAG,OAAO,IAC/E,IAAY,GAAM,GAAU,EAAM;AAEtC,aAAA,EAAM,QAAQ,KAAK,GAAO,GAAW,EACnC,OAAO,QAGT,EAAM,OAAO,KAAK,GAAO,KAElB;OAVa,oBAalB,IAAqB,GAAQ,KAAe,EAAY,IAAI,SAAU,IAAY,IAAG;AACvF,UAAI,IAAY,EAAgB,GAAW,OAAO;AAClD,aAAO,EAAS,EAAS,IAAI,KAAa,EACxC,OAAO;SAEN,GAAQ,OAAO,KAAK,GAAa,IAAI,SAAU,IAAO,IAAG;AAC5D,UAAI,IAAmB,EAAY,KAC/B,IAAqB,GAAS,KAAoB,EACpD,QAAQ,MACN,GACA,IAAiB,MAAM,CAAC,MAAkB,KAAT,CAAC,IAClC,KAAY,EAAgB,GAAe;AAC/C,aAAO,GAAQ,GAAoB,IAAI,SAAU,IAAY;AAC3D,eAAO,EAAS,EAAS,IAAI,KAAa,EACxC,OAAO,IACP,OAAO;;;AAIb,WAAO,EAAmB,IAAI,SAAU,IAAmB;AACzD,UAAI,KAAQ,GAAkB;AAC9B,aAAO,EAAS,EAAS,IAAI,EAAM,iBAAiB,MAAqB,EACvE,OAAO;;KAWb,EAAU,UAAU,gBAAgB,SAAU,GAAO;AACnD,QAAI,GAEA,IAAQ;AAEZ,QAAI,CAAC;AACH,aAAO;AAGT,QAAI,IAAa,aAAiB,KAAQ,EAAM,QAAQ,GAAa,GAAO,KAAK;AAEjF,QAAI,GAAS,IAAa;AACxB,UAAI,KAAoB,KAAK,aAAa,GAAY;AACtD,aAAO,OAAsB,SAAY,KAAK,cAAe,KAAK,IAAI,EAAG,KAAc,IAAmB,MAAO,CAAC,MAAM,KAAK,OAAO;;AAGtI,QAAI,KAAe,OAAO,KAAK,IAC3B,IAAgB,CAAC;AACrB,WAAA,EAAc,KAAK,MAAM,GAAe,GAAc,IAAI,GAAO,GAAQ,GAAa,IAAI,SAAU,GAAa;AAC/G,aAAO,EAAM,aAAa,GAAa,cAAc,EAAW;UAC5D,SACC;KAST,EAAU,UAAU,UAAU,SAAU,GAAO;AAC7C,QAAI,IAAY,GAAa;AAC7B,WAAO,KAAK,OAAO,SAAS;KAW9B,EAAU,UAAU,eAAe,SAAU,GAAO;AAClD,QAAI,IAAkB,aAAiB,KAAQ,IAAQ,GAAM,OAAO,IAChE,IAAgB,MAAM,KAAK,GAAiB,IAAI,KAAK,cAAc,EAAgB;AACvF,WAAO,IAAI,GAAM,EAAS,EAAS,IAAI,IAAkB,EACvD,OAAO,KAAK,QAAQ,EAAgB,QACpC,eAAe,GACf,MAAM,GAAe,GAAe,OACpC,MAAM,GAAyB,IAC/B,SAAS,KAAK;KAIlB,EAAU,UAAU,qBAAqB,SAAU,GAAY,GAAO,GAAQ;AAC5E,QAAI,IAAY,KAAK,aAAa,IAC9B,KAAO,EAAU,KAAK,GAAO;AAEjC,WAAI,CAAC,MAAQ,CAAC,GAAK,YAAY,SACtB,KAAK,KAAK,GAAO,KAGnB;KAGT,EAAU,UAAU,yBAAyB,SAAU,GAAY,GAAO,GAAQ;AAChF,QAAI,IAAe,OAAO,KAAK,IAC3B,KAAY,KAAK,aAAa,EAAa,KAE3C,KAAO,GAAU,YAAY,EAAW,EAAa,KAAK,GAAO;AAErE,WAAI,CAAC,MAAQ,CAAC,GAAK,YAAY,SACtB,KAAK,KAAK,GAAO,KAGnB;KAGT,EAAU,UAAU,yBAAyB,SAAU,GAAY,GAAO,GAAQ;AAChF,QAAI,GAAK,IAEL,KAAgB;AAEpB,QAAI;AACF,eAAS,IAAK,GAAS,OAAO,KAAK,KAAc,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AACzF,YAAI,IAAc,EAAG,OACjB,KAAgB,EAAW;AAE/B,YAAI,CAAA,CAAC,IAIL;AAAA,cAAI,KAAe,KAAK,aAAa,IAEjC,KAAO,GAAa,YAAY,IAAe,GAAO;AAEtD,gBACF,IAAc,KAAe;;;aAG1B,IAH0B;AAIjC,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAM,CAAC,EAAG,QAAS,MAAK,EAAG,WAAS,GAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI,KAAmB,OAAO,KAAK,IAAe,IAAI,SAAU,IAAK;AACnE,aAAO,GAAc;QAEnB,KAAqB,GAAQ,GAAiB,IAAI,SAAU,IAAI;AAClE,aAAO,GAAG;SAER,IAAiB,GAAiB,KAAK,SAAU,IAAI;AACvD,aAAO,GAAG,YAAY,SAAS;;AAGjC,QAAI,CAAC;AACH,aAAO,KAAK,KAAK,GAAO;AAG1B,QAAI,IAAa,GAAQ,GAAiB,IAAI,SAAU,IAAG;AACzD,aAAO,GAAE;SAEP,IAAgB,GAAQ,OAAO,KAAK,IAAe,IAAI,SAAU,IAAK;AACxE,aAAO,GAAc,IAAK;;AAE5B,WAAO,EACL,aAAa,IACb,UAAU,GACV,SAAS,GAAQ,GAAiB,IAAI,SAAU,IAAG;AACjD,aAAO,GAAE;SAEX,eAAe,GACf,QAAQ,GACR,SAAS,GAAQ,OAAO,KAAK,IAAe,IAAI,SAAU,IAAK;AAC7D,aAAO,GAAc,IAAK;;KAKhC,EAAU,UAAU,cAAc,SAAU,GAAY,GAAO,GAAQ;AAErE,WAAI,GAAS,KACJ,KAAK,mBAAmB,GAAY,GAAO,KAIhD,OAAO,KAAK,GAAY,WAAW,IAC9B,KAAK,uBAAuB,GAAY,GAAO,KAIjD,KAAK,uBAAuB,GAAY,GAAO;KAGxD,EAAU,UAAU,oBAAoB,SAAU,GAAO,GAAO;AAC9D,WAAO,KAAK,YAAY,EAAM,OAAO,GAAO,GAAa;KAG3D,EAAU,UAAU,OAAO,SAAU,GAAO,GAAQ;AAClD,QAAI,GAAK,GAEL,KAAQ,MAER,KAAY,EAAO,MACnB,IAAU,IACV,IAAiB,IACjB;AAEJ,QAAI;AACF,eAAS,KAAK,GAAS,KAAK,cAAc,MAAa,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AAC/F,YAAI,KAAY,GAAG,OACf,KAAO,GAAU,MACjB,KAAU,GAAU,IACpB,IAAkB,EAAM,SACxB,IAAY,KAAU,GAAS,OAAY,GAAU,MACzD,EAAM,QAAQ,GAAa,KAAK,iBAAiB,IAAS,MAAM,KAAK,cACrE,GAAa,GAAa,IAAS,KAAK,YAAY,GAAK,KAAK,KAAK,MAAM,GAAG,KAAK,EAAM,UAAU,MAC7F,IAAc;AAElB,YAAI;AACF,cAAc,CAAC,MAAQ,GAAc,KAAK,SAAS,IAAM,GAAiB,GAAQ;iBAC3E,GAD2E;AAElF,gBAAM,IAAI,MAAM,6BAA6B,OAAO,GAAK,QAAQ,GAAK,MAAM,+BAA+B,OAAO,IAAW,qBAAqB,OAAO,KAAK,IAAI;GAAQ,OAAO,EAAI;;AAGvL,YAAI,KAAe,GAAW;AACxB,aAAU,WAAW,UACvB,KAAiB,GAAU,SAG7B,EAAQ,KAAK,MAAM,GAAS,GAAc,IAAI,GAAO,GAAU,UAAU,SACzE,IAAqB;AACrB;;;aAGG,GAHH;AAIJ,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;gBAAA;AAEhD,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI,CAAA,CAAC,GAIL;AAAA,UAAI,CAAC,EAAe;AAClB,eAAO,EACL,aAAa,CAAC,IACd,UAAU,IACV,SAAS,IACT,eAAe,EAAM,QAAQ,CAAC,QAAQ,IACtC,QAAQ,GACR,SAAS;AAIb,UAAI,KAAoB,GAAQ,EAAe,IAAI,SAAU,GAAW;AACtE,eAAO,GAAM,sBAAsB,GAAW,EAAM;WAElD,IAAa,CAAC,CAAC,EAAmB,UAClC,IAAe,IAAa,KAAK,GAAQ,GAAkB,IAAI,SAAU,GAAG;AAC9E,eAAO,GAAM,eAAe;;AAE9B,aAAO,EACL,aAAa,CAAC,IACd,UAAU,GACV,SAAS,IAAa,KAAK,CAAC,OAC5B,eAAe,IACf,QAAQ,GACR,SAAS;;KAIb,EAAU,UAAU,iBAAiB,SAAU,GAAgB;AAC7D,QAAI,EAAe,QAAQ;AACzB,aAAO;AAMT,aAHI,IAAQ,IACR,IAAS,GAEN,KAAU,MAAW;AAC1B,QAAM,KAAK,IACX,IAAS,EAAO;AAGlB,WAAA,EAAM,KAAK,OAEJ;KAQT,EAAU,UAAU,UAAU,SAAU,GAAW;AACjD,QAAI,SAAS;AACX,aAAO;AAKT,aAFI,IAAS,KAAK,QAEX,KAAQ;AACb,UAAI,MAAW;AACb,eAAO;AAGT,UAAS,EAAO;;AAGlB,WAAO;KAGT,EAAU,UAAU,aAAa,SAAU,GAAY,GAAgB,GAAQ,GAAW;AACxF,QAAI,IAAK,IAAI,GAAK,GAEd,IAAa,GAAiB,IAAI,IAAY,KAAK,cAAc,EAAU,SAAS,CAAC,QACrF,KAAiB,EAAW,cAAc,SAAS,GAAiB,GAAY,EAAW,iBAAiB;AAEhH,QAAI;AACF,eAAS,KAAmB,GAAS,KAAiB,KAAqB,GAAiB,QAAQ,CAAC,GAAmB,MAAM,KAAqB,GAAiB,QAAQ;AAC1K,YAAI,KAAK,GAAmB;AAEvB,WAAI,GAAY,OACnB,EAAW,SAAS,KAAK;;aAGtB,GAHsB;AAI7B,WAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,cAAsB,CAAC,GAAmB,QAAS,MAAK,GAAiB,WAAS,GAAG,KAAK;gBAAA;AAE9F,YAAI;AAAK,gBAAM,GAAI;;;AAIvB,QAAI;AACF,eAAS,KAAe,GAAS,IAAa,IAAiB,GAAa,QAAQ,CAAC,EAAe,MAAM,IAAiB,GAAa,QAAQ;AAC9I,YAAI,KAAK,EAAe;AAEpB,QAAA,EAAC,GAAI,IAAgB,OAAO,GAAI,EAAW,SAAS,GAAG,YACzD,EAAW,QAAQ,KAAK;;aAGrB,GAHqB;AAI5B,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAkB,CAAC,EAAe,QAAS,KAAK,GAAa,WAAS,EAAG,KAAK;gBAAA;AAElF,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,QAAI,IAAa,GAAQ,EAAW,SAAS,IAAI,SAAU,GAAI;AAC7D,UAAI,IAAS;AAEb,UAAI,EAAG,SAAS;AACd,eAAO;AAGT,UAAI,IAAS,EAAG;AAEhB,UAAI,CAAC,EAAO;AACV,eAAO;AAGT,QAAO,KAAK,GAAK,EAAG,IAAI,EAAG,WAC3B,GAAK,EAAO,IAAI,EAAG,WAAW,GAAW,EAAG,UAAU,GAAgB,KAAU;AAChF,UAAI,IAAc,EAAO;AAEzB,aAAI,EAAY,SAAS,cACnB,GAAY,GAAa,MAAM,SAAU,IAAY;AACvD,eAAO,GAAe,EAAW,eAAe;YAEhD,EAAO,KAAK,GAAK,EAAY,MAI1B;;AAET,MAAW,QAAQ,KAAK,SAAU,GAAG,GAAG;AACtC,aAAO,EAAE,QAAQ,EAAE;QAErB,EAAW,SAAS,KAAK,SAAU,GAAG,GAAG;AACvC,aAAO,EAAE,QAAQ,EAAE;;AAErB,QAAI,IAAc,IAAI,IAAI,EAAW,WACjC,KAAa,IAAI,IAAI,EAAW,UAEhC,IAAK,GAAO,CAAC,GAAQ,MAAM,KAAK,GAAa,IAAI,SAAU,GAAW;AACxE,aAAO,GAAc,GAAc,IAAI,GAAO,EAAU,WAAW,IAAI,SAAU,GAAU;AACzF,eAAO,GAAM;WACV,QAAQ,GAAO,EAAU,UAAU;QACtC,OAAO,EAAW,IAAI,MAAS,GAAQ,MAAM,KAAK,IAAY,IAAI,SAAU,GAAW;AACzF,aAAO,GAAc,GAAc,IAAI,GAAO,EAAU,SAAS,QAAQ,GAAO,EAAU,WAAW,IAAI,SAAU,GAAU;AAC3H,eAAO,GAAK;WACT;UACD,IACF,IAAe,EAAG,IAClB,IAAc,EAAG,IAEjB,KAAU,GAAgB,EAAY,OAAO,EAAW,SAAS,OAAO,IAAe,KAAK,QAAQ,QAAQ;AAChH,WAAO;KAWT,EAAU,UAAU,aAAa,SAAU,GAAO,GAAO,GAAS;AAC5D,UAAU,UACZ,KAAQ,KAAK;AAGf,QAAI,IAAS,GAAa,IAEtB;AAEJ,QAAI,aAAiB;AACnB,WAAe,MAAY,SAAY,IAAQ,KAAK,aAAa,GAAM,KAAK,GAAO;SAC9E;AACL,UAAI,KAAqB,GAAS,KAAS,KAAK,QAAQ,GAAiB,KAAK,gBAAgB,OAAW,KAAK,QAAQ,IAClH,IAAkB,KAAY,OAA6B,IAAU,KAAK,QAAQ;AACtF,WAAe,KAAK,aAAa,GAAM,KAAK,IAAoB;;AAGlE,QAAI,CAAC,MAAiB,EAAO,SAAS;AACpC,YAAM,IAAI,MAAM,4CAA4C,OAAO,IAAU;AAG/E,QAAI,KAAK,UACH,CAAC,KAAK,OAAO,SAAS,EAAO,SAAS,CAAC,GAAe,EAAO;AAC/D,YAAM,IAAI,MAAM,YAAY,OAAO,KAAK,IAAI,6BAA6B,OAAO,EAAO,MAAM;AAIjG,QAAI,IAAkB,KAAK,YAAY,GAAa,OAAO,IAAc,MAAW,EAClF,aAAa,IACb,eAAe,IACf,UAAU,IACV,SAAS,IACT,QAAQ,IACR,SAAS,MAEP,IAAa,GAAiB,IAAI,KAAK,cAAc,GAAa,SAClE,KAAiB,EAAgB,cAAc,SAAS,GAAiB,GAAY,EAAgB,iBAAiB;AAC1H,WAAA,EAAgB,gBAAgB,GAAc,IAAI,GAAO,KAAiB,QACnE,KAAK,kBAAkB,GAAiB,IAAc,GAAa,SAAS;KAGrF,EAAU,UAAU,0BAA0B,SAAU,GAAO,GAAQ,GAAe;AACpF,QAAI,GAEA,KAAiB,EAAM;AAC3B,WAAA,IAAQ,KAAK,WAAW,GAAO,IAG/B,EAAM,SAAS,GACf,EAAM,QAAQ,EAAc,MAE3B,KAAK,EAAM,SAAS,QAAQ,MAAM,GAAI,GAAc,IAAI,GAAO,KAAiB,SAE1E;KAGT,EAAU,UAAU,oBAAoB,SAAU,GAAiB,GAAc,GAAS,GAAQ;AAChG,QAAI,IAAK,IAEL,IAAQ;AAER,UAAW,UACb,KAAS;AAGX,QAAI,IAAgB,EAAgB,eAIhC,IAAiB,CAAC,KAAgB,EAAgB,YAAY,SAAS,GACvE,KAAqB,IAAiB,GAAS,KAAK,SAAS,KAAiB,QAC9E,KAAe,IAAe,EAAa,eAAe,EAAa,eAAe,EAAgB,SAAS,KAAK,QAAQ,aAAa,EAAa,SAAS,SAAY,QAC3K,KAAU,KAAK,WAAW,GAAiB,GAAS,GAAQ,IAC5D,KAAa,IAAe,EAAS,IAAI,EAAa,cAAc;AAExE,QAAI;AACF,eAAS,KAAY,GAAS,KAAU,IAAc,GAAU,QAAQ,CAAC,EAAY,MAAM,IAAc,GAAU,QAAQ;AACzH,YAAI,IAAS,EAAY;AAErB,UAAO,SAAS,KAClB,GAAW,EAAO,SAAS,MAAM,EAAO,SAAS,QAAQ,IAChD,EAAO,SAAS,MACzB,IAAW,EAAO,SAAS,MAAM,EAAO,SAAS,QAAQ;;aAGtD,IAHsD;AAI7D,WAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAAe,CAAC,EAAY,QAAS,MAAK,GAAU,WAAS,GAAG,KAAK;gBAAA;AAEzE,YAAI;AAAK,gBAAM,GAAI;;;AAIvB,QAAI,IAAK,GAAO,GAAe,MAAM,GAAc,GAAS,GAAQ,IAAS,KAAK,QAAQ,OAAO,sBAAsB,IACnH,KAAkB,EAAG,IACrB,IAAiB,EAAG,IAEpB,IAAK,GAAO,GAAU,IAAiB,SAAU,IAAQ;AAC3D,aAAO,GAAO,SAAS,MAAW,GAAO,SAAS,MAAQ,GAAO,OAAO,GAAe;QACrF,IACA,IAAe,EAAG,IAClB,KAAmB,EAAG,IAEtB,IAAgB,GAAgB,OAAO,SAAU,IAAQ;AAC3D,UAAI;AAEJ,aAAO,GAAO,SAAS,MAAa,OAAK,GAAO,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,UAAU;QAE1G,IAAW,EAAc,OAAO,SAAU,IAAK,IAAQ;AACzD,aAAA,GAAI,GAAO,SAAS,MAAM,GAAqB,GAAO,UAAU,EAAM,SAAS,GAAgB,IACxF;OACN,IAAe,EAAS,IAAI,EAAa,YAAY,KACpD,IAAwB,IAAiB,EAAgB,gBAAgB,IAAe,EAAa,gBAAgB,IACrH,IAAS,GAAe,GAAuB,OAC/C,KAAY,IAAI,GAAM,EACxB,OAAO,MAAsB,EAAa,OAC1C,SAAS,GACT,QAAQ,GAER,YAAY,IAAe,EAAa,aAAa,MACrD,cAAc,KAAqB,KAAe,GAAmB,IAAc,MAAsB,SAAY,IAAe,EAAa,eAAe,QAChK,SAAS,CAAC,MAAsB,EAAgB,SAAS,IAAe,QACxE,SAAS,KAAqB,KAAmB,IACjD,YAAY,KAAqB,KAAa,IAAe,EAAa,aAAa,IACvF,QAAQ,IACR,eAAe,GACf,aAAa,EAAgB,aAC7B,UAAU,GACV,MAAM,GACN,MAAM,KAAiB,OAAkC,SAAS,EAAa,MAC/E,SAAS,SAEP,KAAmB,MAAY;AACnC,OAAU,UAAU,EAAO,SAAS,MAAU;AAE9C,QAAI,IAAU,GAAU;AAEpB,SACF,OAAO,EAAQ;AAKjB,QAAI,KAAc,CAAC,KAAW,MAAK,cAAc,EAAc,KAAK,SAAU,IAAW;AACvF,aAAO,GAAU;;AAWnB,QAAI,CAAC,KAAmB,EAAC,MAAe,EAAO,SAAS;AACtD,aAAO;AAGT,QAAI,KAAiB;AAErB,QAAI,CAAC;AAOH,WANI,MACF,MAAiB,KAAK,wBAAwB,IAAgB,EAC5D,MAAM,MACL,KAGE,EAAa,UAAQ;AAC1B,YAAI,KAAc,EAAa;AAC/B,aAAiB,KAAK,wBAAwB,IAAgB,GAAY,QAAQ;;AAKtF,QAAI,KAAU,GAAe,WAAY,KAAU,CAAC,CAAC,GAAe,QAAQ,UAAU,MAAoB,OAAO,EAAQ,SAAU,OAAO,GAAe,SAAS,CAAC,GAAiB,GAAe,OAAO,EAAQ,SAAS;AAC3N,WAAA,GAAe,UAAU,IAEzB,GAAe,UAAU,GACzB,GAAe,OAAO,GAAyB,GAAe,gBACvD;KAOT,EAAU,UAAU,eAAe,SAAU,GAAU;AACrD,QAAI,GAAU;AACZ,aAAO,KAAK,QAAQ,iBAAiB;AAGvC,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,mCAAmC,OAAO,GAAU,YAAY,OAAO,KAAK,IAAI;AAGlG,QAAI,IAAS,KAAK,OAAO;AAEzB,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,gBAAgB,OAAO,GAAU,yBAAyB,OAAO,KAAK,IAAI;AAG5F,WAAO;KAST,EAAU,UAAU,mBAAmB,SAAU,GAAS;AACxD,QAAI,IAAkB,GAAU,KAAW,EAAQ,MAAM,GAAiB,UAAU;AAEpF,QAAI,MAAoB,KAAK;AAC3B,aAAO;AAGT,QAAI,IAAY,KAAK,QAAQ,MAAM;AAEnC,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,sBAAsB,OAAO,GAAiB,iCAAiC,OAAO,KAAK,IAAI;AAGjH,WAAO;KAST,EAAU,UAAU,qBAAqB,SAAU,GAAW;AAC5D,QAAI,OAAO,KAAc,YAAY,GAAU;AAC7C,UAAI;AACF,eAAO,KAAK,iBAAiB,EAAU,MAAM;eACtC,IADsC;;AASjD,aAHI,IAAiB,GAAY,GAAW,KAAK,WAAW,SACxD,IAAmB,MAEhB,EAAe,UAAQ;AAC5B,UAAI,IAAM,EAAe;AAEzB,UAAI,CAAC,EAAI;AACP;AAGF,UAAmB,EAAiB,aAAa;;AAGnD,WAAO;KAST,EAAU,UAAU,UAAU,SAAU,GAAY;AAClD,QAAI,GAEA,IAAQ;AAEZ,QAAI,CAAC;AACH,aAAO,KAAK,qBAAqB;AAGnC,YAAQ,KAAK;WACN;AACH,eAAO,GAAU,KAAK,mBAAmB,SAAU,IAAe,IAAa;AAC7E,iBAAO,KAAgB,EAAM,aAAa,IAAa,QAAQ,EAAW,OAAgB,MAAiB;;WAG1G;AACH,YAAI,GAAS,IAAa;AACxB,cAAI,IAAe,KAAK,aAAa;AAErC,iBAAI,EAAa,SAAS,cAAc,EAAa,SAAS,aACrD,KAAK,IAAI,EAAG,KAAc,EAAa,mBAAmB,KAG5D;;AAGT,eAAK,OAAO,KAAK,GAAY,SAItB,GAAU,GAAY,SAAU,IAAe,IAAa;AACjE,iBAAO,KAAgB,EAAM,aAAa,IAAa,QAAQ,MAAiB;aAJzE,KAAK,qBAAqB;;AAQnC,eAAO,KAAc;;KAI3B,EAAU,UAAU,kBAAkB,SAAU,GAAiB;AAC/D,QAAI,GAAU,IAAkB;AAC9B,UAAI,IAAY,KAAK,QAAQ,MAAM,EAAgB,MAAM,GAAiB;AAE1E,UAAI,CAAC;AACH,cAAM,IAAI,MAAM,8BAA8B,OAAO,GAAiB;AAGxE,aAAO,EAAU;;AAGnB,WAAO,GAAY,GAAiB,KAAK;KAG3C,OAAO,eAAe,EAAU,WAAW,qBAAqB,EAC9D,KAAK,WAAY;AACf,QAAI;AAEJ,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,QAAQ;AAGtB,QAAI;AAEJ,QAAI,KAAK,SAAS;AAChB,UAAoB,GAAgB,KAAK,QAAQ,SAAU,GAAO;AAChE,eAAO,EAAM,qBAAqB;SACjC,SAAU,GAAW;AACtB,eAAS,EAAU,SAAS;;aAErB,KAAK,YAAY,QAAW;AACrC,UAAI,CAAC,KAAK,OAAO,KAAK;AACpB,cAAM,IAAI,MAAM,kBAAkB,OAAO,KAAK,SAAS,oBAAoB,OAAO,KAAK,KAAK;AAG9F,UAAoB,GAAW,KAAK,OAAO,KAAK,YAAY,KAAK,UAAW,KAAK,IAAI,EAAG,KAAK,WAAW,KAAK,OAAO,KAAK,SAAS,mBAAmB;;AAGrJ,UAAoB;AAGtB,WAAA,KAAK,QAAQ,oBAAoB,GAC1B,KAAK,QAAQ;KAEtB,YAAY,OACZ,cAAc,SAGhB,EAAU,UAAU,kBAAkB,SAAU,GAAY,GAAS;AACnE,SAAK;AAGL,QAAI,IAAgB,KAAK,cAAc;AACvC,WAAO,KAAK,kBAAkB,EAC5B,eAAe,GACf,UAAU,GACV,SAAS,IACT,aAAa,IACb,QAAQ,QACR,SAAS,MACR,QAAW,KAAY,OAA6B,IAAU,KAAK,QAAQ,SAAS;KAGzF,OAAO,eAAe,EAAU,WAAW,gBAAgB,EAKzD,KAAK,WAAY;AACf,QAAI,IAAoB,KAAK;AAE7B,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,oDAAoD,OAAO,KAAK,IAAI;AAGtF,WAAO,KAAK,gBAAgB;KAE9B,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,UAAU,EAKnD,KAAK,WAAY;AACf,QAAI;AAEJ,QAAI,KAAK,SAAS,WAAW;AAC3B,UAAI,IAAgB,KAAK;AAErB,SAAS,EAAc,UACzB,IAAS,GAAU,EAAc,UAAU,GAAiB,KAAK,QAAQ,iBAAiB,EAAc,QAAQ,KAAK,MAAM,KAAK,KAAK,SAAS,MAAM,EAAc,SAElK,IAAS,EAAc;;AAI3B,WAAO;KAET,YAAY,OACZ,cAAc,SAUhB,EAAU,UAAU,wBAAwB,SAAU,GAAiB,GAAc,GAAS;AAC5F,WAAI,MAAY,UACd,KAAU,OAGL,IAAU,EAAgB,SAAS,YAAY,EAAgB,eAAe,KAAgB,EAAgB,oBAAoB,CAAC;KAG5I,OAAO,eAAe,EAAU,WAAW,qBAAqB,EAC9D,KAAK,WAAY;AACf,QAAI,IAAQ;AAEZ,QAAI,GAAW;AACb,aAAO,CAAC;AAIV,QAAI,KAAK,SAAS,cAAc,CAAC,KAAK;AACpC,aAAK,MACH,GAAK,OAAO,wBAAwB,OAAO,KAAK,IAAI,6BAG/C,CAAC;AAGV,QAAI,IAAwB,GAAa,KAAK;AAC9C,WAAO,GAAQ,EAAsB,IAAI,SAAU,GAAa;AAC9D,aAAO,EAAM,oBAAoB;;KAGrC,YAAY,OACZ,cAAc,SAShB,EAAU,UAAU,sBAAsB,SAAU,GAAc;AAChE,QAAI,CAAC,EAAa;AAChB,aAAO,CAAC;AAGV,QAAI,IAAK,GAAO,IACZ,IAAW,EAAG,IACd,IAAiB,EAAG,MAAM;AAE9B,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,4BAA4B,OAAO,GAAU;AAG/D,QAAI,KAAiB,KAAK,aAAa;AAEvC,QAAI,GAAe,SAAS;AAC1B,aAAO,GAAe;AAGxB,QAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI,MAAM,gBAAgB,OAAO,GAAU,yBAAyB,OAAO,KAAK,IAAI;AAG5F,WAAO,KAAK,OAAO,GAAU,oBAAoB;KAGnD,EAAU,UAAU,eAAe,SAAU,GAAoB;AAC/D,QAAI,CAAA,CAAC,OAAO,KAAK,KAAK,QAAQ;AAI9B,aAAO,EACL,SAAS,KAAsB,KAAK,mBACpC,QAAQ,GAAgB,KAAK,QAAQ,SAAU,GAAW,GAAK;AAC7D,YAAI,CAAC;AACH,iBAAO,EAAU;AAGnB,YAAI,IAAgB,GAAS,KAAsB,SAAY,EAAmB;AAClF,eAAO,EAAU,aAAa,KAAiB,EAAU;SACxD,SAAU,GAAW;AACtB,eAAO,CAAC,EAAU;;KAYxB,EAAU,UAAU,iBAAiB,SAAU,GAAc;AAC3D,QAAI,IAAQ;AAEZ,QAAI,KAAK,SAAS;AAChB,aAAO,CAAC;AAGV,QAAI,IAAS,KAAK;AAElB,QAAI,CAAC,GAAc;AACjB,UAAI,IAAgB,KAAK;AACzB,aAAO,IAAgB,GAAQ,GAAa,GAAe,IAAI,SAAU,IAAmB;AAC1F,eAAO,EAAO,oBAAoB;YAC9B,EAAO;;AAGf,QAAI,KAAkB,GAAW,EAAO,MAAM,UAAU,GAAc;AAEtE,WAAI,GAAS,MACJ,CAAC,EAAO,aAAa,OAGvB,GAAQ,GAAa,IAAiB,IAAI,SAAU,IAAc;AACvE,aAAO,EAAM,YAAY,SAAS,EAAO,oBAAoB,MAAgB,CAAC,EAAO,OAAO,GAAa;;KAI7G,OAAO,eAAe,EAAU,WAAW,YAAY,EAIrD,KAAK,WAAY;AACf,QAAI,IAAQ,MAER,IAAgB,GAAQ,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAU,GAAU;AAC3E,aAAO,EAAM,OAAO,GAAU;;AAEhC,WAAO,CAAC,KAAK,IAAI,OAAO;KAE1B,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,UAAU,EAInD,KAAK,WAAY;AACf,QAAI,GAAK,GAAI,GAAK;AAElB,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,QAAQ;AAGtB,QAAI,KAAS,KAAK,QACd,KAAS,IAAI,IAAI,KAAK;AAE1B,QAAI;AACF,UAAI;AACF,iBAAS,IAAK,GAAS,OAAO,KAAK,MAAU,IAAK,EAAG,QAAQ,CAAC,EAAG,MAAM,IAAK,EAAG,QAAQ;AACrF,cAAI,IAAU,EAAG,OACb,KAAQ,GAAO;AAEnB,cAAI,GAAM;AACR,gBAAI;AACF,uBAAS,KAAM,KAAM,QAAQ,GAAS,GAAM,UAAU,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ;AAC9F,oBAAI,KAAU,GAAG;AACjB,mBAAO,IAAI,GAAG,OAAO;;qBAEhB,IAFgB;AAGvB,kBAAM,EACJ,OAAO;sBAAA;AAGT,kBAAI;AACE,sBAAM,CAAC,GAAG,QAAS,KAAK,GAAG,WAAS,EAAG,KAAK;wBAAA;AAEhD,oBAAI;AAAK,wBAAM,EAAI;;;;eAKpB,IALoB;AAM3B,YAAM,EACJ,OAAO;gBAAA;AAGT,YAAI;AACE,eAAM,CAAC,EAAG,QAAS,KAAK,EAAG,WAAS,EAAG,KAAK;kBAAA;AAEhD,cAAI;AAAK,kBAAM,EAAI;;;AAKzB,WAAO,KAAK,QAAQ,SAAS,MAAM,KAAK;KAE1C,YAAY,OACZ,cAAc,SAEhB,OAAO,eAAe,EAAU,WAAW,aAAa,EAMtD,KAAK,WAAY;AACf,QAAI,IAAS,IAAI,IAAI,KAAK,YAAY,OAAO,SAAU,GAAY;AACjE,aAAO,CAAE,EAAC,EAAW,UAAU,CAAC,EAAW,QAAQ,UAAU,EAAW;OACvE,IAAI,SAAU,GAAY;AAC3B,aAAO,EAAW;;AAEpB,WAAO,MAAM,KAAK;KAEpB,YAAY,OACZ,cAAc,SAGhB,EAAU,UAAU,gBAAgB,SAAU,GAAS;AACrD,QAAI,IAAQ;AAEZ,QAAI,MAAY;AAKhB,aAAO,EAAQ,IAAI,SAAU,GAAQ;AACnC,YAAI,CAAC,GAAS;AACZ,iBAAO;AAGT,YAAI,IAAmB,EAAO,OAAO,EAAM;AAG3C,YAAI,KAAoB,CAAC,EAAM;AAC7B,iBAAO,EAAM,mBAAmB,EAAO,MAAM;AAG/C,YAAI,KAAiB,IAAmB,EAAM,MAAM,IAAS;AAE7D,YAAI,EAAM;AACR,cAAI;AACF,gBAAI,KAAkB,EAAM,OAAO,mBAAmB;AAEtD,mBAAO;mBACA,GADA;AAEP,kBAAM,IAAI,MAAM,iDAAiD,OAAO,EAAM,IAAI;GAAQ,OAAO,EAAI;;;AAGvG,iBAAO,EAAM,mBAAmB;;KAKtC,EAAU,UAAU,mBAAmB,SAAU,GAAkB;AACjE,QAAI,IAAQ,MAER,IAAmB,GAAgB,EAAiB,SACpD,IAAW,cAAc,IAAmB,EAAiB,WAAW,IAAmB,EAAiB,KAAK,SAAU,GAAS;AACtI,aAAO,GAAS,MAAY,EAAQ,OAAO,EAAM;SAC9C,MACD,KAAS,KAAK,QAAQ,QAAQ,QAC9B,KAAS,KAAK,cAAc,IAE5B,IAAa,EAAS,EAAS,IAAI,IAAmB,EACxD,SAAS,GAAgB,GAAQ,EAAiB,WAClD,MAAM,GAAQ,EAAiB,MAAM,KACrC,QAAQ,IACR,QAAQ,MACR,UAAU,GACV,WAAW,EAAiB,OAC5B,QAAQ,WAAY;AAClB,aAAO,EAAS,EAAS,IAAI,IAAa,EACxC,QAAQ,EAAW,SAAS,EAAW,OAAO,IAAI,SAAU,GAAG;AAC7D,eAAO,IAAI,OAAO,EAAE;WACjB,QACL,QAAQ,IAAI,OAAO,EAAM;;AAK/B,WAAO;KAGT,EAAU,UAAU,oBAAoB,WAAY;AAClD,QAAI,GAAK,GAEL,IAAQ,MAER;AAEJ,QAAI,CAAC,KAAK,OAAO;AACf,UAAW;aACF,MAAM,QAAQ,KAAK,OAAO;AACnC,UAAW,KAAK,OAAO;SAClB;AACL,UAAI,KAAK,KAAK,OAAO,IACjB,KAAK,IACL,IAAK,GAAG,KACR,IAAkB,MAAO,SAAS,KAAK,GACvC,IAA4B,GAAO,IAAI,CAAC,OAAO,MAAO,WAAW,KAAK,KAAK;AAE/E,UAAW,GAAQ,OAAO,KAAK,GAA2B,IAAI,SAAU,IAAK;AACvE,SAAC,MAAiB,OAAQ,MAC5B,GAAK,OAAO,8KAA8K,6CAA8C,OAAO,EAAM,IAAI;AAG3P,YAAI,IAAwB,GAAwB,IAAK,EAA0B;AAEnF,eAAK,MACH,GAA8B,GAAO,IAAK,IAGrC;SACN,OAAO,GAAwB,IAAU;;AAG9C,QAAI,KAAkB,KAAK,OAAO,SAAS,GAAwB,IAAI,KAAK,OAAO,UAAU,IACzF,KAAa,KAAK,OAAO,SAAS,GAAwB,OAAO,GAAK,KAAK,MAAM,KAAK,OAAO,UAAU;AAEtG,UACH,GAAK,CAAE,MAAK,OAAO,UAAU,CAAC,KAAK,SAAS,+EAAkF,OAAO,KAAK,IAAI;AAGhJ,QAAI,KAAe,GAAQ,KAAK,OAAO,IAAI,SAAU,IAAW;AAC9D,UAAI,IAAoB;AAExB,aAAI,GAAU,UACZ,EAAkB,KAAK,MAAM,GAAmB,GAAc,IAAI,GAAO,GAAwB,OAAO,GAAW,GAAU,MAAM,GAAU,UAAU,SAGrJ,GAAU,WACZ,EAAkB,KAAK,MAAM,GAAmB,GAAc,IAAI,GAAO,GAAwB,OAAO,GAAM,GAAU,MAAM,GAAU,WAAW,SAG9I;SAEL,KAAqB,KAAK,OAC1B,KAAuB,GAAQ,GAAc,GAAc,GAAc,GAAc,IAAI,GAAO,KAAa,QAAQ,GAAO,KAAe,QAAQ,GAAO,IAAW,QAAQ,GAAO,KAAkB,OAAO,IAAI,SAAU,IAAkB;AACjP,aAAO,GAAQ,IAAkB,IAAI,SAAU,GAAY;AACzD,eAAO,EAAM,iBAAiB;;;AAIlC,QAAI;AACF,eAAS,IAAuB,GAAS,KAAqB,IAAyB,EAAqB,QAAQ,CAAC,EAAuB,MAAM,IAAyB,EAAqB,QAAQ;AACtM,YAAI,IAAoB,EAAuB;AAC/C,WAAqB,KAAK;;aAErB,IAFqB;AAG5B,UAAM,EACJ,OAAO;cAAA;AAGT,UAAI;AACE,aAA0B,CAAC,EAAuB,QAAS,KAAK,EAAqB,WAAS,EAAG,KAAK;gBAAA;AAE1G,YAAI;AAAK,gBAAM,EAAI;;;AAIvB,WAAO;KAGF;;AClhDT,YAAuB,GAAQ,GAAS;AACtC,SAAO,IAAI,GAAU,GAAQ;;AAD/B;AAAS,GAAA,IAAA;ACTT,IAAA,KAAA,GAAA;AAEO,YAAgB,GAAuB;AAC5C,MAAM,IAAc,GAAc;AAGlC,SAFiB,IAAI,GAAA,QAAS,GAAa,YAEzB,KAAK;;AAJlB;AAAA,GAAA,IAAA;AAOA,YAA0B,GAAuB;AAEtD,MAAM,IADc,GAAc,GACR,MAAM;AAEhC,MAAI,EAAM,WAAW;AACnB,WAAO;AACF,MAAI,EAAM,WAAW;AAC1B,WAAO,SAAS,EAAM;AAEtB,QAAM,IAAI,MAAM,0BAA0B;;AATvC;AAAA,GAAA,IAAA;AA0BA,YAAyB,GAAe,GAAwB;AACrE,SAAO,IAAI,GAAA,QAAS,GAAc,IAAQ,YAAY,IAAI,GAAA,QAAS,GAAc,IAAQ;;AADpF;AAAA,GAAA,IAAA;AAIA,YAA4B,GAAe,GAAwB;AACxE,SAAO,IAAI,GAAA,QAAS,GAAc,IAAQ,YAAY,IAAI,GAAA,QAAS,GAAc,IAAQ;;AADpF;AAAA,GAAA,IAAA;AAIA,YAAsB,GAAwB;AACnD,MAAI,MAAU;AAAK,WAAO;AAC1B,MAAI,CAAC,IAAI,KAAK;AAAQ,WAAO;AAE7B,MAAI;AACF,QAAM,IAAc,GAAc;AAClC,WAAA,IAAI,GAAA,QAAS,GAAa,WAEnB;WACA,GADA;AAEP,WAAO;;;AAVJ;AAAA,GAAA,IAAA;AAcA,YAAuB,GAAuB;AACnD,SAAO,EAAM,QAAQ,WAAW,MAAM,QAAQ,MAAM;;AAD/C;AAAA,GAAA,IAAA;AAIA,YAAqB,GAAuB;AACjD,MAAI;AACF,QAAM,IAAc,GAAc,IAE5B,IADU,IAAI,GAAA,QAAS,GAAa,aACpB,MAAM,MAExB;AAWJ,WAVI,EAAM,OAAO,MACf,IAAY,MACH,EAAM,OAAO,MACtB,IAAY,WACH,EAAM,OAAO,OACtB,IAAY,YAEZ,IAAY,GAAG,EAAM,YAGnB,EAAM,WAAW,IACZ,IAEA,GAAG,KAAa,EAAM;WAExB,GAFwB;AAG/B,UAAM,IAAI,MAAM,0BAA0B;;;AAvBvC;AAAA,GAAA,IAAA;AC5CP,IAAM,KAAuB,OAAO,UAAU,SAAS,KAAK;AAA5D,IACM,KAA4B;AADlC,IAEM,KAA0B;AAGzB,YAAkB,GAAgB,IAAiB,IAAiC;AACzF,SACE,GAAkB,MAAU,GAAsB,GAAO,MAAmB,GAAiB,GAAO;;AAFjG;AAAA,GAAA,IAAA;AAMP,YAA2B,GAAgB;AACzC,MAAI,MAAU;AAAM,WAAO;AAC3B,MAAI,MAAU;AAAW,WAAO;AAChC,MAAI,OAAO,KAAU;AAAU,WAAO,IAAI;AAC1C,MAAI,OAAO,KAAU;AAAU,WAAO,OAAO;;AAJ/C;AAAA,GAAA,IAAA;AASA,YAA+B,GAAgB,GAAwB;AACrE,MAAI,MAAmB;AAAG,WAAO;AACjC,MAAI,aAAiB;AAAK,WAAO,GAAY,GAAO;AACpD,MAAI,aAAiB;AAAK,WAAO,GAAY,GAAO;AAOpD,MANoB,QACb,EAAwB,OAAO,cAAc,QAKrC;AAAQ,WAAO,GAAiB,GAAO;;AAVxD;AAAA,GAAA,IAAA;AAeA,YAA0B,GAAgB,GAAwB;AAChE,MAAM,IAAgB,OAAO;AAC7B,SAAI,MAAkB,KAA6B,IAE5C,GAAe,GAAO;;AAJ/B;AAAA,GAAA,IAAA;AAOA,YAAqB,GAA4B,GAAe;AAC9D,MAAM,IAAU;AAChB,WAAW,CAAC,GAAG,MAAM,EAAI,WAAW;AAClC,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,QAAM,KAAU,GAAS,GAAG,IAAQ,IAC9B,KAAU,GAAS,GAAG,IAAQ;AACpC,MAAQ,KAAK,GAAG,OAAY;;AAE9B,SAAO,OAAO,EAAQ,KAAK;;AAX7B;AAAA,GAAA,IAAA;AAcA,YAAqB,GAAmB,GAAe;AACrD,MAAM,IAAU;AAChB,WAAW,KAAK,GAAK;AACnB,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,MAAQ,KAAK,GAAS,GAAG,IAAQ;;AAEnC,SAAO,OAAO,EAAQ,KAAK;;AAT7B;AAAA,GAAA,IAAA;AAYA,YAA0B,GAAwB,GAAuB;AACvE,MAAM,IAAU;AAChB,WAAW,KAAK,GAAK;AACnB,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,MAAQ,KAAK,GAAS,GAAG,IAAQ;;AAGnC,SAAO,GADQ,MAAM,QAAQ,KAAO,KAAK,EAAI,YAAY,QACrC,EAAQ,KAAK;;AAVnC;AAAA,GAAA,IAAA;AAaA,YAAwB,GAAgB,GAAe;AACrD,MAAM,IAAU;AAChB,WAAW,KAAK,GAAkC;AAChD,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAO;AAC/C;AAEF,QAAI,EAAQ,SAAS,KAAmB;AACtC,QAAQ,KAAK;AACb;;AAEF,QAAM,KAAK,EAAkC,IACvC,KAAU,GAAS,GAAG,IAAQ,IAC9B,IAAU,GAAS,IAAG,IAAQ;AACpC,MAAQ,KAAK,GAAG,OAAY;;AAG9B,MAAM,IAAY,EAAkC,YAAY;AAEhE,SAAO,GADQ,MAAa,GAAG,YAAY,OAAO,KAAK,UAAU,QAC7C,EAAQ,KAAK;;AAlBnC;AAAA,GAAA,IAAA;AChFA,IAAI,KAA4B;AAAhC,IAEO,KAAA,GAAA,cAA4B,MAAM;EAIvC,YAAY,GAAiB,GAAqB;AAChD,UAAM;AAEN,SAAK,aAAa,GAClB,KAAK,OAAO,SACZ,KAAK,UAAU,GACf,KAAK,QAAQ,IAAI,QAAQ,OACrB,KAAK,UAAU,UACjB,MAAK,QAAQ,KAAK,MAAM,QAAQ,oDAAoD;SAGtF;AACA,QAAI;AACF,WAAK,UACH,OAA8B,IAC1B,GAAS,KAAK,cACd;aACC,GADD;AAGN,cAAQ,MAAM,IACd,KAAK,UAAU;cAAA;AAEf;;;GA1BC;AAFP,ICAa,KAAoB,CAC/B,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,QACxD,EAAC,WAAW,QAAU,KAAK,QAAK,UAAU,OAAO,OAAO,QACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,OACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,uBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,uBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,SACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,OAAO,OAAO,sBACxD,EAAC,WAAW,UAAU,KAAK,UAAK,UAAU,QAAQ,OAAO;ADlB3D,ICyBO,KAAA,GAAA,MAAa;SA2BX,WAAW,GAAsB;AACtC,QAAI,EAAK,WAAW;AAClB,YAAM,IAAI,MAAM,kBAAkB;AAEpC,QAAI,EAAK,OAAO;AACd,aAAO,CAAC,GAAO,WAAW,EAAK,OAAO;AAExC,QAAI,EAAK,OAAO;AACd,aAAO,KAAK,KAAK,GAAO,WAAW,EAAK,OAAO;AAGjD,QAAM,IAAW,GAAO,qBAAqB,OAAK,EAAE,cAAc;AAClE,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAS,WAAW;AAC1B,QAAI,MAAM;AACR,YAAM,IAAI,MAAM,kBAAkB;AAEpC,WAAO;;SAUF,mBAAmB,GAAe,GAAyB;AAChE,QAAI,IAAQ;AACV,aAAO,CAAC,GAAO,mBAAmB,CAAC,GAAO;AAG5C,QAAM,IAAI,IAAQ;AAClB,QAAI,KAAK,KAAW,IAAI,KAAK;AAC3B,aAAO,KAAK,MAAM;AAGpB,QAAM,IAAW,GAAO,qBAAqB,QAAK,KAAK,IAAI,GAAE,QAAQ,MAAU;AAC/E,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAe,GAAO,qBAAqB,QAAK,KAAK,IAAI,KAAK,KAAK,GAAE,SAAS,MAAU;AAC9F,WAAI,MAAiB,SACZ,KAAK,KAAK,EAAa,SAGzB;;SASF,qBAAqB,GAAiF;AAC3G,aAAW,KAAQ;AACjB,UAAI,EAAU;AAAO,eAAO;;EAgBhC,YACE,GACA,GACA,GACA,GACA;AACA,SAAK,oBAAoB,GACzB,KAAK,uBAAuB,GAC5B,KAAK,cAAc,GACnB,KAAK,gBAAgB;;EAGvB,YAAY,GAAmB;AAC7B,WAAI,KAAK,oBACA,KAAK,gBAAgB,GAAG,KAAK,sBAAsB,KAAK,eAE7D,KAAK,gBAAgB,SAChB,EAAE,QAAQ,KAAK,eAEjB,OAAO;;EAWR,gBAAgB,GAAe,IAAU,GAAG,IAA6B,QAAmB;AAClG,QAAI,KAAK,IAAI,KAAS;AAAS,aAAO;AACtC,QAAI,IAAQ;AAAG,aAAO,IAAI,KAAK,gBAAgB,CAAC,GAAO,GAAS;AAEhE,QAAM,IAAW,GAAO,qBAAqB,QAAK,KAAK,IAAI,GAAE,QAAQ,MAAU;AAC/E,QAAI,MAAa;AACf,aAAO,EAAS;AAGlB,QAAM,IAAe,GAAO,qBAAqB,QAAK,KAAK,IAAI,KAAK,KAAK,GAAE,SAAS,MAAU;AAC9F,WAAI,MAAiB,SACZ,SAAS,EAAa,cAG3B,IAAQ,MAAM,KAAK,MAAW,SACzB,EAAM,QAAQ,KAGhB,EAAM;;GAxJV;ADzBP,ICyBO,KAAA;AAAA,GAMW,aAAa,IAAI,GAAO,OAAO,GAAG,GAAG,OANhD,GAWW,QAAQ,IAAI,GAAO,MAAM,GAAG,QAAW,OAXlD,GAgBW,WAAW,IAAI,GAAO,MAAM,GAAG,QAAW,MAhBrD,GAqBW,aAAa,IAAI,GAAO,MAAM,MAAQ,GAAG;AChDpD,IAAA,KAAA,GAAA,MAAW;SACT,KAAK,GAA+B,GAAiB,GAAwB;AAClF,QAAI,MAAe,MAAM;AACvB,UAAM,IAAU,MAAS,SAAY,mBAAmB,IAAI,MAAM,UAAU,MAAM,KAAK,GAAM,KAAK,UAE5F,IAAM;;WADI,MAAY,SAAY,mBAAmB;;QACQ;AACnE,YAAM,IAAI,MAAM;;;SAIb,QAAW,GAAmC;AACnD,OAAK,KAAK,KAAM,MAAyB;;SAGpC,cAAc,GAA2B;AAC9C,QAAM,IAAO,KAAK,KAAK,GACjB,IAAI,KAAK,MAAM,IAAU;AAC/B,QAAI,IAAI,MAAS,GAAS;AACxB,UAAM,IAAI,KAAK,KAAK;AAWpB,aAVc,CACZ,CAAC,GAAG,IACJ,CAAC,GAAG,IACJ,CAAC,GAAG,IACJ,CAAC,CAAC,GAAG,IACL,CAAC,IAAI,IACL,CAAC,CAAC,GAAG,CAAC,IACN,CAAC,GAAG,KACJ,CAAC,GAAG,CAAC,IAEM,IAAI;;AAEnB,WAAO,CAAC,KAAK,IAAI,IAAU,KAAK,IAAI;;GA/BjC;AAAA,ICIA,KAAA,GAAA,MAAc;SAQZ,KAAK,GAA8B;AACxC,QAAI,aAAa;AACf,aAAO;AAET,QAAI,OAAO,KAAM;AACf,aAAO,IAAI,GAAQ,GAAG;AAExB,UAAM,IAAI,GAAc,4BAA4B,EAAC,GAAA;;SAGhD,MAAM,GAAmB,GAAwB;AACtD,QAAM,CAAC,GAAK,KAAO,GAAK,cAAc;AACtC,WAAO,IAAI,GAAQ,IAAY,GAAK,IAAY;;SAG3C,WAAW,GAA6B;AAC7C,QAAI,aAAa;AACf,aAAO,EAAE;AAEX,QAAI,OAAO,KAAM;AACf,aAAO;AAET,UAAM,IAAI,GAAc,4BAA4B,EAAC,GAAA;;SAGhD,WAAW,GAA6B;AAC7C,QAAI,aAAa;AACf,aAAO,EAAE;AAEX,QAAI,OAAO,KAAM;AACf,aAAO;AAET,UAAM,IAAI,GAAc,4BAA4B,EAAC,GAAA;;EAGvD,YAAY,GAAc,GAAc;AACtC,SAAK,OAAO,GACZ,KAAK,OAAO;;SAGP,iBAAiB,GAAqB,GAAqB,GAAgC;AAKhG,QAJA,IAAI,GAAQ,KAAK,IACjB,IAAI,GAAQ,KAAK,IACjB,IAAI,GAAQ,KAAK,IAEb,EAAE,UAAU,IAAI;AAClB,UAAI,CAAC,EAAE,UAAU;AACf,eAAO,CAAC,EAAE,MAAM,IAAI,UAAU;AAEhC,UAAI,CAAC,EAAE,UAAU;AACf,eAAO;AAET,YAAM,MAAM;;AAGd,QAAM,IAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,SAC7C,IAAM,EAAE,MAAM,KACd,KAAQ,EAAE,MAAM;AACtB,WAAO,EAAK,IAAI,QAAK,EAAI,MAAM,IAAG,UAAU;;EAG9C,UAAU,GAAyB;AACjC,WAAI,aAAiB,KACZ,KAAK,SAAS,EAAM,QAAQ,KAAK,SAAS,EAAM,OAErD,OAAO,KAAU,WACZ,KAAK,SAAS,KAAS,KAAK,SAAS,IAEvC;;EAGT,uBAAuB,GAAmC,GAA0B;AAClF,QAAI,aAAiB,MAAW,OAAO,KAAU,UAAU;AACzD,UAAM,IAAI,KAAK,MAAM,GAAQ,KAAK;AAClC,aAAO,KAAK,IAAI,EAAE,SAAS,KAAW,KAAK,IAAI,EAAE,SAAS,KAAW,EAAE,SAAS;;AAElF,WAAO;;EAGT,QAAgB;AACd,WAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;;EAGlD,MAAc;AACZ,WAAO,KAAK,KAAK,KAAK;;EAGxB,OAAgB;AACd,QAAM,IAAI,KAAK;AACf,WAAI,IAAI,OACC,GAAQ,MAAM,GAAG,KAAK,WAExB,KAAK,UAAU,KAAK,KAAK;;EAGlC,KAAK,GAA8B;AACjC,QAAM,IAAI,GAAQ,KAAK;AACvB,WAAO,IAAI,GAAQ,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE;;EAGvD,MAAM,GAA8B;AAClC,QAAM,IAAI,GAAQ,KAAK;AACvB,WAAO,IAAI,GAAQ,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE;;EAGvD,MAAM,GAA8B;AAClC,QAAM,IAAI,GAAQ,KAAK;AACvB,WAAO,IAAI,GAAQ,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE;;EAGjG,UAAU,GAA8B;AACtC,QAAM,IAAI,GAAQ,KAAK,IACjB,IAAI,EAAE;AACZ,QAAI,MAAM;AACR,YAAM,IAAI,MAAM;AAGlB,QAAM,IAAI,KAAK,MAAM,EAAE;AACvB,WAAO,IAAI,GAAQ,EAAE,OAAO,GAAG,EAAE,OAAO;;EAG1C,QAAwC;AACtC,QAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,OAC1B,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI;AAC1C,QAAI,MAAM;AACR,aAAO,CAAC,GAAQ;AAElB,QAAI,MAAM,KAAK,IAAI;AACjB,aAAO,CAAC,IAAI,GAAQ,GAAG,IAAI,IAAI,GAAQ,GAAG,CAAC;AAG7C,QAAM,IAAI,KAAK,UAAU,GACnB,IAAI,GAAQ,MAAM,GAAG;AAC3B,WAAO,CAAC,GAAG,EAAE,MAAM;;EAGrB,YAAqB;AACnB,WAAO,IAAI,GAAQ,KAAK,MAAM,CAAC,KAAK;;EAGtC,SAAS,GAAyB;AAChC,WAAA,IAAS,KAAU,GAAO,OACnB,EAAO,oBAAoB,KAAK,yBAAyB,KAAU,KAAK,mBAAmB;;EAGpG,MAAe;AACb,WAAO,IAAI,GAAQ,CAAC,KAAK,MAAM,CAAC,KAAK;;EAGvC,SAAS,GAAqC;AAC5C,WAAI,MAAa,OAAO,KAAK,SAAS,KAAK,KAAK,QAAQ,IAC/C,IAAI,GAAQ,KAAK,KAAK,KAAK,OAAO,KAEvC,GAAQ,KAAK,UAAU,KAClB,GAAQ,MAEb,KAAK,UAAU,GAAQ,QAClB,GAAQ,OAEV,KAAK,KAAK,MAAM,GAAQ,KAAK,IAAW;;EAGjD,MAAe;AACb,WAAO,GAAQ,MAAM,KAAK,IAAI,KAAK,OAAO,KAAK;;EAGjD,MAAe;AACb,QAAM,IAAI,KAAK,MAAM,GAAQ;AAC7B,WAAO,EAAE,MAAM,KAAK,EAAE,MAAM,OAAO,MAAM;;EAG3C,MAAe;AACb,QAAM,IAAI,KAAK,MAAM,GAAQ;AAC7B,WAAO,EAAE,MAAM,MAAM,EAAE,MAAM,OAAO,UAAU,IAAI,GAAQ,GAAG;;EAG/D,MAAe;AACb,WAAO,KAAK,MAAM,UAAU,KAAK;;EAGnC,KAAc;AACZ,WAAO,IAAI,GAAQ,KAAK,IAAI,KAAK,QAAQ,KAAK;;EAGhD,QAAgB;AACd,WAAO,KAAK,MAAM,KAAK,MAAM,KAAK;;EAG5B,yBAAyB,GAAwB;AACvD,WAAI,KAAK,IAAI,KAAK,SAAS,EAAO,uBACzB,EAAO,YAAY,KAAK,QAE7B,KAAK,IAAI,KAAK,SAAS,EAAO,uBAC5B,KAAK,IAAI,KAAK,OAAO,MAAM,EAAO,uBAC7B,MAEL,KAAK,IAAI,KAAK,OAAO,MAAM,EAAO,uBAC7B,OAEF,GAAG,EAAO,YAAY,KAAK,WAG7B,KAAK,mBAAmB;;EAGzB,mBAAmB,GAAwB;AACjD,QAAM,IAAY,KAAK,QAAQ,IAAI,MAAM,KACnC,IACJ,EAAO,qBAAqB,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,MAAM,EAAO,uBACpE,KACA,EAAO,YAAY,KAAK,IAAI,KAAK;AAEvC,WAAO,GADQ,GAAO,qBAAqB,EAAO,gBAAgB,UAAa,KAAK,OAAO,IAAI,KAAK,OACjF,EAAO,YAAY,KAAK,QAAQ,IAAY;;GA5N5D;ADJA,ICIA,KAAA;AAAA,GACW,OAAO,IAAI,GAAQ,GAAG,IADjC,GAEW,MAAM,IAAI,GAAQ,GAAG,IAFhC,GAGW,IAAI,IAAI,GAAQ,GAAG;AEvB9B,IAAM,KAAsB;AAA5B,ICAM,KAAsB;ADA5B,IEAM,KAAsB;AFA5B,IGAM,KAAsB;AHA5B,IIAM,KAA0B;AJAhC,IKAM,KAAsB;ALA5B,IMAM,KAAyB;ANA/B,IOAM,KAAuB;APA7B,IQAM,KAAuB;ARA7B,ISAM,KAAuB;ATA7B,IUAM,KAAyB;AVA/B,IWAM,KAA4B;AXAlC,IYAM,KAA6B;AZAnC,IaAM,KAA2B;AbAjC,IaCM,KAA2B;AbDjC,IcAM,KAAgC;ACO7C,IAAA,KAAqB,GAAA,MAAA;AAArB,IAEM,KAA2B,GAAC,OACX,KAAQ,QAAS,EAAgB,YAAY,oBADnC;AAFjC,IAKM,KAA2B,GAAC,OACX,KAAQ,QAAS,EAAgB,YAAY,oBADnC;AAkC1B,YAAgE,GAA6C;AAClH,kBAAkC,EAAK;IAAvC,cA/CF;AA+CE,YAAA,GAAA;AACQ,WAAA,aAAa;AACb,WAAA,aAAa;AACb,WAAA,UAAU;AACV,WAAA,WAAW;AACX,WAAA,UAAU;AACV,WAAA,MAAM;AACN,WAAA,iBAAiB;AAGf,WAAA,mBAAmB,GACzB,EACE,IAAI,aACJ,SAAS,QACT,QAAQ,EACN,MAAM,EACJ,IAAI,EACF,cAAc,EACZ,QAAQ,aACR,SAAS,CAAC,sBAIhB,WAAW,EACT,IAAI,EACF,MAAM,EACJ,QAAQ,WACR,SAAS,CAAC,WAEZ,gBAAgB,EACd,QAAQ,cAId,SAAS,EACP,IAAI,EACF,gBAAgB,EACd,QAAQ,YACR,SAAS,CAAC,oBAEZ,QAAQ,CACN,EACE,QAAQ,aACR,SAAS,CAAC,WACV,MAAM,yBAER,EACE,QAAQ,WACR,SAAS,CAAC,WACV,MAAM,8BAKd,UAAU,EACR,MAAM,YACN,SAAS,WACT,IAAI,EACF,cAAc,EACZ,QAAQ,WACR,SAAS,CAAC,oBAGd,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,WAAW,MAAM,yBAC1B,EAAC,QAAQ,aAAa,MAAM,4BAGhC,SAAS,EACP,OAAO,CAAC,SACR,IAAI,EACF,QAAQ,EACN,QAAQ,mBAId,WAAW,EACT,OAAO,CAAC,WACR,IAAI,EACF,MAAM,EACJ,QAAQ,qBAMlB,SAAS,EACP,OAAO,CAAC,SACR,QAAQ,CACN,EAAC,QAAQ,aAAa,MAAM,8BAC5B,EAAC,QAAQ,WAAW,MAAM,gBAG9B,SAAS,EACP,MAAM,SACN,OAAO,gBAIb,EACE,SAAS,EACP,aAAa,MAAM;AACjB,YAAM,IAAe,IAAA,GAAA,SAAS;AAC9B,UAAa,YAAY,QACzB,EAAa,GAAG,QAAQ,KAAK,KAAK,KAAK,QACvC,EAAa,GAAG,MAAM,KAAK,OAAO,KAAK,QACvC,EAAa,UAAU,EACrB,SAAS,KAAK,cAAc,KAAK,OACjC,QAAQ,KAAK,SAAS,KAAK,OAC3B,OAAO,KAAK,YAAY,KAAK;AAG/B,YAAM,IAAW,KAAK;AAClB,WAAyB,KAC3B,KAAK,kBAAkB,IAEvB,KAAK,kBAAkB;SAG3B,MAAM,CAAC,GAAU,MAAU;AACrB,UAAM,SAAS,UAEnB,MAAK,UAAU,MACf,KAAK,cAAc,IAAI,MAAM,kBAAkB,EAAC,SAAS,UAErD,GAAyB,KAAK,aAChC,MAAK,UAAU,OACf,KAAK,aAAa,EAAM,GAAG,EAAM;SAGrC,QAAQ,MAAM;AACZ,aAAK,UAAU,OACf,KAAK,cAAc,IAAI,MAAM,oBAAoB,EAAC,SAAS;SAE7D,eAAe,MAAM;AACnB,aAAK,WAAW;SAElB,aAAa,MAAM;AACjB,aAAK,UAAU,OACf,KAAK,WAAW,OAChB,KAAK,cAAc,IAAI,MAAM,0BAA0B,EAAC,SAAS;SAEnE,MAAM,MAAM;AACV,aAAK,UAAU,MACf,KAAK,kBAAkB,KAAK,UAC5B,KAAK,cAAc,IAAI,MAAM,kBAAkB,EAAC,SAAS;SAE3D,QAAQ,MAAM;AACZ,aAAK,UAAU,OACX,KAAK,mBACP,KAAK,gBAAgB,cAAc,IAAI,MAAM,oBAAoB,EAAC,SAAS;SAG/E,MAAM,MAAM;AACN,SAAC,KAAK,WAEV,MAAK,OAAO,GAAG,IACf,KAAK,cAAc,IAAI,MAAM,kBAAkB,EAAC,SAAS;SAE3D,QAAQ,MAAM;AACZ,QAAA,IAAA,GAAA,SAAS,MAAM,SACf,KAAK,cAAc,IAAI,MAAM,oBAAoB,EAAC,SAAS;WAG/D,QAAQ,EACN,qBAAqB,MACZ,GAAyB,KAAK,WAEvC,qBAAqB,MACZ,GAAyB,KAAK,WAEvC,0BAA0B,MACjB,KAAK,WAAW,GAAyB,KAAK,WAEvD,SAAS,MACA,CAAC,KAAK;;QAQjB,UAAU,GAAgB;AAC5B,WAAK,yBAED,IACF,KAAK,iBAAiB,KAAK,EAAC,MAAM,oBAElC,KAAK,iBAAiB,KAAK,EAAC,MAAM;;QAIlC,WAAmE;AACrE,UAAM,IAAK,KAAK;AAGhB,aAFA,GAAK,QAAQ,IAET,CAAC,GAAyB,MAAO,CAAC,GAAyB,KACtD,OAEF;;IAGD,wBAA8B;AAChC,WAAK,qBAAqB,UAE9B,MAAK,mBAAmB,GAAU,KAAK,kBACpC,aAAa,OAAS;AACjB,aAAK,kBAEP,QAAQ,IAAI,cAAc,GAAS,EAAM;SAG5C;;QAGD,YAAY,GAAuC;AACrD,MAAA,IAAA,GAAA,SAAS,MAAM,UAAU,EACvB,WAAW,CACT,GAAA,QAAS,UAAU,KAAK,EACtB,SAAS,GACT,OAAO,KAAK,WACZ,gBAAgB,CAAC,EAAC,GAAG,KAAK,GAAG,YAGjC,WAAW,EACT,MAAM,KAAK,kBAAkB,KAAK;;QAKpC,YAAoB;AACtB,aAAO,KAAK;;IAGN,kBAAkB,GAAsB;AAC9C,UAAM,IAAe,EAAM,UAAW;AAEtC,UAAI,EAAa,SAAS;AACxB,YAAM,KAAiB,EAAa,OAAO;AAC3C,aAAK,cAAc,IAAI,YAAY,2BAA2B,EAAC,QAAQ,EAAC,gBAAA,MAAiB,SAAS,UAElG,KAAK,OAAO,GAAG,IAEX,KAAK,mBAAmB,KAAK,oBAAoB,KAAK,YACxD,KAAK,iBAAiB,KAAK,EAAC,MAAM,aAGpC,KAAK,iBAAiB,KAAK,EAAC,MAAM;;AAE9B,aAAK,WACP,KAAK,iBAAiB,KAAK,EAAC,MAAM;;IAKhC,KAAK,GAAyB;AACpC,WAAK,iBAAiB,KAAK,EAAC,MAAM,QAAQ,GAAG,EAAM,SAAS,GAAG,EAAM;;IAG/D,SAAe;AACrB,WAAK,iBAAiB,KAAK,EAAC,MAAM;;IAG5B,gBAAsB;AAC5B,WAAK,iBAAiB,KAAK,EAAC,MAAM;;IAG5B,cAAoB;AAC1B,WAAK,iBAAiB,KAAK,EAAC,MAAM;;IAG5B,SAAS,GAA4B;AAC3C,WAAK,KAAK,EAAM,IAAI,EAAM;;IAGpB,KAAK,GAAY,GAAkB;AACzC,UAAM,KAAI,KAAK,aAAa,GACtB,KAAI,KAAK,aAAa;AAC5B,WAAK,OAAO,IAAG;;IAGT,OAAO,GAAW,GAAiB;AACzC,WAAK,aAAa,GAClB,KAAK,aAAa,GAClB,KAAK,MAAM,YAAY,aAAa,QAAQ;;IAGtC,aAAa,GAAiB,GAAuB;AAC3D,UAAM,KAAK,IAAU,KAAK,cAAc,GAClC,KAAK,IAAU,KAAK,eAAe;AACzC,WAAK,KAAK,IAAI;;;AArSlB;AAAA,SAAA,GAAA,GAAA,wBACQ,EAAA,CAAL,IADH,EACQ,WAAA,cAAA,IACA,EAAA,CAAL,IAFH,EAEQ,WAAA,cAAA,IACA,EAAA,CAAL,IAHH,EAGQ,WAAA,WAAA,IACA,EAAA,CAAL,IAJH,EAIQ,WAAA,YAAA,IACA,EAAA,CAAL,IALH,EAKQ,WAAA,WAAA,IACA,EAAA,CAAL,IANH,EAMQ,WAAA,OAAA,IACA,EAAA,CAAL,IAPH,EAOQ,WAAA,kBAAA,IAkSD;;AA1SF;AAAS,GAAA,IAAA;ACtCT,IAAM,KAAc,GAAC,OAC1B,OAAO,KAAQ,YAAY,MAAQ,QAAQ,OAAQ,EAAkB,QAAS,UADrD;AAGpB,YAAgE,GAA6C;AAClH,kBAAkC,EAAK;IAAvC,cAZF;AAYE,YAAA,GAAA;AACQ,WAAA,OAAO;;;AADf;AAAA,SAAA,GAAA,GAAA,wBACQ,EAAA,CAAL,IADH,EACQ,WAAA,QAAA,IAGD;;AALF;AAAS,GAAA,IAAA;ACXT,IAAI,KAAM;AAAV,IACI,KAAS;AADb,IAEI,KAAQ;AAFZ,IAGI,KAAO;AAHX,IAII,KAAO;AAJX,IAKI,KAAiB,CAAC,IAAK,IAAQ,IAAO;AAL1C,IAMI,KAAQ;AANZ,IAOI,KAAM;AAPV,IAQI,KAAkB;AARtB,IASI,KAAW;AATf,IAUI,KAAS;AAVb,IAWI,KAAY;AAXhB,IAYI,KAAmC,GAAe,OAAO,SAAU,GAAK,GAAW;AAC5F,SAAO,EAAI,OAAO,CAAC,IAAY,MAAM,IAAO,IAAY,MAAM;GAC7D;AAdI,IAeI,KAA0B,GAAG,OAAO,IAAgB,CAAC,KAAO,OAAO,SAAU,GAAK,GAAW;AACtG,SAAO,EAAI,OAAO,CAAC,GAAW,IAAY,MAAM,IAAO,IAAY,MAAM;GACxE;AAjBI,IAmBI,KAAa;AAnBjB,IAoBI,KAAO;AApBX,IAqBI,KAAY;AArBhB,IAuBI,KAAa;AAvBjB,IAwBI,KAAO;AAxBX,IAyBI,KAAY;AAzBhB,IA2BI,KAAc;AA3BlB,IA4BI,KAAQ;AA5BZ,IA6BI,KAAa;AA7BjB,IA8BI,KAAiB,CAAC,IAAY,IAAM,IAAW,IAAY,IAAM,IAAW,IAAa,IAAO;AC9B5F,YAAqB,GAAS;AAC3C,SAAO,IAAW,GAAQ,YAAY,IAAI,gBAAgB;;AAD7C;AAAS,GAAA,IAAA;ACAT,YAAmB,GAAM;AACtC,MAAI,KAAQ;AACV,WAAO;AAGT,MAAI,EAAK,eAAe,mBAAmB;AACzC,QAAI,IAAgB,EAAK;AACzB,WAAO,KAAgB,EAAc,eAAe;;AAGtD,SAAO;;AAVM;AAAS,GAAA,IAAA;ACExB,YAAmB,GAAM;AACvB,MAAI,IAAa,GAAU,GAAM;AACjC,SAAO,aAAgB,KAAc,aAAgB;;AAFvD;AAAS,GAAA,IAAA;AAKT,YAAuB,GAAM;AAC3B,MAAI,IAAa,GAAU,GAAM;AACjC,SAAO,aAAgB,KAAc,aAAgB;;AAFvD;AAAS,GAAA,IAAA;AAKT,YAAsB,GAAM;AAE1B,MAAI,OAAO,cAAe;AACxB,WAAO;AAGT,MAAI,IAAa,GAAU,GAAM;AACjC,SAAO,aAAgB,KAAc,aAAgB;;AAPvD;AAAS,GAAA,IAAA;ACRT,YAAqB,GAAM;AACzB,MAAI,IAAQ,EAAK;AACjB,SAAO,KAAK,EAAM,UAAU,QAAQ,SAAU,GAAM;AAClD,QAAI,IAAQ,EAAM,OAAO,MAAS,IAC9B,IAAa,EAAM,WAAW,MAAS,IACvC,KAAU,EAAM,SAAS;AAEzB,KAAC,GAAc,OAAY,CAAC,GAAY,OAO5C,QAAO,OAAO,GAAQ,OAAO,IAC7B,OAAO,KAAK,GAAY,QAAQ,SAAU,IAAM;AAC9C,UAAI,IAAQ,EAAW;AAEnB,YAAU,QACZ,GAAQ,gBAAgB,MAExB,GAAQ,aAAa,IAAM,MAAU,OAAO,KAAK;;;;AArBzD;AAAS,GAAA,IAAA;AA2BT,YAAgB,GAAO;AACrB,MAAI,IAAQ,EAAM,OACd,IAAgB,EAClB,QAAQ,EACN,UAAU,EAAM,QAAQ,UACxB,MAAM,KACN,KAAK,KACL,QAAQ,OAEV,OAAO,EACL,UAAU,cAEZ,WAAW;AAEb,SAAA,OAAO,OAAO,EAAM,SAAS,OAAO,OAAO,EAAc,SACzD,EAAM,SAAS,GAEX,EAAM,SAAS,SACjB,OAAO,OAAO,EAAM,SAAS,MAAM,OAAO,EAAc,QAGnD,WAAY;AACjB,WAAO,KAAK,EAAM,UAAU,QAAQ,SAAU,GAAM;AAClD,UAAI,IAAU,EAAM,SAAS,IACzB,KAAa,EAAM,WAAW,MAAS,IACvC,KAAkB,OAAO,KAAK,EAAM,OAAO,eAAe,KAAQ,EAAM,OAAO,KAAQ,EAAc,KAErG,IAAQ,GAAgB,OAAO,SAAU,GAAO,GAAU;AAC5D,eAAA,EAAM,KAAY,IACX;SACN;AAEC,OAAC,GAAc,MAAY,CAAC,GAAY,MAI5C,QAAO,OAAO,EAAQ,OAAO,IAC7B,OAAO,KAAK,IAAY,QAAQ,SAAU,GAAW;AACnD,UAAQ,gBAAgB;;;;;AAtChC;AAAS,GAAA,IAAA;AA6CT,IAAO,KAAQ,EACb,MAAM,eACN,SAAS,MACT,OAAO,SACP,IAAI,IACJ,QAAQ,IACR,UAAU,CAAC;ACjFE,YAA0B,GAAW;AAClD,SAAO,EAAU,MAAM,KAAK;;AADf;AAAS,GAAA,IAAA;ACDjB,IAAI,KAAM,KAAK;AAAf,IACI,KAAM,KAAK;AADf,IAEI,KAAQ,KAAK;ACAT,YAA+B,GAAS,GAAc;AAC/D,QAAiB,UACnB,KAAe;AAGjB,MAAI,IAAO,EAAQ,yBACf,IAAS,GACT,IAAS;AAEb,MAAI,GAAc,MAAY,GAAc;AAC1C,QAAI,KAAe,EAAQ,cACvB,KAAc,EAAQ;AAGtB,SAAc,KAChB,KAAS,GAAM,EAAK,SAAS,MAAe,IAG1C,KAAe,KACjB,KAAS,GAAM,EAAK,UAAU,MAAgB;;AAIlD,SAAO,EACL,OAAO,EAAK,QAAQ,GACpB,QAAQ,EAAK,SAAS,GACtB,KAAK,EAAK,MAAM,GAChB,OAAO,EAAK,QAAQ,GACpB,QAAQ,EAAK,SAAS,GACtB,MAAM,EAAK,OAAO,GAClB,GAAG,EAAK,OAAO,GACf,GAAG,EAAK,MAAM;;AA/BH;AAAS,GAAA,IAAA;ACCT,YAAuB,GAAS;AAC7C,MAAI,IAAa,GAAsB,IAGnC,IAAQ,EAAQ,aAChB,IAAS,EAAQ;AAErB,SAAI,KAAK,IAAI,EAAW,QAAQ,MAAU,KACxC,KAAQ,EAAW,QAGjB,KAAK,IAAI,EAAW,SAAS,MAAW,KAC1C,KAAS,EAAW,SAGf,EACL,GAAG,EAAQ,YACX,GAAG,EAAQ,WACX,OAAO,GACP,QAAQ;;AAnBG;AAAS,GAAA,IAAA;ACFT,YAAkB,GAAQ,GAAO;AAC9C,MAAI,IAAW,EAAM,eAAe,EAAM;AAE1C,MAAI,EAAO,SAAS;AAClB,WAAO;AAEJ,MAAI,KAAY,GAAa,IAAW;AACzC,QAAI,IAAO;AAEX,OAAG;AACD,UAAI,KAAQ,EAAO,WAAW;AAC5B,eAAO;AAIT,UAAO,EAAK,cAAc,EAAK;aACxB;;AAIb,SAAO;;AApBM;AAAS,GAAA,IAAA;ACAT,YAA0B,GAAS;AAChD,SAAO,GAAU,GAAS,iBAAiB;;AAD9B;AAAS,GAAA,IAAA;ACAT,YAAwB,GAAS;AAC9C,SAAO,CAAC,SAAS,MAAM,MAAM,QAAQ,GAAY,OAAa;;AADjD;AAAS,GAAA,IAAA;ACAT,YAA4B,GAAS;AAElD,SAAS,KAAU,KAAW,EAAQ,gBACtC,EAAQ,aAAa,OAAO,UAAU;;AAHzB;AAAS,GAAA,IAAA;ACET,YAAuB,GAAS;AAC7C,SAAI,GAAY,OAAa,SACpB,IAMP,EAAQ,gBACR,EAAQ,cACR,IAAa,KAAW,EAAQ,OAAO,SAEvC,GAAmB;;AAZR;AAAS,GAAA,IAAA;ACIxB,YAA6B,GAAS;AACpC,SAAI,CAAC,GAAc,MACnB,GAAiB,GAAS,aAAa,UAC9B,OAGF,EAAQ;;AANjB;AAAS,GAAA,IAAA;AAWT,YAA4B,GAAS;AACnC,MAAI,IAAY,UAAU,UAAU,cAAc,QAAQ,eAAe,IACrE,IAAO,UAAU,UAAU,QAAQ,eAAe;AAEtD,MAAI,KAAQ,GAAc,IAAU;AAElC,QAAI,IAAa,GAAiB;AAElC,QAAI,EAAW,aAAa;AAC1B,aAAO;;AAMX,WAFI,IAAc,GAAc,IAEzB,GAAc,MAAgB,CAAC,QAAQ,QAAQ,QAAQ,GAAY,MAAgB,KAAG;AAC3F,QAAI,KAAM,GAAiB;AAI3B,QAAI,GAAI,cAAc,UAAU,GAAI,gBAAgB,UAAU,GAAI,YAAY,WAAW,CAAC,aAAa,eAAe,QAAQ,GAAI,gBAAgB,MAAM,KAAa,GAAI,eAAe,YAAY,KAAa,GAAI,UAAU,GAAI,WAAW;AAC5O,aAAO;AAEP,QAAc,EAAY;;AAI9B,SAAO;;AA3BT;AAAS,GAAA,IAAA;AAgCM,YAAyB,GAAS;AAI/C,WAHI,IAAS,GAAU,IACnB,IAAe,GAAoB,IAEhC,KAAgB,GAAe,MAAiB,GAAiB,GAAc,aAAa;AACjG,QAAe,GAAoB;AAGrC,SAAI,KAAiB,IAAY,OAAkB,UAAU,GAAY,OAAkB,UAAU,GAAiB,GAAc,aAAa,YACxI,IAGF,KAAgB,GAAmB,MAAY;;AAZzC;AAAS,GAAA,IAAA;AClDT,YAAkC,GAAW;AAC1D,SAAO,CAAC,OAAO,UAAU,QAAQ,MAAc,IAAI,MAAM;;AAD5C;AAAS,GAAA,IAAA;ACCjB,YAAgB,GAAK,GAAO,GAAK;AACtC,SAAO,GAAQ,GAAK,GAAQ,GAAO;;AAD9B;AAAS,GAAA,IAAA;AAGT,YAAwB,GAAK,GAAO,GAAK;AAC9C,MAAI,IAAI,GAAO,GAAK,GAAO;AAC3B,SAAO,IAAI,IAAM,IAAM;;AAFlB;AAAS,GAAA,IAAA;ACJD,cAA8B;AAC3C,SAAO,EACL,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM;;AALK;AAAS,GAAA,IAAA;ACCT,YAA4B,GAAe;AACxD,SAAO,OAAO,OAAO,IAAI,MAAsB;;AADlC;AAAS,GAAA,IAAA;ACDT,YAAyB,GAAO,GAAM;AACnD,SAAO,EAAK,OAAO,SAAU,GAAS,GAAK;AACzC,WAAA,EAAQ,KAAO,GACR;KACN;;AAJU;AAAS,GAAA,IAAA;ACWxB,IAAI,KAAkB,GAAA,SAAyB,GAAS,GAAO;AAC7D,SAAA,IAAU,OAAO,KAAY,aAAa,EAAQ,OAAO,OAAO,IAAI,EAAM,OAAO,EAC/E,WAAW,EAAM,gBACb,GACC,GAAmB,OAAO,KAAY,WAAW,IAAU,GAAgB,GAAS;GAJvE;AAOtB,YAAe,GAAM;AACnB,MAAI,GAEA,IAAQ,EAAK,OACb,IAAO,EAAK,MACZ,IAAU,EAAK,SACf,KAAe,EAAM,SAAS,OAC9B,KAAgB,EAAM,cAAc,eACpC,IAAgB,GAAiB,EAAM,YACvC,IAAO,GAAyB,IAChC,IAAa,CAAC,IAAM,IAAO,QAAQ,MAAkB,GACrD,KAAM,IAAa,WAAW;AAElC,MAAI,CAAA,EAAC,MAAgB,CAAC,KAItB;AAAA,QAAI,KAAgB,GAAgB,EAAQ,SAAS,IACjD,KAAY,GAAc,KAC1B,KAAU,MAAS,MAAM,KAAM,IAC/B,KAAU,MAAS,MAAM,KAAS,IAClC,IAAU,EAAM,MAAM,UAAU,MAAO,EAAM,MAAM,UAAU,KAAQ,GAAc,KAAQ,EAAM,MAAM,OAAO,KAC9G,IAAY,GAAc,KAAQ,EAAM,MAAM,UAAU,IACxD,IAAoB,GAAgB,KACpC,KAAa,IAAoB,MAAS,MAAM,EAAkB,gBAAgB,IAAI,EAAkB,eAAe,IAAI,GAC3H,IAAoB,IAAU,IAAI,IAAY,GAG9C,IAAM,GAAc,KACpB,IAAM,KAAa,GAAU,MAAO,GAAc,KAClD,KAAS,KAAa,IAAI,GAAU,MAAO,IAAI,GAC/C,IAAS,GAAO,GAAK,IAAQ,IAE7B,IAAW;AACf,MAAM,cAAc,KAAS,KAAwB,IAAI,EAAsB,KAAY,GAAQ,EAAsB,eAAe,IAAS,IAAQ;;;AAlC3J;AAAS,GAAA,IAAA;AAqCT,YAAgB,GAAO;AACrB,MAAI,IAAQ,EAAM,OACd,IAAU,EAAM,SAChB,IAAmB,EAAQ,SAC3B,IAAe,MAAqB,SAAS,wBAAwB;AAErE,OAAgB,QAKhB,QAAO,KAAiB,YAC1B,KAAe,EAAM,SAAS,OAAO,cAAc,IAE/C,CAAC,MAWH,CAAC,GAAS,EAAM,SAAS,QAAQ,MAQrC,GAAM,SAAS,QAAQ;;AAjCzB;AAAS,GAAA,IAAA;AAqCT,IAAO,KAAQ,EACb,MAAM,SACN,SAAS,MACT,OAAO,QACP,IAAI,IACJ,QAAQ,IACR,UAAU,CAAC,kBACX,kBAAkB,CAAC;ACnGN,YAAsB,GAAW;AAC9C,SAAO,EAAU,MAAM,KAAK;;AADf;AAAS,GAAA,IAAA;ACSxB,IAAI,KAAa,EACf,KAAK,QACL,OAAO,QACP,QAAQ,QACR,MAAM;AAKR,YAA2B,GAAM;AAC/B,MAAI,IAAI,EAAK,GACT,IAAI,EAAK,GACT,IAAM,QACN,IAAM,EAAI,oBAAoB;AAClC,SAAO,EACL,GAAG,GAAM,IAAI,KAAO,KAAO,GAC3B,GAAG,GAAM,IAAI,KAAO,KAAO;;AAP/B;AAAS,GAAA,IAAA;AAWF,YAAqB,GAAO;AACjC,MAAI,GAEA,IAAS,EAAM,QACf,IAAa,EAAM,YACnB,IAAY,EAAM,WAClB,KAAY,EAAM,WAClB,KAAU,EAAM,SAChB,IAAW,EAAM,UACjB,IAAkB,EAAM,iBACxB,IAAW,EAAM,UACjB,KAAe,EAAM,cACrB,KAAU,EAAM,SAChB,KAAa,GAAQ,GACrB,KAAI,OAAe,SAAS,IAAI,IAChC,KAAa,GAAQ,GACrB,IAAI,OAAe,SAAS,IAAI,IAEhC,IAAQ,OAAO,MAAiB,aAAa,GAAa,EAC5D,GAAG,IACH,GAAG,OACA,EACH,GAAG,IACH,GAAG;AAGL,OAAI,EAAM,GACV,IAAI,EAAM;AACV,MAAI,IAAO,GAAQ,eAAe,MAC9B,KAAO,GAAQ,eAAe,MAC9B,IAAQ,IACR,IAAQ,IACR,IAAM;AAEV,MAAI,GAAU;AACZ,QAAI,KAAe,GAAgB,IAC/B,IAAa,gBACb,IAAY;AAchB,QAZI,OAAiB,GAAU,MAC7B,MAAe,GAAmB,IAE9B,GAAiB,IAAc,aAAa,YAAY,MAAa,cACvE,KAAa,gBACb,IAAY,iBAKhB,KAAe,IAEX,MAAc,MAAQ,OAAc,MAAQ,MAAc,OAAU,OAAc,IAAK;AACzF,UAAQ;AACR,UAAI,IAAU,MAAW,EAAI,iBAAiB,EAAI,eAAe,SACjE,GAAa;AACb,WAAK,IAAU,EAAW,QAC1B,KAAK,IAAkB,IAAI;;AAG7B,QAAI,MAAc,MAAS,OAAc,MAAO,MAAc,OAAW,OAAc,IAAK;AAC1F,UAAQ;AACR,UAAI,IAAU,MAAW,EAAI,iBAAiB,EAAI,eAAe,QACjE,GAAa;AACb,YAAK,IAAU,EAAW,OAC1B,MAAK,IAAkB,IAAI;;;AAI/B,MAAI,KAAe,OAAO,OAAO,EAC/B,UAAU,KACT,KAAY,KAEX,KAAQ,OAAiB,OAAO,GAAkB,EACpD,GAAG,IACH,GAAG,OACA,EACH,GAAG,IACH,GAAG;AAML,MAHA,KAAI,GAAM,GACV,IAAI,GAAM,GAEN,GAAiB;AACnB,QAAI;AAEJ,WAAO,OAAO,OAAO,IAAI,IAAe,KAAiB,IAAI,EAAe,KAAS,KAAO,MAAM,IAAI,EAAe,KAAS,IAAO,MAAM,IAAI,EAAe,YAAa,GAAI,oBAAoB,MAAM,IAAI,eAAe,KAAI,SAAS,IAAI,QAAQ,iBAAiB,KAAI,SAAS,IAAI,UAAU;;AAGnS,SAAO,OAAO,OAAO,IAAI,IAAe,KAAkB,IAAI,EAAgB,KAAS,KAAO,IAAI,OAAO,IAAI,EAAgB,KAAS,IAAO,KAAI,OAAO,IAAI,EAAgB,YAAY,IAAI;;AAzFvL;AAAS,GAAA,IAAA;AA4FhB,YAAuB,GAAO;AAC5B,MAAI,IAAQ,EAAM,OACd,IAAU,EAAM,SAChB,IAAwB,EAAQ,iBAChC,IAAkB,MAA0B,SAAS,OAAO,GAC5D,KAAoB,EAAQ,UAC5B,KAAW,OAAsB,SAAS,OAAO,IACjD,IAAwB,EAAQ,cAChC,IAAe,MAA0B,SAAS,OAAO;AAE7D,MAAI;AACF,QAAI;AASN,MAAI,KAAe,EACjB,WAAW,GAAiB,EAAM,YAClC,WAAW,GAAa,EAAM,YAC9B,QAAQ,EAAM,SAAS,QACvB,YAAY,EAAM,MAAM,QACxB,iBAAiB,GACjB,SAAS,EAAM,QAAQ,aAAa;AAGlC,IAAM,cAAc,iBAAiB,QACvC,GAAM,OAAO,SAAS,OAAO,OAAO,IAAI,EAAM,OAAO,QAAQ,GAAY,OAAO,OAAO,IAAI,IAAc,EACvG,SAAS,EAAM,cAAc,eAC7B,UAAU,EAAM,QAAQ,UACxB,UAAU,IACV,cAAc,SAId,EAAM,cAAc,SAAS,QAC/B,GAAM,OAAO,QAAQ,OAAO,OAAO,IAAI,EAAM,OAAO,OAAO,GAAY,OAAO,OAAO,IAAI,IAAc,EACrG,SAAS,EAAM,cAAc,OAC7B,UAAU,YACV,UAAU,OACV,cAAc,SAIlB,EAAM,WAAW,SAAS,OAAO,OAAO,IAAI,EAAM,WAAW,QAAQ,EACnE,yBAAyB,EAAM;;AAhDnC;AAAS,GAAA,IAAA;AAqDT,IAAO,KAAQ,EACb,MAAM,iBACN,SAAS,MACT,OAAO,eACP,IAAI,IACJ,MAAM;ACjLR,IAAI,KAAU,EACZ,SAAS;AAGX,YAAgB,GAAM;AACpB,MAAI,IAAQ,EAAK,OACb,IAAW,EAAK,UAChB,IAAU,EAAK,SACf,IAAkB,EAAQ,QAC1B,KAAS,MAAoB,SAAS,OAAO,GAC7C,KAAkB,EAAQ,QAC1B,IAAS,OAAoB,SAAS,OAAO,IAC7C,IAAS,GAAU,EAAM,SAAS,SAClC,IAAgB,GAAG,OAAO,EAAM,cAAc,WAAW,EAAM,cAAc;AAEjF,SAAI,MACF,EAAc,QAAQ,SAAU,IAAc;AAC5C,OAAa,iBAAiB,UAAU,EAAS,QAAQ;MAIzD,KACF,EAAO,iBAAiB,UAAU,EAAS,QAAQ,KAG9C,WAAY;AACb,UACF,EAAc,QAAQ,SAAU,IAAc;AAC5C,SAAa,oBAAoB,UAAU,EAAS,QAAQ;QAI5D,KACF,EAAO,oBAAoB,UAAU,EAAS,QAAQ;;;AA7B5D;AAAS,GAAA,IAAA;AAmCT,IAAO,KAAQ,EACb,MAAM,kBACN,SAAS,MACT,OAAO,SACP,IAAI,GAAA,WAAc;GAAd,OACJ,QAAQ,IACR,MAAM;AC/CR,IAAI,KAAO,EACT,MAAM,SACN,OAAO,QACP,QAAQ,OACR,KAAK;AAEQ,YAA8B,GAAW;AACtD,SAAO,EAAU,QAAQ,0BAA0B,SAAU,GAAS;AACpE,WAAO,GAAK;;;AAFD;AAAS,GAAA,IAAA;ACNxB,IAAI,KAAO,EACT,OAAO,OACP,KAAK;AAEQ,YAAuC,GAAW;AAC/D,SAAO,EAAU,QAAQ,cAAc,SAAU,GAAS;AACxD,WAAO,GAAK;;;AAFD;AAAS,GAAA,IAAA;ACHT,YAAyB,GAAM;AAC5C,MAAI,IAAM,GAAU,IAChB,IAAa,EAAI,aACjB,IAAY,EAAI;AACpB,SAAO,EACL,YAAY,GACZ,WAAW;;AANA;AAAS,GAAA,IAAA;ACET,YAA6B,GAAS;AAQnD,SAAO,GAAsB,GAAmB,IAAU,OAAO,GAAgB,GAAS;;AAR7E;AAAS,GAAA,IAAA;ACAT,YAAyB,GAAS;AAC/C,MAAI,IAAM,GAAU,IAChB,IAAO,GAAmB,IAC1B,IAAiB,EAAI,gBACrB,IAAQ,EAAK,aACb,KAAS,EAAK,cACd,KAAI,GACJ,IAAI;AAMR,SAAI,KACF,KAAQ,EAAe,OACvB,KAAS,EAAe,QASnB,iCAAiC,KAAK,UAAU,cACnD,MAAI,EAAe,YACnB,IAAI,EAAe,aAIhB,EACL,OAAO,GACP,QAAQ,IACR,GAAG,KAAI,GAAoB,IAC3B,GAAG;;AAlCQ;AAAS,GAAA,IAAA;ACIT,YAAyB,GAAS;AAC/C,MAAI,GAEA,IAAO,GAAmB,IAC1B,IAAY,GAAgB,IAC5B,IAAQ,KAAwB,EAAQ,kBAAkB,OAAO,SAAS,EAAsB,MAChG,KAAQ,GAAI,EAAK,aAAa,EAAK,aAAa,IAAO,EAAK,cAAc,GAAG,IAAO,EAAK,cAAc,IACvG,KAAS,GAAI,EAAK,cAAc,EAAK,cAAc,IAAO,EAAK,eAAe,GAAG,IAAO,EAAK,eAAe,IAC5G,IAAI,CAAC,EAAU,aAAa,GAAoB,IAChD,IAAI,CAAC,EAAU;AAEnB,SAAI,GAAiB,KAAQ,GAAM,cAAc,SAC/C,MAAK,GAAI,EAAK,aAAa,IAAO,EAAK,cAAc,KAAK,KAGrD,EACL,OAAO,IACP,QAAQ,IACR,GAAG,GACH,GAAG;;AAnBQ;AAAS,GAAA,IAAA;ACNT,YAAwB,GAAS;AAE9C,MAAI,IAAoB,GAAiB,IACrC,IAAW,EAAkB,UAC7B,IAAY,EAAkB,WAC9B,IAAY,EAAkB;AAElC,SAAO,6BAA6B,KAAK,IAAW,IAAY;;AAPnD;AAAS,GAAA,IAAA;ACGT,YAAyB,GAAM;AAC5C,SAAI,CAAC,QAAQ,QAAQ,aAAa,QAAQ,GAAY,OAAU,IAEvD,EAAK,cAAc,OAGxB,GAAc,MAAS,GAAe,KACjC,IAGF,GAAgB,GAAc;;AAVxB;AAAS,GAAA,IAAA;ACOT,YAA2B,GAAS,GAAM;AACvD,MAAI;AAEA,QAAS,UACX,KAAO;AAGT,MAAI,IAAe,GAAgB,IAC/B,IAAS,MAAmB,MAAwB,EAAQ,kBAAkB,OAAO,SAAS,EAAsB,OACpH,KAAM,GAAU,IAChB,KAAS,IAAS,CAAC,IAAK,OAAO,GAAI,kBAAkB,IAAI,GAAe,KAAgB,IAAe,MAAM,GAC7G,IAAc,EAAK,OAAO;AAC9B,SAAO,IAAS,IAChB,EAAY,OAAO,GAAkB,GAAc;;AAbtC;AAAS,GAAA,IAAA;ACXT,YAA0B,GAAM;AAC7C,SAAO,OAAO,OAAO,IAAI,GAAM,EAC7B,MAAM,EAAK,GACX,KAAK,EAAK,GACV,OAAO,EAAK,IAAI,EAAK,OACrB,QAAQ,EAAK,IAAI,EAAK;;AALX;AAAS,GAAA,IAAA;ACexB,YAAoC,GAAS;AAC3C,MAAI,IAAO,GAAsB;AACjC,SAAA,EAAK,MAAM,EAAK,MAAM,EAAQ,WAC9B,EAAK,OAAO,EAAK,OAAO,EAAQ,YAChC,EAAK,SAAS,EAAK,MAAM,EAAQ,cACjC,EAAK,QAAQ,EAAK,OAAO,EAAQ,aACjC,EAAK,QAAQ,EAAQ,aACrB,EAAK,SAAS,EAAQ,cACtB,EAAK,IAAI,EAAK,MACd,EAAK,IAAI,EAAK,KACP;;AAVT;AAAS,GAAA,IAAA;AAaT,YAAoC,GAAS,GAAgB;AAC3D,SAAO,MAAmB,KAAW,GAAiB,GAAgB,MAAY,GAAU,KAAkB,GAA2B,KAAkB,GAAiB,GAAgB,GAAmB;;AADjN;AAAS,GAAA,IAAA;AAOT,YAA4B,GAAS;AACnC,MAAI,IAAkB,GAAkB,GAAc,KAClD,IAAoB,CAAC,YAAY,SAAS,QAAQ,GAAiB,GAAS,aAAa,GACzF,IAAiB,KAAqB,GAAc,KAAW,GAAgB,KAAW;AAE9F,SAAK,GAAU,KAKR,EAAgB,OAAO,SAAU,GAAgB;AACtD,WAAO,GAAU,MAAmB,GAAS,GAAgB,MAAmB,GAAY,OAAoB;OALzG;;AANX;AAAS,GAAA,IAAA;AAiBM,YAAyB,GAAS,GAAU,GAAc;AACvE,MAAI,IAAsB,MAAa,oBAAoB,GAAmB,KAAW,GAAG,OAAO,IAC/F,IAAkB,GAAG,OAAO,GAAqB,CAAC,KAClD,KAAsB,EAAgB,IACtC,KAAe,EAAgB,OAAO,SAAU,GAAS,GAAgB;AAC3E,QAAI,IAAO,GAA2B,GAAS;AAC/C,WAAA,EAAQ,MAAM,GAAI,EAAK,KAAK,EAAQ,MACpC,EAAQ,QAAQ,GAAI,EAAK,OAAO,EAAQ,QACxC,EAAQ,SAAS,GAAI,EAAK,QAAQ,EAAQ,SAC1C,EAAQ,OAAO,GAAI,EAAK,MAAM,EAAQ,OAC/B;KACN,GAA2B,GAAS;AACvC,SAAA,GAAa,QAAQ,GAAa,QAAQ,GAAa,MACvD,GAAa,SAAS,GAAa,SAAS,GAAa,KACzD,GAAa,IAAI,GAAa,MAC9B,GAAa,IAAI,GAAa,KACvB;;AAhBM;AAAS,GAAA,IAAA;AChDT,YAAwB,GAAM;AAC3C,MAAI,IAAY,EAAK,WACjB,IAAU,EAAK,SACf,IAAY,EAAK,WACjB,IAAgB,IAAY,GAAiB,KAAa,MAC1D,KAAY,IAAY,GAAa,KAAa,MAClD,KAAU,EAAU,IAAI,EAAU,QAAQ,IAAI,EAAQ,QAAQ,GAC9D,IAAU,EAAU,IAAI,EAAU,SAAS,IAAI,EAAQ,SAAS,GAChE;AAEJ,UAAQ;SACD;AACH,UAAU,EACR,GAAG,IACH,GAAG,EAAU,IAAI,EAAQ;AAE3B;SAEG;AACH,UAAU,EACR,GAAG,IACH,GAAG,EAAU,IAAI,EAAU;AAE7B;SAEG;AACH,UAAU,EACR,GAAG,EAAU,IAAI,EAAU,OAC3B,GAAG;AAEL;SAEG;AACH,UAAU,EACR,GAAG,EAAU,IAAI,EAAQ,OACzB,GAAG;AAEL;;AAGA,UAAU,EACR,GAAG,EAAU,GACb,GAAG,EAAU;;AAInB,MAAI,IAAW,IAAgB,GAAyB,KAAiB;AAEzE,MAAI,KAAY,MAAM;AACpB,QAAI,KAAM,MAAa,MAAM,WAAW;AAExC,YAAQ;WACD;AACH,UAAQ,KAAY,EAAQ,KAAa,GAAU,MAAO,IAAI,EAAQ,MAAO;AAC7E;WAEG;AACH,UAAQ,KAAY,EAAQ,KAAa,GAAU,MAAO,IAAI,EAAQ,MAAO;AAC7E;;;;AAMN,SAAO;;AAhEM;AAAS,GAAA,IAAA;ACMT,YAAwB,GAAO,GAAS;AACjD,QAAY,UACd,KAAU;AAGZ,MAAI,IAAW,GACX,IAAqB,EAAS,WAC9B,IAAY,MAAuB,SAAS,EAAM,YAAY,GAC9D,KAAoB,EAAS,UAC7B,KAAW,OAAsB,SAAS,KAAkB,IAC5D,IAAwB,EAAS,cACjC,IAAe,MAA0B,SAAS,KAAW,GAC7D,IAAwB,EAAS,gBACjC,KAAiB,MAA0B,SAAS,KAAS,GAC7D,KAAuB,EAAS,aAChC,KAAc,OAAyB,SAAS,QAAQ,IACxD,KAAmB,EAAS,SAC5B,KAAU,OAAqB,SAAS,IAAI,IAC5C,IAAgB,GAAmB,OAAO,MAAY,WAAW,KAAU,GAAgB,IAAS,MACpG,IAAa,OAAmB,KAAS,KAAY,IACrD,IAAa,EAAM,MAAM,QACzB,KAAU,EAAM,SAAS,KAAc,IAAa,KACpD,IAAqB,GAAgB,GAAU,MAAW,KAAU,GAAQ,kBAAkB,GAAmB,EAAM,SAAS,SAAS,IAAU,IACnJ,IAAsB,GAAsB,EAAM,SAAS,YAC3D,IAAgB,GAAe,EACjC,WAAW,GACX,SAAS,GACT,UAAU,YACV,WAAW,MAET,KAAmB,GAAiB,OAAO,OAAO,IAAI,GAAY,KAClE,IAAoB,OAAmB,KAAS,KAAmB,GAGnE,IAAkB,EACpB,KAAK,EAAmB,MAAM,EAAkB,MAAM,EAAc,KACpE,QAAQ,EAAkB,SAAS,EAAmB,SAAS,EAAc,QAC7E,MAAM,EAAmB,OAAO,EAAkB,OAAO,EAAc,MACvE,OAAO,EAAkB,QAAQ,EAAmB,QAAQ,EAAc,SAExE,IAAa,EAAM,cAAc;AAErC,MAAI,OAAmB,MAAU,GAAY;AAC3C,QAAI,IAAS,EAAW;AACxB,WAAO,KAAK,GAAiB,QAAQ,SAAU,IAAK;AAClD,UAAI,KAAW,CAAC,IAAO,IAAQ,QAAQ,OAAQ,IAAI,IAAI,IACnD,IAAO,CAAC,IAAK,IAAQ,QAAQ,OAAQ,IAAI,MAAM;AACnD,QAAgB,OAAQ,EAAO,KAAQ;;;AAI3C,SAAO;;AAnDM;AAAS,GAAA,IAAA;ACNT,YAA8B,GAAO,GAAS;AACvD,QAAY,UACd,KAAU;AAGZ,MAAI,IAAW,GACX,IAAY,EAAS,WACrB,IAAW,EAAS,UACpB,KAAe,EAAS,cACxB,KAAU,EAAS,SACnB,IAAiB,EAAS,gBAC1B,IAAwB,EAAS,uBACjC,IAAwB,MAA0B,SAAS,KAAgB,GAC3E,KAAY,GAAa,IACzB,KAAa,KAAY,IAAiB,KAAsB,GAAoB,OAAO,SAAU,IAAW;AAClH,WAAO,GAAa,QAAe;OAChC,IACD,KAAoB,GAAW,OAAO,SAAU,IAAW;AAC7D,WAAO,EAAsB,QAAQ,OAAc;;AAGjD,KAAkB,WAAW,KAC/B,MAAoB;AAQtB,MAAI,KAAY,GAAkB,OAAO,SAAU,IAAK,GAAW;AACjE,WAAA,GAAI,KAAa,GAAe,GAAO,EACrC,WAAW,GACX,UAAU,GACV,cAAc,IACd,SAAS,MACR,GAAiB,KACb;KACN;AACH,SAAO,OAAO,KAAK,IAAW,KAAK,SAAU,IAAG,GAAG;AACjD,WAAO,GAAU,MAAK,GAAU;;;AAxCrB;AAAS,GAAA,IAAA;ACIxB,YAAuC,GAAW;AAChD,MAAI,GAAiB,OAAe;AAClC,WAAO;AAGT,MAAI,IAAoB,GAAqB;AAC7C,SAAO,CAAC,GAA8B,IAAY,GAAmB,GAA8B;;AANrG;AAAS,GAAA,IAAA;AAST,YAAc,GAAM;AAClB,MAAI,IAAQ,EAAK,OACb,IAAU,EAAK,SACf,IAAO,EAAK;AAEhB,MAAI,CAAA,EAAM,cAAc,GAAM,OAoC9B;AAAA,aAhCI,IAAoB,EAAQ,UAC5B,KAAgB,MAAsB,SAAS,OAAO,GACtD,KAAmB,EAAQ,SAC3B,IAAe,OAAqB,SAAS,OAAO,IACpD,IAA8B,EAAQ,oBACtC,IAAU,EAAQ,SAClB,KAAW,EAAQ,UACnB,KAAe,EAAQ,cACvB,KAAc,EAAQ,aACtB,KAAwB,EAAQ,gBAChC,KAAiB,OAA0B,SAAS,OAAO,IAC3D,IAAwB,EAAQ,uBAChC,IAAqB,EAAM,QAAQ,WACnC,IAAgB,GAAiB,IACjC,KAAkB,MAAkB,GACpC,IAAqB,KAAgC,OAAmB,CAAC,KAAiB,CAAC,GAAqB,MAAuB,GAA8B,KACrK,IAAa,CAAC,GAAoB,OAAO,GAAoB,OAAO,SAAU,GAAK,IAAW;AAChG,aAAO,EAAI,OAAO,GAAiB,QAAe,KAAO,GAAqB,GAAO,EACnF,WAAW,IACX,UAAU,IACV,cAAc,IACd,SAAS,GACT,gBAAgB,IAChB,uBAAuB,OACpB;OACJ,KACC,IAAgB,EAAM,MAAM,WAC5B,KAAa,EAAM,MAAM,QACzB,IAAY,oBAAI,OAChB,IAAqB,MACrB,IAAwB,EAAW,IAE9B,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;AAC1C,UAAI,KAAY,EAAW,IAEvB,KAAiB,GAAiB,KAElC,IAAmB,GAAa,QAAe,IAC/C,KAAa,CAAC,IAAK,IAAQ,QAAQ,OAAmB,GACtD,KAAM,KAAa,UAAU,UAC7B,KAAW,GAAe,GAAO,EACnC,WAAW,IACX,UAAU,IACV,cAAc,IACd,aAAa,IACb,SAAS,MAEP,KAAoB,KAAa,IAAmB,KAAQ,KAAO,IAAmB,KAAS;AAE/F,QAAc,MAAO,GAAW,OAClC,MAAoB,GAAqB;AAG3C,UAAI,KAAmB,GAAqB,KACxC,KAAS;AAUb,UARI,MACF,GAAO,KAAK,GAAS,OAAmB,IAGtC,KACF,GAAO,KAAK,GAAS,OAAsB,GAAG,GAAS,OAAqB,IAG1E,GAAO,MAAM,SAAU,GAAO;AAChC,eAAO;UACL;AACF,YAAwB,IACxB,IAAqB;AACrB;;AAGF,QAAU,IAAI,IAAW;;AAG3B,QAAI;AAqBF,eAnBI,KAAiB,KAAiB,IAAI,GAEtC,KAAQ,GAAA,SAAe,IAAI;AAC7B,YAAI,KAAmB,EAAW,KAAK,SAAU,IAAW;AAC1D,cAAI,KAAS,EAAU,IAAI;AAE3B,cAAI;AACF,mBAAO,GAAO,MAAM,GAAG,IAAI,MAAM,SAAU,IAAO;AAChD,qBAAO;;;AAKb,YAAI;AACF,iBAAA,IAAwB,IACjB;SAbC,UAiBH,KAAK,IAAgB,KAAK,GAAG,MAAM;AAC1C,YAAI,KAAO,GAAM;AAEjB,YAAI,OAAS;AAAS;;AAItB,MAAM,cAAc,KACtB,GAAM,cAAc,GAAM,QAAQ,MAClC,EAAM,YAAY,GAClB,EAAM,QAAQ;;;AAnHlB;AAAS,GAAA,IAAA;AAwHT,IAAO,KAAQ,EACb,MAAM,QACN,SAAS,MACT,OAAO,QACP,IAAI,IACJ,kBAAkB,CAAC,WACnB,MAAM,EACJ,OAAO;AC7IX,YAAwB,GAAU,GAAM,GAAkB;AACxD,SAAI,MAAqB,UACvB,KAAmB,EACjB,GAAG,GACH,GAAG,MAIA,EACL,KAAK,EAAS,MAAM,EAAK,SAAS,EAAiB,GACnD,OAAO,EAAS,QAAQ,EAAK,QAAQ,EAAiB,GACtD,QAAQ,EAAS,SAAS,EAAK,SAAS,EAAiB,GACzD,MAAM,EAAS,OAAO,EAAK,QAAQ,EAAiB;;AAZxD;AAAS,GAAA,IAAA;AAgBT,YAA+B,GAAU;AACvC,SAAO,CAAC,IAAK,IAAO,IAAQ,IAAM,KAAK,SAAU,GAAM;AACrD,WAAO,EAAS,MAAS;;;AAF7B;AAAS,GAAA,IAAA;AAMT,YAAc,GAAM;AAClB,MAAI,IAAQ,EAAK,OACb,IAAO,EAAK,MACZ,IAAgB,EAAM,MAAM,WAC5B,IAAa,EAAM,MAAM,QACzB,KAAmB,EAAM,cAAc,iBACvC,KAAoB,GAAe,GAAO,EAC5C,gBAAgB,gBAEd,IAAoB,GAAe,GAAO,EAC5C,aAAa,SAEX,IAA2B,GAAe,IAAmB,IAC7D,IAAsB,GAAe,GAAmB,GAAY,KACpE,KAAoB,GAAsB,IAC1C,KAAmB,GAAsB;AAC7C,IAAM,cAAc,KAAQ,EAC1B,0BAA0B,GAC1B,qBAAqB,GACrB,mBAAmB,IACnB,kBAAkB,MAEpB,EAAM,WAAW,SAAS,OAAO,OAAO,IAAI,EAAM,WAAW,QAAQ,EACnE,gCAAgC,IAChC,uBAAuB;;AAxB3B;AAAS,GAAA,IAAA;AA6BT,IAAO,KAAQ,EACb,MAAM,QACN,SAAS,MACT,OAAO,QACP,kBAAkB,CAAC,oBACnB,IAAI;ACxDC,YAAiC,GAAW,GAAO,GAAQ;AAChE,MAAI,IAAgB,GAAiB,IACjC,IAAiB,CAAC,IAAM,IAAK,QAAQ,MAAkB,IAAI,KAAK,GAEhE,KAAO,OAAO,KAAW,aAAa,EAAO,OAAO,OAAO,IAAI,GAAO,EACxE,WAAW,QACP,GACF,KAAW,GAAK,IAChB,IAAW,GAAK;AAEpB,SAAA,KAAW,MAAY,GACvB,IAAY,MAAY,KAAK,GACtB,CAAC,IAAM,IAAO,QAAQ,MAAkB,IAAI,EACjD,GAAG,GACH,GAAG,OACD,EACF,GAAG,IACH,GAAG;;AAjBA;AAAS,GAAA,IAAA;AAqBhB,YAAgB,GAAO;AACrB,MAAI,IAAQ,EAAM,OACd,IAAU,EAAM,SAChB,IAAO,EAAM,MACb,IAAkB,EAAQ,QAC1B,KAAS,MAAoB,SAAS,CAAC,GAAG,KAAK,GAC/C,KAAO,GAAW,OAAO,SAAU,IAAK,IAAW;AACrD,WAAA,GAAI,MAAa,GAAwB,IAAW,EAAM,OAAO,KAC1D;KACN,KACC,IAAwB,GAAK,EAAM,YACnC,IAAI,EAAsB,GAC1B,IAAI,EAAsB;AAE1B,IAAM,cAAc,iBAAiB,QACvC,GAAM,cAAc,cAAc,KAAK,GACvC,EAAM,cAAc,cAAc,KAAK,IAGzC,EAAM,cAAc,KAAQ;;AAnB9B;AAAS,GAAA,IAAA;AAuBT,IAAO,KAAQ,EACb,MAAM,UACN,SAAS,MACT,OAAO,QACP,UAAU,CAAC,kBACX,IAAI;AClDN,YAAuB,GAAM;AAC3B,MAAI,IAAQ,EAAK,OACb,IAAO,EAAK;AAKhB,IAAM,cAAc,KAAQ,GAAe,EACzC,WAAW,EAAM,MAAM,WACvB,SAAS,EAAM,MAAM,QACrB,UAAU,YACV,WAAW,EAAM;;AAXrB;AAAS,GAAA,IAAA;AAgBT,IAAO,KAAQ,EACb,MAAM,iBACN,SAAS,MACT,OAAO,QACP,IAAI,IACJ,MAAM;ACvBO,YAAoB,GAAM;AACvC,SAAO,MAAS,MAAM,MAAM;;AADf;AAAS,GAAA,IAAA;ACYxB,YAAyB,GAAM;AAC7B,MAAI,IAAQ,EAAK,OACb,IAAU,EAAK,SACf,IAAO,EAAK,MACZ,IAAoB,EAAQ,UAC5B,KAAgB,MAAsB,SAAS,OAAO,GACtD,KAAmB,EAAQ,SAC3B,IAAe,OAAqB,SAAS,QAAQ,IACrD,IAAW,EAAQ,UACnB,IAAe,EAAQ,cACvB,KAAc,EAAQ,aACtB,KAAU,EAAQ,SAClB,KAAkB,EAAQ,QAC1B,KAAS,OAAoB,SAAS,OAAO,IAC7C,KAAwB,EAAQ,cAChC,IAAe,OAA0B,SAAS,IAAI,IACtD,IAAW,GAAe,GAAO,EACnC,UAAU,GACV,cAAc,GACd,SAAS,IACT,aAAa,OAEX,IAAgB,GAAiB,EAAM,YACvC,KAAY,GAAa,EAAM,YAC/B,IAAkB,CAAC,IACnB,IAAW,GAAyB,IACpC,IAAU,GAAW,IACrB,KAAgB,EAAM,cAAc,eACpC,IAAgB,EAAM,MAAM,WAC5B,IAAa,EAAM,MAAM,QACzB,IAAoB,OAAO,KAAiB,aAAa,EAAa,OAAO,OAAO,IAAI,EAAM,OAAO,EACvG,WAAW,EAAM,gBACb,GACF,IAA8B,OAAO,KAAsB,WAAW,EACxE,UAAU,GACV,SAAS,MACP,OAAO,OAAO,EAChB,UAAU,GACV,SAAS,KACR,IACC,KAAsB,EAAM,cAAc,SAAS,EAAM,cAAc,OAAO,EAAM,aAAa,MACjG,KAAO,EACT,GAAG,GACH,GAAG;AAGL,MAAI,CAAA,CAAC,IAIL;AAAA,QAAI,IAAe;AACjB,UAAI,GAEA,KAAW,MAAa,MAAM,KAAM,IACpC,KAAU,MAAa,MAAM,KAAS,IACtC,KAAM,MAAa,MAAM,WAAW,SACpC,KAAS,GAAc,IACvB,KAAM,KAAS,EAAS,KACxB,KAAM,KAAS,EAAS,KACxB,KAAW,KAAS,CAAC,EAAW,MAAO,IAAI,GAC3C,KAAS,OAAc,KAAQ,EAAc,MAAO,EAAW,KAC/D,KAAS,OAAc,KAAQ,CAAC,EAAW,MAAO,CAAC,EAAc,KAGjE,KAAe,EAAM,SAAS,OAC9B,IAAY,MAAU,KAAe,GAAc,MAAgB,EACrE,OAAO,GACP,QAAQ,KAEN,KAAqB,EAAM,cAAc,sBAAsB,EAAM,cAAc,oBAAoB,UAAU,MACjH,KAAkB,GAAmB,KACrC,KAAkB,GAAmB,KAMrC,KAAW,GAAO,GAAG,EAAc,KAAM,EAAU,MACnD,KAAY,IAAkB,EAAc,MAAO,IAAI,KAAW,KAAW,KAAkB,EAA4B,WAAW,KAAS,KAAW,KAAkB,EAA4B,UACxM,KAAY,IAAkB,CAAC,EAAc,MAAO,IAAI,KAAW,KAAW,KAAkB,EAA4B,WAAW,KAAS,KAAW,KAAkB,EAA4B,UACzM,KAAoB,EAAM,SAAS,SAAS,GAAgB,EAAM,SAAS,QAC3E,KAAe,KAAoB,MAAa,MAAM,GAAkB,aAAa,IAAI,GAAkB,cAAc,IAAI,GAC7H,KAAuB,KAAwB,MAAuB,OAAO,SAAS,GAAoB,OAAc,OAAO,IAAwB,GACvJ,KAAY,KAAS,KAAY,KAAsB,IACvD,KAAY,KAAS,KAAY,IACjC,KAAkB,GAAO,KAAS,GAAQ,IAAK,MAAa,IAAK,IAAQ,KAAS,GAAQ,IAAK,MAAa;AAChH,SAAc,KAAY,IAC1B,GAAK,KAAY,KAAkB;;AAGrC,QAAI,GAAc;AAChB,UAAI,IAEA,KAAY,MAAa,MAAM,KAAM,IAErC,KAAW,MAAa,MAAM,KAAS,IAEvC,KAAU,GAAc,IAExB,KAAO,MAAY,MAAM,WAAW,SAEpC,KAAO,KAAU,EAAS,KAE1B,KAAO,KAAU,EAAS,KAE1B,KAAe,CAAC,IAAK,IAAM,QAAQ,OAAmB,IAEtD,KAAwB,MAAyB,MAAuB,OAAO,SAAS,GAAoB,OAAa,OAAO,KAAyB,GAEzJ,KAAa,KAAe,KAAO,KAAU,EAAc,MAAQ,EAAW,MAAQ,KAAuB,EAA4B,SAEzI,KAAa,KAAe,KAAU,EAAc,MAAQ,EAAW,MAAQ,KAAuB,EAA4B,UAAU,IAE5I,KAAmB,MAAU,KAAe,GAAe,IAAY,IAAS,MAAc,GAAO,KAAS,KAAa,IAAM,IAAS,KAAS,KAAa;AAEpK,SAAc,KAAW,IACzB,GAAK,KAAW,KAAmB;;AAGrC,MAAM,cAAc,KAAQ;;;AAvH9B;AAAS,GAAA,IAAA;AA2HT,IAAO,KAAQ,EACb,MAAM,mBACN,SAAS,MACT,OAAO,QACP,IAAI,IACJ,kBAAkB,CAAC;AC5IN,YAA8B,GAAS;AACpD,SAAO,EACL,YAAY,EAAQ,YACpB,WAAW,EAAQ;;AAHR;AAAS,GAAA,IAAA;ACIT,YAAuB,GAAM;AAC1C,SAAI,MAAS,GAAU,MAAS,CAAC,GAAc,KACtC,GAAgB,KAEhB,GAAqB;;AAJjB;AAAS,GAAA,IAAA;ACKxB,YAAyB,GAAS;AAChC,MAAI,IAAO,EAAQ,yBACf,IAAS,GAAM,EAAK,SAAS,EAAQ,eAAe,GACpD,IAAS,GAAM,EAAK,UAAU,EAAQ,gBAAgB;AAC1D,SAAO,MAAW,KAAK,MAAW;;AAJpC;AAAS,GAAA,IAAA;AASM,YAA0B,GAAyB,GAAc,GAAS;AACnF,QAAY,UACd,KAAU;AAGZ,MAAI,IAA0B,GAAc,IACxC,IAAuB,GAAc,MAAiB,GAAgB,IACtE,KAAkB,GAAmB,IACrC,KAAO,GAAsB,GAAyB,IACtD,IAAS,EACX,YAAY,GACZ,WAAW,KAET,IAAU,EACZ,GAAG,GACH,GAAG;AAGL,SAAI,MAA2B,CAAC,KAA2B,CAAC,MACtD,KAAY,OAAkB,UAClC,GAAe,QACb,KAAS,GAAc,KAGrB,GAAc,KAChB,KAAU,GAAsB,GAAc,OAC9C,EAAQ,KAAK,EAAa,YAC1B,EAAQ,KAAK,EAAa,aACjB,MACT,GAAQ,IAAI,GAAoB,OAI7B,EACL,GAAG,GAAK,OAAO,EAAO,aAAa,EAAQ,GAC3C,GAAG,GAAK,MAAM,EAAO,YAAY,EAAQ,GACzC,OAAO,GAAK,OACZ,QAAQ,GAAK;;AArCF;AAAS,GAAA,IAAA;AChBxB,YAAe,GAAW;AACxB,MAAI,IAAM,oBAAI,OACV,IAAU,oBAAI,OACd,IAAS;AACb,IAAU,QAAQ,SAAU,IAAU;AACpC,MAAI,IAAI,GAAS,MAAM;;AAGzB,aAAc,IAAU;AACtB,MAAQ,IAAI,GAAS;AACrB,QAAI,KAAW,GAAG,OAAO,GAAS,YAAY,IAAI,GAAS,oBAAoB;AAC/E,OAAS,QAAQ,SAAU,GAAK;AAC9B,UAAI,CAAC,EAAQ,IAAI,IAAM;AACrB,YAAI,IAAc,EAAI,IAAI;AAEtB,aACF,EAAK;;QAIX,EAAO,KAAK;;AAZd;AAAS,SAAA,GAAA,GAAA,SAeT,EAAU,QAAQ,SAAU,IAAU;AAC/B,MAAQ,IAAI,GAAS,SAExB,EAAK;MAGF;;AA7BT;AAAS,GAAA,IAAA;AAgCM,YAAwB,GAAW;AAEhD,MAAI,IAAmB,GAAM;AAE7B,SAAO,GAAe,OAAO,SAAU,GAAK,GAAO;AACjD,WAAO,EAAI,OAAO,EAAiB,OAAO,SAAU,GAAU;AAC5D,aAAO,EAAS,UAAU;;KAE3B;;AARU;AAAS,GAAA,IAAA;AClCT,YAAkB,GAAI;AACnC,MAAI;AACJ,SAAO,WAAY;AACjB,WAAK,KACH,KAAU,IAAI,QAAQ,SAAU,GAAS;AACvC,cAAQ,UAAU,KAAK,WAAY;AACjC,YAAU,QACV,EAAQ;;SAKP;;;AAZI;AAAS,GAAA,IAAA;ACAT,YAAqB,GAAW;AAC7C,MAAI,IAAS,EAAU,OAAO,SAAU,GAAQ,GAAS;AACvD,QAAI,IAAW,EAAO,EAAQ;AAC9B,WAAA,EAAO,EAAQ,QAAQ,IAAW,OAAO,OAAO,IAAI,GAAU,GAAS,EACrE,SAAS,OAAO,OAAO,IAAI,EAAS,SAAS,EAAQ,UACrD,MAAM,OAAO,OAAO,IAAI,EAAS,MAAM,EAAQ,WAC5C,GACE;KACN;AAEH,SAAO,OAAO,KAAK,GAAQ,IAAI,SAAU,GAAK;AAC5C,WAAO,EAAO;;;AAXH;AAAS,GAAA,IAAA;ACgBxB,IAAI,KAAkB,EACpB,WAAW,UACX,WAAW,IACX,UAAU;AAGZ,cAA4B;AAC1B,WAAS,IAAO,UAAU,QAAQ,IAAO,IAAI,MAAM,IAAO,IAAO,GAAG,IAAO,GAAM;AAC/E,MAAK,KAAQ,UAAU;AAGzB,SAAO,CAAC,EAAK,KAAK,SAAU,GAAS;AACnC,WAAO,CAAE,MAAW,OAAO,EAAQ,yBAA0B;;;AANjE;AAAS,GAAA,IAAA;AAUF,YAAyB,GAAkB;AAC5C,QAAqB,UACvB,KAAmB;AAGrB,MAAI,IAAoB,GACpB,IAAwB,EAAkB,kBAC1C,IAAmB,MAA0B,SAAS,KAAK,GAC3D,IAAyB,EAAkB,gBAC3C,KAAiB,MAA2B,SAAS,KAAkB;AAC3E,SAAO,GAAA,SAAsB,GAAW,GAAQ,GAAS;AACnD,UAAY,UACd,KAAU;AAGZ,QAAI,KAAQ,EACV,WAAW,UACX,kBAAkB,IAClB,SAAS,OAAO,OAAO,IAAI,IAAiB,KAC5C,eAAe,IACf,UAAU,EACR,WAAW,GACX,QAAQ,KAEV,YAAY,IACZ,QAAQ,MAEN,KAAmB,IACnB,KAAc,OACd,KAAW,EACb,OAAO,IACP,YAAY,GAAA,SAAoB,GAAkB;AAChD,UAAI,KAAU,OAAO,KAAqB,aAAa,EAAiB,GAAM,WAAW;AACzF,WACA,GAAM,UAAU,OAAO,OAAO,IAAI,IAAgB,GAAM,SAAS,KACjE,GAAM,gBAAgB,EACpB,WAAW,GAAU,KAAa,GAAkB,KAAa,EAAU,iBAAiB,GAAkB,EAAU,kBAAkB,IAC1I,QAAQ,GAAkB;AAI5B,UAAI,IAAmB,GAAe,GAAY,GAAG,OAAO,GAAkB,GAAM,QAAQ;AAO5F,UALA,GAAM,mBAAmB,EAAiB,OAAO,SAAU,IAAG;AAC5D,eAAO,GAAE;UAIP,OAAuC;AACzC,YAAI;AAMJ,YAAI,iBAAiB,GAAM,QAAQ,eAAe;AAChD,cAAI;AAUN,YAAI,IACA,GACA,GACA,GACA;;AAWN,aAAA,MACO,GAAS;OAnDN,eA0DZ,aAAa,GAAA,WAAuB;AAClC,UAAI,CAAA,IAIJ;AAAA,YAAI,IAAkB,GAAM,UACxB,KAAY,EAAgB,WAC5B,IAAS,EAAgB;AAG7B,YAAI,CAAA,CAAC,GAAiB,IAAW,IASjC;AAAA,aAAM,QAAQ,EACZ,WAAW,GAAiB,IAAW,GAAgB,IAAS,GAAM,QAAQ,aAAa,UAC3F,QAAQ,GAAc,MAOxB,GAAM,QAAQ,OACd,GAAM,YAAY,GAAM,QAAQ,WAKhC,GAAM,iBAAiB,QAAQ,SAAU,IAAU;AACjD,mBAAO,GAAM,cAAc,GAAS,QAAQ,OAAO,OAAO,IAAI,GAAS;;AAIzE,mBAFI,IAAkB,GAEb,IAAQ,GAAG,IAAQ,GAAM,iBAAiB,QAAQ,KAAS;AAUlE,gBAAI,GAAM,UAAU,MAAM;AACxB,iBAAM,QAAQ,OACd,IAAQ;AACR;;AAGF,gBAAI,KAAwB,GAAM,iBAAiB,IAC/C,IAAK,GAAsB,IAC3B,IAAyB,GAAsB,SAC/C,IAAW,MAA2B,SAAS,KAAK,GACpD,IAAO,GAAsB;AAE7B,mBAAO,KAAO,cAChB,MAAQ,EAAG,EACT,OAAO,IACP,SAAS,GACT,MAAM,GACN,UAAU,SACN;;;;OAnEC,gBAyEb,QAAQ,GAAS,WAAY;AAC3B,aAAO,IAAI,QAAQ,SAAU,GAAS;AACpC,WAAS,eACT,EAAQ;;QAGZ,SAAS,GAAA,WAAmB;AAC1B,WACA,KAAc;OAFP;AAMX,QAAI,CAAC,GAAiB,GAAW;AAK/B,aAAO;AAGT,OAAS,WAAW,GAAS,KAAK,SAAU,GAAO;AAC7C,OAAC,MAAe,EAAQ,iBAC1B,EAAQ,cAAc;;AAQ1B,kBAA8B;AAC5B,SAAM,iBAAiB,QAAQ,SAAU,GAAO;AAC9C,YAAI,IAAO,EAAM,MACb,KAAgB,EAAM,SACtB,IAAU,OAAkB,SAAS,KAAK,IAC1C,IAAS,EAAM;AAEnB,YAAI,OAAO,KAAW,YAAY;AAChC,cAAI,IAAY,EAAO,EACrB,OAAO,IACP,MAAM,GACN,UAAU,IACV,SAAS,MAGP,KAAS,GAAA,WAAkB;aAAlB;AAEb,aAAiB,KAAK,KAAa;;;;AAjBzC;AAAS,OAAA,IAAA;AAsBT,iBAAkC;AAChC,SAAiB,QAAQ,SAAU,GAAI;AACrC,eAAO;UAET,KAAmB;;AAJrB;AAAS,WAAA,GAAA,GAAA,2BAOF;KAnNF;;AAVF;AAAS,GAAA,IAAA;ACtBhB,IAAI,KAAmB,CAAC,IAAgB,IAAe,IAAe,IAAa,IAAQ,IAAM,IAAiB,IAAO;AAAzH,IACI,KAA4B,GAAgB,EAC9C,kBAAkB;AAAA,ICZP,KACX;ADWkB,ICTP,KAAS;ADSF,ICRP,KAAa;ADQN,ICPP,KAAc;ADOP,ICNP,KAAW;ADMJ,ICLP,KAAe;ADKR,ICHP,KAAgB,EAAC,SAAS,MAAM,SAAS;ADGlC,ICDP,KAA0B,GAAA,WAAA;AAAA,SAAM,SAAS;GAAf;ACFhC,YACL,GACA,GACA,GACG;AACH,MAAI,MAAM,QAAQ,IAAQ;AACxB,QAAM,IAAI,EAAM;AAChB,WAAO,KAAK,OACR,MAAM,QAAQ,KACZ,EAAa,KACb,IACF;;AAGN,SAAO;;AAdF;AAAS,GAAA,IAAA;AAiBT,YAAgB,GAAY,GAAuB;AACxD,MAAM,IAAM,GAAG,SAAS,KAAK;AAC7B,SAAO,EAAI,QAAQ,eAAe,KAAK,EAAI,QAAW,IAAf,OAA0B;;AAF5D;AAAS,GAAA,IAAA;AAKT,YAAgC,GAAY,GAAkB;AACnE,SAAO,OAAO,KAAU,aAAa,EAAK,MAAL,QAAS,KAAQ;;AADjD;AAAS,GAAA,IAAA;AAIT,YACL,GACA,GACkB;AAElB,MAAI,MAAO;AACT,WAAO;AAGT,MAAI;AAEJ,SAAO,SAAC,GAAc;AACpB,iBAAa,IACb,IAAU,WAAW,WAAM;AACzB,QAAG;OACF;;;AAfA;AAAS,GAAA,IAAA;AAmBT,YAA6B,GAAQ,GAA4B;AACtE,MAAM,IAAK,OAAA,OAAA,IAAO;AAClB,SAAA,EAAK,QAAQ,SAAC,GAAQ;AACpB,WAAQ,EAAc;MAEjB;;AALF;AAAS,GAAA,IAAA;AAQT,YAAuB,GAAyB;AACrD,SAAO,EAAM,MAAM,OAAO,OAAO;;AAD5B;AAAS,GAAA,IAAA;AAIT,YAA6B,GAAqB;AACvD,SAAQ,GAAW,OAAO;;AADrB;AAAS,GAAA,IAAA;AAIT,YAAyB,GAAU,GAAgB;AACpD,IAAI,QAAQ,OAAW,MACzB,EAAI,KAAK;;AAFN;AAAS,GAAA,IAAA;AAUT,YAAmB,GAAe;AACvC,SAAO,EAAI,OAAO,SAAC,GAAM,GAAP;AAAA,WAAiB,EAAI,QAAQ,OAAU;;;AADpD;AAAS,GAAA,IAAA;AAQT,YAA0B,GAAqC;AACpE,SAAO,EAAU,MAAM,KAAK;;AADvB;AAAS,GAAA,IAAA;AAIT,YAAmB,GAA8B;AACtD,SAAO,GAAG,MAAM,KAAK;;AADhB;AAAS,GAAA,IAAA;AAIT,YACL,GACkC;AAClC,SAAO,OAAO,KAAK,GAAK,OAAO,SAAC,GAAK,GAAQ;AAC3C,WAAI,EAAI,OAAS,UACd,GAAY,KAAO,EAAI,KAGnB;KACN;;AATE;AAAS,GAAA,IAAA;AC5FT,cAA+B;AACpC,SAAO,SAAS,cAAc;;AADzB;AAAS,GAAA,IAAA;AAIT,YAAmB,GAAqD;AAC7E,SAAO,CAAC,WAAW,YAAY,KAAK,SAAC,GAAD;AAAA,WAAU,GAAO,GAAO;;;AADvD;AAAS,GAAA,IAAA;AAIT,YAAoB,GAAmC;AAC5D,SAAO,GAAO,GAAO;;AADhB;AAAS,GAAA,IAAA;AAIT,YAAsB,GAAqC;AAChE,SAAO,GAAO,GAAO;;AADhB;AAAS,GAAA,IAAA;AAIT,YAA4B,GAAuC;AACxE,SAAO,CAAC,CAAE,MAAS,EAAM,UAAU,EAAM,OAAO,cAAc;;AADzD;AAAS,GAAA,IAAA;AAIT,YAA4B,GAA2B;AAC5D,SAAI,GAAU,KACL,CAAC,KAGN,GAAW,KACN,GAAU,KAGf,MAAM,QAAQ,KACT,IAGF,GAAU,SAAS,iBAAiB;;AAbtC;AAAS,GAAA,IAAA;AAgBT,YACL,GACA,GACM;AACN,IAAI,QAAQ,SAAC,GAAO;AACd,SACF,GAAG,MAAM,qBAAwB,IAAjC;;;AANC;AAAS,GAAA,IAAA;AAWT,YACL,GACA,GACM;AACN,IAAI,QAAQ,SAAC,GAAO;AACd,SACF,EAAG,aAAa,cAAc;;;AAN7B;AAAS,GAAA,IAAA;AAWT,YACL,GACU;AAAA,MAAA,GACV,IAAkB,GAAiB,IAA5B,IAAP,EAAA;AAGA,SAAO,KAAO,QAAP,KAAA,EAAS,kBAAT,QAAA,EAAwB,OAAO,EAAQ,gBAAgB;;AANzD;AAAS,GAAA,IAAA;AAST,YACL,GACA,GACS;AACT,MAAO,IAAoB,EAApB,SAAS,IAAW,EAAX;AAEhB,SAAO,EAAe,MAAM,SAAA,GAAsC;AAAA,QAApC,KAAoC,EAApC,YAAY,KAAwB,EAAxB,aAAa,IAAW,EAAX,OAC9C,IAAqB,EAArB,mBACD,IAAgB,GAAiB,GAAY,YAC7C,KAAa,GAAY,cAAc;AAE7C,QAAI,CAAC;AACH,aAAO;AAGT,QAAM,KAAc,MAAkB,WAAW,GAAW,IAAK,IAAI,GAC/D,KAAiB,MAAkB,QAAQ,GAAW,OAAQ,IAAI,GAClE,KAAe,MAAkB,UAAU,GAAW,KAAM,IAAI,GAChE,KAAgB,MAAkB,SAAS,GAAW,MAAO,IAAI,GAEjE,IACJ,GAAW,MAAM,IAAU,KAAc,GACrC,IACJ,IAAU,GAAW,SAAS,KAAiB,GAC3C,IACJ,GAAW,OAAO,IAAU,KAAe,GACvC,KACJ,IAAU,GAAW,QAAQ,KAAgB;AAE/C,WAAO,KAAc,KAAiB,KAAe;;;AA7BlD;AAAS,GAAA,IAAA;AAiCT,YACL,GACA,GACA,GACM;AACN,MAAM,IAAY,IAAN;AAMZ,GAAC,iBAAiB,uBAAuB,QAAQ,SAAC,GAAU;AAC1D,MAAI,GAAQ,GAAO;;;AAZhB;AAAS,GAAA,IAAA;AAoBT,YAAwB,GAAiB,GAAyB;AAEvE,WADI,IAAS,GACN,KAAQ;AAAA,QAAA;AACb,QAAI,EAAO,SAAS;AAClB,aAAO;AAET,QAAU,EAAO,eAAX,QAAA,KAAI,EAAO,kBAAX,OAAA,SAAG,EAAiC;;AAE5C,SAAO;;AARF;AAAS,GAAA,IAAA;ACzHT,IAAM,KAAe,EAAC,SAAS;AAA/B,IACH,KAAoB;AAQjB,cAAsC;AACvC,KAAa,WAIjB,IAAa,UAAU,MAEnB,OAAO,eACT,SAAS,iBAAiB,aAAa;;AARpC;AAAS,GAAA,IAAA;AAiBT,cAAqC;AAC1C,MAAM,IAAM,YAAY;AAEpB,MAAM,KAAoB,MAC5B,IAAa,UAAU,OAEvB,SAAS,oBAAoB,aAAa,MAG5C,KAAoB;;AATf;AAAS,GAAA,IAAA;AAkBT,cAA8B;AACnC,MAAM,IAAgB,SAAS;AAE/B,MAAI,GAAmB,IAAgB;AACrC,QAAM,IAAW,EAAc;AAE3B,MAAc,QAAQ,CAAC,EAAS,MAAM,aACxC,EAAc;;;AAPb;AAAS,GAAA,IAAA;AAYD,cAA0C;AACvD,WAAS,iBAAiB,cAAc,IAAsB,KAC9D,OAAO,iBAAiB,QAAQ;;AAFnB;AAAS,GAAA,IAAA;AC3DjB,IAAM,KACX,OAAO,UAAW,eAAe,OAAO,YAAa;AADhD,IAGM,KAAS,KAElB,CAAC,CAAC,OAAO,WACT;AEGJ,IAAM,KAAc,EAClB,aAAa,OACb,cAAc,OACd,mBAAmB,OACnB,QAAQ;AAJV,IAOM,KAAc,EAClB,WAAW,OACX,WAAW,QACX,OAAO,MACP,SAAS,IACT,SAAS,OACT,UAAU,KACV,MAAM,WACN,OAAO,IACP,QAAQ;AAhBV,IAmBa,KAA0B,OAAA,OAAA,EACrC,UAAU,IACV,MAAM,EACJ,SAAS,QACT,UAAU,UAEZ,OAAO,GACP,UAAU,CAAC,KAAK,MAChB,wBAAwB,MACxB,aAAa,MACb,kBAAkB,OAClB,aAAa,OACb,mBAAmB,GACnB,qBAAqB,GACrB,gBAAgB,IAChB,QAAQ,CAAC,GAAG,KACZ,eAhBqC,GAAA,WAgBrB;GAhBqB,kBAiBrC,gBAjBqC,GAAA,WAiBpB;GAjBoB,mBAkBrC,UAlBqC,GAAA,WAkB1B;GAlB0B,aAmBrC,WAnBqC,GAAA,WAmBzB;GAnByB,cAoBrC,UApBqC,GAAA,WAoB1B;GApB0B,aAqBrC,QArBqC,GAAA,WAqB5B;GArB4B,WAsBrC,SAtBqC,GAAA,WAsB3B;GAtB2B,YAuBrC,QAvBqC,GAAA,WAuB5B;GAvB4B,WAwBrC,SAxBqC,GAAA,WAwB3B;GAxB2B,YAyBrC,WAzBqC,GAAA,WAyBzB;GAzByB,cA0BrC,aA1BqC,GAAA,WA0BvB;GA1BuB,gBA2BrC,gBA3BqC,GAAA,WA2BpB;GA3BoB,mBA4BrC,WAAW,OACX,SAAS,IACT,eAAe,IACf,QAAQ,MACR,cAAc,OACd,OAAO,MACP,SAAS,oBACT,eAAe,QACZ,IACA;AAxDL,IA2DM,KAAc,OAAO,KAAK;AA3DhC,IA6Da,KAA4C,GAAA,SAAC,GAAiB;AAMzE,MAAM,IAAO,OAAO,KAAK;AACzB,IAAK,QAAQ,SAAC,GAAQ;AACnB,OAAqB,KAAO,EAAa;;GARW;AAYlD,YACL,GACgB;AAChB,MAAM,IAAU,EAAY,WAAW,IACjC,IAAc,EAAQ,OAAgC,SAAC,GAAK,GAAW;AAC3E,QAAO,KAAsB,EAAtB,MAAM,KAAgB,EAAhB;AAEb,QAAI,IAAM;AAAA,UAAA;AACR,QAAI,MACF,EAAY,QAAU,SAClB,EAAY,MADhB,KAEK,GAAqB,QAF1B,OAAA,IAEmC;;AAGvC,WAAO;KACN;AAEH,SAAA,OAAA,OAAA,IACK,GACA;;AAnBA;AAAS,GAAA,IAAA;AAuBT,YACL,GACA,GACyB;AACzB,MAAM,IAAW,IACb,OAAO,KAAK,GAAsB,OAAA,OAAA,IAAK,IAAL,EAAmB,SAAA,SACrD,IAEE,IAAQ,EAAS,OACrB,SAAC,GAA+C,IAAQ;AACtD,QAAM,KACJ,GAAU,aAAV,gBAAqC,OAAU,IAC/C;AAEF,QAAI,CAAC;AACH,aAAO;AAGT,QAAI,OAAQ;AACV,QAAI,MAAO;;AAEX,UAAI;AACF,UAAI,MAAO,KAAK,MAAM;eACf,GADe;AAEtB,UAAI,MAAO;;AAIf,WAAO;KAET;AAGF,SAAO;;AAjCF;AAAS,GAAA,IAAA;AAoCT,YACL,GACA,GACO;AACP,MAAM,IAAG,OAAA,OAAA,IACJ,GADI,EAEP,SAAS,GAAuB,EAAM,SAAS,CAAC,OAC5C,EAAM,mBACN,KACA,GAAsB,GAAW,EAAM;AAG7C,SAAA,EAAI,OAAJ,OAAA,OAAA,IACK,GAAa,MACb,EAAI,OAGT,EAAI,OAAO,EACT,UACE,EAAI,KAAK,aAAa,SAAS,EAAM,cAAc,EAAI,KAAK,UAC9D,SACE,EAAI,KAAK,YAAY,SACjB,EAAM,cACJ,OACA,gBACF,EAAI,KAAK,WAGV;;AA5BF;AAAS,GAAA,IAAA;AChIhB,IAAM,KAAY,GAAA,WAAA;AAAA,SAAmB;GAAnB;AAElB,YAAiC,GAAkB,GAAoB;AACrE,IAAQ,QAAe;;AADzB;AAAS,GAAA,IAAA;AAIT,YAA4B,GAAuC;AACjE,MAAM,IAAQ;AAEd,SAAI,MAAU,OACZ,EAAM,YAAY,KAElB,GAAM,YAAY,IAEd,GAAU,KACZ,EAAM,YAAY,KAElB,GAAwB,GAAO,KAI5B;;AAfT;AAAS,GAAA,IAAA;AAkBF,YAAoB,GAAyB,GAAoB;AAClE,KAAU,EAAM,WAClB,IAAwB,GAAS,KACjC,EAAQ,YAAY,EAAM,YACjB,OAAO,EAAM,WAAY,cAC9B,GAAM,YACR,GAAwB,GAAS,EAAM,WAEvC,EAAQ,cAAc,EAAM;;AAR3B;AAAS,GAAA,IAAA;AAaT,YAAqB,GAAuC;AACjE,MAAM,IAAM,EAAO,mBACb,IAAc,GAAU,EAAI;AAElC,SAAO,EACL,KAAA,GACA,SAAS,EAAY,KAAK,SAAC,GAAD;AAAA,WAAU,EAAK,UAAU,SAAS;MAC5D,OAAO,EAAY,KACjB,SAAC,GAAD;AAAA,WACE,EAAK,UAAU,SAAS,OACxB,EAAK,UAAU,SAAS;MAE5B,UAAU,EAAY,KAAK,SAAC,GAAD;AAAA,WACzB,EAAK,UAAU,SAAS;;;AAbvB;AAAS,GAAA,IAAA;AAkBT,YACL,GAIA;AACA,MAAM,IAAS,MAET,IAAM;AACZ,IAAI,YAAY,IAChB,EAAI,aAAa,cAAc,WAC/B,EAAI,aAAa,YAAY;AAE7B,MAAM,IAAU;AAChB,IAAQ,YAAY,IACpB,EAAQ,aAAa,cAAc,WAEnC,GAAW,GAAS,EAAS,QAE7B,EAAO,YAAY,IACnB,EAAI,YAAY,IAEhB,EAAS,EAAS,OAAO,EAAS;AAElC,aAAkB,IAAkB,IAAwB;AAC1D,QAAA,IAA8B,GAAY,IAAnC,IAAP,EAAO,KAAK,IAAZ,EAAY,SAAS,KAArB,EAAqB;AAEjB,OAAU,QACZ,EAAI,aAAa,cAAc,GAAU,SAEzC,EAAI,gBAAgB,eAGlB,OAAO,GAAU,aAAc,WACjC,EAAI,aAAa,kBAAkB,GAAU,aAE7C,EAAI,gBAAgB,mBAGlB,GAAU,UACZ,EAAI,aAAa,gBAAgB,MAEjC,EAAI,gBAAgB,iBAGtB,EAAI,MAAM,WACR,OAAO,GAAU,YAAa,WACvB,GAAU,WADjB,OAEI,GAAU,UAEZ,GAAU,OACZ,EAAI,aAAa,QAAQ,GAAU,QAEnC,EAAI,gBAAgB,SAIpB,IAAU,YAAY,GAAU,WAChC,GAAU,cAAc,GAAU,cAElC,GAAW,GAAS,EAAS,QAG3B,GAAU,QACP,KAEM,GAAU,UAAU,GAAU,SACvC,GAAI,YAAY,KAChB,EAAI,YAAY,GAAmB,GAAU,WAH7C,EAAI,YAAY,GAAmB,GAAU,UAKtC,MACT,EAAI,YAAY;;AA/CpB;AAAS,SAAA,GAAA,GAAA,aAmDF,EACL,QAAA,GACA,UAAA;;AA7EG;AAAS,GAAA,IAAA;AAmFhB,GAAO,UAAU;ACjHjB,IAAI,KAAY;AAAhB,IACI,KAAsD;AAD1D,IAIW,KAA+B;AAE3B,YACb,GACA,GACU;AACV,MAAM,IAAQ,GAAc,GAAD,OAAA,OAAA,IACtB,IACA,GAAuB,GAAqB,OAM7C,GACA,GACA,IACA,KAAqB,OACrB,IAAgC,OAChC,IAAe,OACf,IAAsB,OACtB,IACA,IACA,IACA,KAA8B,IAC9B,KAAuB,GAAS,IAAa,EAAM,sBACnD,GAKE,IAAK,MACL,IAAiB,MACjB,KAAU,GAAO,EAAM,UAEvB,IAAQ,EAEZ,WAAW,MAEX,WAAW,OAEX,aAAa,OAEb,WAAW,OAEX,SAAS,SAGL,IAAqB,EAEzB,IAAA,GACA,WAAA,GACA,QAAQ,MACR,gBAAA,GACA,OAAA,GACA,OAAA,GACA,SAAA,IAEA,oBAAA,IACA,UAAA,IACA,YAAA,IACA,MAAA,IACA,MAAA,IACA,uBAAA,IACA,QAAA,IACA,SAAA,IACA,SAAA,IACA,SAAA;AAMF,MAAI,CAAC,EAAM;AAKT,WAAO;AAMT,MAAA,IAA2B,EAAM,OAAO,IAAjC,KAAP,EAAO,QAAQ,IAAf,EAAe;AAEf,KAAO,aAAa,mBAAkC,KACtD,GAAO,KAAP,WAAoC,EAAS,IAE7C,EAAS,SAAS,IAClB,EAAU,SAAS,GACnB,GAAO,SAAS;AAEhB,MAAM,IAAe,GAAQ,IAAI,SAAC,IAAD;AAAA,WAAY,GAAO,GAAG;MACjD,IAAkB,EAAU,aAAa;AAE/C,SAAA,MACA,MACA,MAEA,GAAW,YAAY,CAAC,KAEpB,EAAM,gBACR,MAKF,GAAO,iBAAiB,cAAc,WAAM;AACtC,MAAS,MAAM,eAAe,EAAS,MAAM,aAC/C,EAAS;MAIb,GAAO,iBAAiB,cAAc,WAAM;AAExC,MAAS,MAAM,eACf,EAAS,MAAM,QAAQ,QAAQ,iBAAiB,KAEhD,KAAc,iBAAiB,aAAa;MAIzC;AAKP,eAAkE;AAChE,QAAO,KAAS,EAAS,MAAlB;AACP,WAAO,MAAM,QAAQ,MAAS,KAAQ,CAAC,IAAO;;AAFhD;AAAS,KAAA,GAAA;AAKT,gBAA6C;AAC3C,WAAO,IAA6B,OAAO;;AAD7C;AAAS,KAAA,IAAA;AAIT,gBAAyC;AAAA,QAAA;AAEvC,WAAO,CAAC,CAAA,OAAC,EAAS,MAAM,WAAhB,QAAC,GAAuB;;AAFlC;AAAS,KAAA,IAAA;AAKT,eAAqC;AACnC,WAAO,KAAiB;;AAD1B;AAAS,KAAA,GAAA;AAIT,gBAAiC;AAC/B,QAAM,KAAS,IAAmB;AAClC,WAAO,KAAS,GAAiB,MAAU;;AAF7C;AAAS,KAAA,IAAA;AAKT,gBAAsD;AACpD,WAAO,GAAY;;AADrB;AAAS,KAAA,IAAA;AAIT,cAAkB,IAAyB;AAIzC,WACG,EAAS,MAAM,aAAa,CAAC,EAAS,MAAM,aAC7C,GAAa,WACZ,MAAoB,GAAiB,SAAS,UAExC,IAGF,GACL,EAAS,MAAM,OACf,KAAS,IAAI,GACb,GAAa;;AAfjB;AAAS,KAAA,IAAA;AAmBT,cAAsB,IAAwB;AAAxB,WAAwB,UAAxB,MAAW,QAC/B,GAAO,MAAM,gBACX,EAAS,MAAM,eAAe,CAAC,KAAW,KAAK,QACjD,GAAO,MAAM,SAAb,KAAyB,EAAS,MAAM;;AAH1C;AAAS,KAAA,IAAA;AAMT,cACE,IACA,GACA,IACM;AAON,QARA,OACM,UADN,MAAwB,OAExB,EAAa,QAAQ,SAAC,IAAgB;AAChC,SAAY,OACd,GAAY,IAAZ,MAAA,IAAsB;QAItB,IAAuB;AAAA,UAAA;AACzB,MAAA,MAAA,EAAS,OAAM,IAAf,MAAA,IAAwB;;;AAZ5B;AAAS,KAAA,IAAA;AAgBT,gBAA4C;AAC1C,QAAO,KAAQ,EAAS,MAAjB;AAEP,QAAI,CAAA,CAAC,GAAK,SAIV;AAAA,UAAM,IAAI,UAAW,GAAK,SACpB,KAAK,GAAO,IACZ,KAAQ,GAAiB,EAAS,MAAM,iBAAiB;AAE/D,SAAM,QAAQ,SAAC,IAAS;AACtB,YAAM,KAAe,GAAK,aAAa;AAEvC,YAAI,EAAS,MAAM;AACjB,aAAK,aAAa,GAAM,KAAkB,KAAN,MAAsB,KAAO;aAC5D;AACL,cAAM,KAAY,MAAgB,GAAa,QAAQ,IAAI,IAAI;AAE3D,eACF,GAAK,aAAa,GAAM,MAExB,GAAK,gBAAgB;;;;;AAtB7B;AAAS,KAAA,IAAA;AA4BT,gBAA6C;AAC3C,QAAI,CAAA,MAAmB,CAAC,EAAS,MAAM,KAAK,WAI5C;AAAA,UAAM,KAAQ,GAAiB,EAAS,MAAM,iBAAiB;AAE/D,SAAM,QAAQ,SAAC,GAAS;AAClB,UAAS,MAAM,cACjB,EAAK,aACH,iBACA,EAAS,MAAM,aAAa,MAAS,MACjC,SACA,WAGN,EAAK,gBAAgB;;;;AAhB3B;AAAS,KAAA,IAAA;AAqBT,gBAAkD;AAChD,SAAc,oBAAoB,aAAa,KAC/C,KAAqB,GAAmB,OACtC,SAAC,IAAD;AAAA,aAAc,OAAa;;;AAH/B;AAAS,KAAA,IAAA;AAOT,cAAyB,IAAsC;AAE7D,QAAI,CAAA,IAAa,WACX,MAAgB,GAAM,SAAS,eAKrC;AAAA,UAAM,IACH,GAAM,gBAAgB,GAAM,eAAe,MAAO,GAAM;AAG3D,UACE,CAAA,GAAS,MAAM,eACf,GAAe,IAAQ,KAMzB;AAAA,YACE,GAAiB,EAAS,MAAM,iBAAiB,GAAW,KAAK,SAAC,IAAD;AAAA,iBAC/D,GAAe,IAAI;YAAA;AAOrB,cAJI,GAAa,WAKf,EAAS,MAAM,aACf,EAAS,MAAM,QAAQ,QAAQ,YAAY;AAE3C;;AAGF,aAAW,kBAAkB,CAAC,GAAU;AAGtC,UAAS,MAAM,gBAAgB,QACjC,GAAS,sBACT,EAAS,QAKT,IAAgC,MAChC,WAAW,WAAM;AACf,cAAgC;YAM7B,EAAS,MAAM,aAClB;;;;AAvDN;AAAS,KAAA,IAAA;AA4DT,gBAA6B;AAC3B,QAAe;;AADjB;AAAS,KAAA,IAAA;AAIT,eAA8B;AAC5B,QAAe;;AADjB;AAAS,KAAA,GAAA;AAIT,gBAAkC;AAChC,QAAM,KAAM;AACZ,OAAI,iBAAiB,aAAa,IAAiB,OACnD,GAAI,iBAAiB,YAAY,IAAiB,KAClD,GAAI,iBAAiB,cAAc,GAAc,KACjD,GAAI,iBAAiB,aAAa,IAAa;;AALjD;AAAS,KAAA,IAAA;AAQT,gBAAqC;AACnC,QAAM,KAAM;AACZ,OAAI,oBAAoB,aAAa,IAAiB,OACtD,GAAI,oBAAoB,YAAY,IAAiB,KACrD,GAAI,oBAAoB,cAAc,GAAc,KACpD,GAAI,oBAAoB,aAAa,IAAa;;AALpD;AAAS,KAAA,IAAA;AAQT,cAA2B,IAAkB,GAA4B;AACvE,OAAgB,IAAU,WAAM;AAE5B,OAAC,EAAS,MAAM,aAChB,GAAO,cACP,GAAO,WAAW,SAAS,OAE3B;;;AAPN;AAAS,KAAA,IAAA;AAYT,cAA0B,IAAkB,GAA4B;AACtE,OAAgB,IAAU;;AAD5B;AAAS,KAAA,IAAA;AAIT,cAAyB,IAAkB,GAA4B;AACrE,QAAM,KAAM,KAA6B;AAEzC,gBAAkB,IAA8B;AAC1C,SAAM,WAAW,MACnB,IAA4B,IAAK,UAAU,KAC3C;;AAHJ;AASA,QATS,GAAA,IAAA,aASL,OAAa;AACf,aAAO;AAGT,OAA4B,IAAK,UAAU,KAC3C,GAA4B,IAAK,OAAO,KAExC,KAA+B;;AAnBjC;AAAS,KAAA,IAAA;AAsBT,cACE,IACA,GACA,IACM;AADN,WACM,UADN,MAA6C;AAE7C,QAAM,KAAQ,GAAiB,EAAS,MAAM,iBAAiB;AAC/D,OAAM,QAAQ,SAAC,IAAS;AACtB,SAAK,iBAAiB,IAAW,GAAS,KAC1C,GAAU,KAAK,EAAC,MAAA,IAAM,WAAA,IAAW,SAAA,GAAS,SAAA;;;AAR9C;AAAS,KAAA,IAAA;AAYT,gBAA8B;AACxB,YACF,IAAG,cAAc,IAAW,EAAC,SAAS,SACtC,GAAG,YAAY,IAA+B,EAAC,SAAS,UAG1D,GAAc,EAAS,MAAM,SAAS,QAAQ,SAAC,IAAc;AAC3D,UAAI,OAAc;AAMlB,gBAFA,GAAG,IAAW,KAEN;eACD;AACH,eAAG,cAAc;AACjB;eACG;AACH,eAAG,KAAS,aAAa,QAAQ;AACjC;eACG;AACH,eAAG,YAAY;AACf;;;;AAtBR;AAAS,KAAA,IAAA;AA2BT,gBAAiC;AAC/B,OAAU,QAAQ,SAAA,IAAyD;AAAA,UAAvD,IAAuD,GAAvD,MAAM,KAAiD,GAAjD,WAAW,KAAsC,GAAtC,SAAS,KAA6B,GAA7B;AAC5C,QAAK,oBAAoB,IAAW,IAAS;QAE/C,KAAY;;AAJd;AAAS,KAAA,IAAA;AAOT,cAAmB,IAAoB;AAAA,QAAA,GACjC,KAA0B;AAE9B,QACE,CAAA,EAAC,EAAS,MAAM,aAChB,GAAuB,OACvB,IAKF;AAAA,UAAM,KAAa,MAAA,OAAgB,OAAhB,SAAA,EAAkB,UAAS;AAE9C,WAAmB,IACnB,IAAgB,GAAM,eAEtB,MAEI,CAAC,EAAS,MAAM,aAAa,GAAa,OAK5C,GAAmB,QAAQ,SAAC,IAAD;AAAA,eAAc,GAAS;UAKlD,GAAM,SAAS,WACd,GAAS,MAAM,QAAQ,QAAQ,gBAAgB,KAC9C,OACF,EAAS,MAAM,gBAAgB,SAC/B,EAAS,MAAM,YAEf,KAA0B,OAE1B,GAAa,KAGX,GAAM,SAAS,WACjB,MAAqB,CAAC,KAGpB,MAA2B,CAAC,MAC9B,GAAa;;;AA5CjB;AAAS,KAAA,IAAA;AAgDT,cAAqB,IAAyB;AAC5C,QAAM,IAAS,GAAM,QACf,KACJ,IAAmB,SAAS,MAAW,GAAO,SAAS;AAEzD,QAAI,CAAA,IAAM,SAAS,eAAe,KAIlC;AAAA,UAAM,KAAiB,KACpB,OAAO,IACP,IAAI,SAAC,IAAW;AAAA,YAAA,IACT,KAAW,GAAO,QAClB,KAAK,MAAG,GAAS,mBAAZ,OAAA,SAAG,GAAyB;AAEvC,eAAI,KACK,EACL,YAAY,GAAO,yBACnB,aAAa,IACb,OAAA,MAIG;SAER,OAAO;AAEN,SAAiC,IAAgB,OACnD,OACA,GAAa;;;AA7BjB;AAAS,KAAA,IAAA;AAiCT,cAAsB,IAAyB;AAC7C,QAAM,IACJ,GAAuB,OACtB,EAAS,MAAM,QAAQ,QAAQ,YAAY,KAAK;AAEnD,QAAI,CAAA,GAIJ;AAAA,UAAI,EAAS,MAAM,aAAa;AAC9B,UAAS,sBAAsB;AAC/B;;AAGF,SAAa;;;AAdf;AAAS,KAAA,IAAA;AAiBT,cAA0B,IAAyB;AAE/C,MAAS,MAAM,QAAQ,QAAQ,aAAa,KAC5C,GAAM,WAAW,OAOjB,EAAS,MAAM,eACf,GAAM,iBACN,GAAO,SAAS,GAAM,kBAKxB,GAAa;;AAjBf;AAAS,KAAA,IAAA;AAoBT,cAAgC,IAAuB;AACrD,WAAO,GAAa,UAChB,SAA+B,GAAM,KAAK,QAAQ,YAAY,IAC9D;;AAHN;AAAS,KAAA,IAAA;AAMT,gBAAsC;AACpC;AAEA,QAAA,KAMI,EAAS,OALX,IADF,GACE,eACA,KAFF,GAEE,WACA,KAHF,GAGE,QACA,KAJF,GAIE,wBACA,KALF,GAKE,gBAGI,KAAQ,OAAyB,GAAY,IAAQ,QAAQ,MAE7D,KAAoB,KACtB,EACE,uBAAuB,IACvB,gBACE,GAAuB,kBAAkB,QAE7C,GAEE,KAA8D,EAClE,MAAM,WACN,SAAS,MACT,OAAO,eACP,UAAU,CAAC,kBACX,IALkE,GAAA,SAAA,IAKtD;AAAA,UAAR,KAAQ,GAAR;AACF,UAAI,MAAwB;AAC1B,YAAA,KAAc,MAAP,KAAP,GAAO;AAEP,SAAC,aAAa,oBAAoB,WAAW,QAAQ,SAAC,IAAS;AACzD,iBAAS,cACX,GAAI,aAAa,kBAAkB,GAAM,aAErC,GAAM,WAAW,OAAjB,iBAAuC,MACzC,GAAI,aAAJ,UAAyB,IAAQ,MAEjC,GAAI,gBAAJ,UAA4B;YAKlC,GAAM,WAAW,SAAS;;OArBoC,SA6B9D,KAAsC,CAC1C,EACE,MAAM,UACN,SAAS,EACP,QAAA,QAGJ,EACE,MAAM,mBACN,SAAS,EACP,SAAS,EACP,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,SAIb,EACE,MAAM,QACN,SAAS,EACP,SAAS,OAGb,EACE,MAAM,iBACN,SAAS,EACP,UAAU,CAAC,QAGf;AAGE,YAA0B,MAC5B,GAAU,KAAK,EACb,MAAM,SACN,SAAS,EACP,SAAS,IACT,SAAS,QAKf,GAAU,KAAV,MAAA,IAAmB,MAAa,OAAb,SAAA,EAAe,cAAa,KAE/C,EAAS,iBAAiB,GACxB,IACA,IAFoC,OAAA,OAAA,IAI/B,GAJ+B,EAKlC,WAAA,IACA,eAAA,IACA,WAAA;;AAtGN;AAAS,KAAA,IAAA;AA2GT,gBAAuC;AACjC,MAAS,kBACX,GAAS,eAAe,WACxB,EAAS,iBAAiB;;AAH9B;AAAS,KAAA,IAAA;AAOT,gBAAuB;AACrB,QAAO,KAAY,EAAS,MAArB,UAEH,GAOE,KAAO;AAGV,MAAS,MAAM,eAAe,OAAa,MAC5C,OAAa,WAEb,IAAa,GAAK,aAElB,IAAa,GAAuB,IAAU,CAAC,MAK5C,EAAW,SAAS,OACvB,EAAW,YAAY,KAGzB,EAAS,MAAM,YAAY,MAE3B;;AA7BF;AAAS,KAAA,IAAA;AAwDT,gBAAgD;AAC9C,WAAO,GACL,GAAO,iBAAiB;;AAF5B;AAAS,KAAA,IAAA;AAMT,cAAsB,IAAqB;AACzC,MAAS,sBAEL,MACF,GAAW,aAAa,CAAC,GAAU,MAGrC;AAEA,QAAI,IAAQ,GAAS,OACrB,KAAiC,KAA1B,KAAP,GAAA,IAAmB,KAAnB,GAAA;AAEI,OAAa,WAAW,OAAe,UAAU,MACnD,KAAQ,KAGN,IACF,IAAc,WAAW,WAAM;AAC7B,QAAS;OACR,KAEH,EAAS;;AArBb;AAAS,KAAA,IAAA;AAyBT,cAAsB,IAAoB;AAKxC,QAJA,EAAS,sBAET,GAAW,eAAe,CAAC,GAAU,MAEjC,CAAC,EAAS,MAAM,WAAW;AAC7B;AAEA;;AAOF,QACE,CAAA,GAAS,MAAM,QAAQ,QAAQ,iBAAiB,KAChD,EAAS,MAAM,QAAQ,QAAQ,YAAY,KAC3C,CAAC,cAAc,aAAa,QAAQ,GAAM,SAAS,KACnD,KAKF;AAAA,UAAM,IAAQ,GAAS;AAEnB,UACF,IAAc,WAAW,WAAM;AACzB,UAAS,MAAM,aACjB,EAAS;SAEV,KAIH,KAA6B,sBAAsB,WAAM;AACvD,UAAS;;;;AApCf;AAAS,KAAA,IAAA;AA4CT,gBAAwB;AACtB,MAAS,MAAM,YAAY;;AAD7B;AAAS,KAAA,IAAA;AAIT,gBAAyB;AAGvB,MAAS,QACT,EAAS,MAAM,YAAY;;AAJ7B;AAAS,KAAA,IAAA;AAOT,gBAAoC;AAClC,iBAAa,IACb,aAAa,IACb,qBAAqB;;AAHvB;AAAS,KAAA,IAAA;AAMT,cAAkB,IAAoC;AAMpD,QAAI,CAAA,EAAS,MAAM,aAInB;AAAA,SAAW,kBAAkB,CAAC,GAAU,MAExC;AAEA,UAAM,IAAY,EAAS,OACrB,KAAY,GAAc,GAAD,OAAA,OAAA,IAC1B,GACA,GAAqB,KAFK,EAG7B,kBAAkB;AAGpB,QAAS,QAAQ,IAEjB,MAEI,EAAU,wBAAwB,GAAU,uBAC9C,OACA,KAAuB,GACrB,IACA,GAAU,uBAKV,EAAU,iBAAiB,CAAC,GAAU,gBACxC,GAAiB,EAAU,eAAe,QAAQ,SAAC,IAAS;AAC1D,WAAK,gBAAgB;WAEd,GAAU,iBACnB,EAAU,gBAAgB,kBAG5B,MACA,MAEI,KACF,EAAS,GAAW,KAGlB,EAAS,kBACX,OAMA,KAAsB,QAAQ,SAAC,IAAiB;AAG9C,8BAAsB,GAAa,OAAQ,eAAgB;WAI/D,GAAW,iBAAiB,CAAC,GAAU;;;AA/DzC;AAAS,KAAA,IAAA;AAkET,cAAoB,IAAwB;AAC1C,MAAS,SAAS,EAAC,SAAA;;AADrB;AAAS,KAAA,IAAA;AAIT,gBAAsB;AAOpB,QAAM,KAAmB,EAAS,MAAM,WAClC,IAAc,EAAS,MAAM,aAC7B,KAAa,CAAC,EAAS,MAAM,WAC7B,KACJ,GAAa,WAAW,CAAC,EAAS,MAAM,OACpC,KAAW,GACf,EAAS,MAAM,UACf,GACA,GAAa;AAGf,QACE,CAAA,OACA,KACA,MACA,OAQE,CAAA,IAAmB,aAAa,eAIpC,IAAW,UAAU,CAAC,IAAW,QAC7B,EAAS,MAAM,OAAO,OAAc,QAmBxC;AAAA,UAfA,EAAS,MAAM,YAAY,MAEvB,QACF,IAAO,MAAM,aAAa,YAG5B,MACA,MAEK,EAAS,MAAM,aAClB,IAAO,MAAM,aAAa,SAKxB,MAAwB;AAC1B,YAAA,KAAuB,MAAhB,KAAP,GAAO,KAAK,KAAZ,GAAY;AACZ,WAAsB,CAAC,IAAK,KAAU;;AAGxC,WAAgB,GAAA,WAAY;AAAA,YAAA;AAC1B,YAAI,CAAA,EAAC,EAAS,MAAM,aAAa,IAWjC;AAAA,cAPA,IAAsB,MAGjB,GAAO,cAEZ,GAAO,MAAM,aAAa,EAAS,MAAM,gBAErC,QAA0B,EAAS,MAAM,WAAW;AACtD,gBAAA,KAAuB,MAAhB,KAAP,GAAO,KAAK,KAAZ,GAAY;AACZ,eAAsB,CAAC,IAAK,KAAU,KACtC,GAAmB,CAAC,IAAK,KAAU;;AAGrC,gBACA,MAEA,GAAa,IAAkB,IAI/B,MAAA,EAAS,mBAAT,QAAA,GAAyB,eAEzB,GAAW,WAAW,CAAC,KAEnB,EAAS,MAAM,aAAa,QAC9B,GAAiB,IAAU,WAAM;AAC/B,cAAS,MAAM,UAAU,MACzB,GAAW,WAAW,CAAC;;;SAhCb,kBAqChB;;;AAhGF;AAAS,KAAA,IAAA;AAmGT,gBAAsB;AAOpB,QAAM,KAAkB,CAAC,EAAS,MAAM,WAClC,IAAc,EAAS,MAAM,aAC7B,KAAa,CAAC,EAAS,MAAM,WAC7B,KAAW,GACf,EAAS,MAAM,UACf,GACA,GAAa;AAGf,QAAI,CAAA,OAAmB,KAAe,OAItC,IAAW,UAAU,CAAC,IAAW,QAC7B,EAAS,MAAM,OAAO,OAAc,QAiBxC;AAAA,UAbA,EAAS,MAAM,YAAY,OAC3B,EAAS,MAAM,UAAU,OACzB,IAAsB,OACtB,KAAqB,OAEjB,QACF,IAAO,MAAM,aAAa,WAG5B,MACA,MACA,GAAa,OAET,MAAwB;AAC1B,YAAA,KAAuB,MAAhB,KAAP,GAAO,KAAK,KAAZ,GAAY;AAER,UAAS,MAAM,aACjB,IAAsB,CAAC,IAAK,KAAU,KACtC,GAAmB,CAAC,IAAK,KAAU;;AAIvC,YACA,MAEI,EAAS,MAAM,YACb,QACF,GAAkB,IAAU,EAAS,WAGvC,EAAS;;;AAvDb;AAAS,KAAA,IAAA;AA2DT,cAA+B,IAAyB;AAStD,SAAc,iBAAiB,aAAa,KAC5C,GAAa,IAAoB,KACjC,GAAqB;;AAXvB;AAAS,KAAA,IAAA;AAcT,gBAAyB;AAMnB,MAAS,MAAM,aACjB,EAAS,QAGP,CAAA,CAAC,EAAS,MAAM,aAIpB,OAKA,KAAsB,QAAQ,SAAC,IAAiB;AAC9C,SAAa,OAAQ;QAGnB,GAAO,cACT,GAAO,WAAW,YAAY,KAGhC,KAAmB,GAAiB,OAAO,SAAC,IAAD;AAAA,aAAO,OAAM;QAExD,EAAS,MAAM,YAAY,OAC3B,GAAW,YAAY,CAAC;;AA9B1B;AAAS,KAAA,IAAA;AAiCT,gBAAyB;AAMnB,MAAS,MAAM,eAInB,GAAS,sBACT,EAAS,WAET,MAEA,OAAO,EAAU,QAEjB,EAAS,MAAM,cAAc,MAE7B,GAAW,aAAa,CAAC;;AAnB3B;AAAS,KAAA,IAAA;;AAvjCI;AAAS,GAAA,IAAA;ACnCxB,YACE,GACA,GACuB;AADvB,QACuB,UADvB,KAAgC;AAEhC,MAAM,IAAU,GAAa,QAAQ,OAAO,EAAc,WAAW;AAQrE;AAEA,MAAM,IAA2B,OAAA,OAAA,IAAO,GAAP,EAAsB,SAAA,MAEjD,IAAW,GAAmB;AAGpC,MAAA;AACE,QAAM,IACA;AAiBR,MAAM,IAAY,EAAS,OACzB,SAAC,GAAK,GAA0B;AAC9B,QAAM,KAAW,KAAa,GAAY,GAAW;AAErD,WAAI,MACF,EAAI,KAAK,KAGJ;KAET;AAGF,SAAO,GAAU,KAAW,EAAU,KAAK;;AAnD7C;AAAS,GAAA,IAAA;AAsDT,GAAM,eAAe;AACrB,GAAM,kBAAkB;AACxB,GAAM,eAAe;AC9CrB,IAAM,KAAqE,OAAA,OAAA,IACtE,IADsE,EAEzE,QAFyE,GAAA,SAAA,GAEzD;AAAA,MAAR,IAAQ,EAAR,OACA,IAAgB,EACpB,QAAQ,EACN,UAAU,EAAM,QAAQ,UACxB,MAAM,KACN,KAAK,KACL,QAAQ,OAEV,OAAO,EACL,UAAU,cAEZ,WAAW;AAGb,SAAO,OAAO,EAAM,SAAS,OAAO,OAAO,EAAc,SACzD,EAAM,SAAS,GAEX,EAAM,SAAS,SACjB,OAAO,OAAO,EAAM,SAAS,MAAM,OAAO,EAAc;GApBa;AAA3E,IA4BM,KAAmC,GAAA,SACvC,GACA,GACG;AAAA,MAAA;AADH,QACG,UADH,KAAgB;AAchB,MAAI,IAAsB,GACtB,KAAsC,IACtC,KAAiC,IACjC,GACA,IAAY,EAAc,WAC1B,IAA+C,IAC/C,KAAgB;AAEpB,gBAAmC;AACjC,SAAiB,EACd,IAAI,SAAC,GAAD;AAAA,aACH,GAAiB,EAAS,MAAM,iBAAiB,EAAS;OAE3D,OAAO,SAAC,GAAK,GAAN;AAAA,aAAe,EAAI,OAAO;OAAO;;AAL7C;AAAS,KAAA,IAAA;AAQT,gBAA+B;AAC7B,SAAa,EAAoB,IAAI,SAAC,GAAD;AAAA,aAAc,EAAS;;;AAD9D;AAAS,KAAA,IAAA;AAIT,cAAyB,GAA0B;AACjD,MAAoB,QAAQ,SAAC,GAAa;AACpC,UACF,EAAS,WAET,EAAS;;;AALf;AAAS,KAAA,IAAA;AAUT,cAA2B,GAAwC;AACjE,WAAO,EAAoB,IAAI,SAAC,GAAa;AAC3C,UAAM,KAAmB,EAAS;AAElC,aAAA,EAAS,WAAW,SAAC,GAAgB;AACnC,WAAiB,IAEb,EAAS,cAAc,KACzB,EAAU,SAAS;SAIhB,WAAY;AACjB,UAAS,WAAW;;;;AAb1B;AAAS,KAAA,IAAA;AAmBT,aACE,GACA,GACM;AACN,QAAM,KAAQ,GAAe,QAAQ;AAGrC,QAAI,MAAW,GAIf;AAAA,UAAgB;AAEhB,UAAM,IAAiC,MAAa,IACjD,OAAO,WACP,OAAO,SAAC,GAAK,GAAS;AACpB,eAAA,EAAY,KAAQ,EAAoB,IAAO,MAAM,IAC/C;SACN;AAEL,QAAU,SAAV,OAAA,OAAA,IACK,GADL,EAEE,wBACE,OAAO,EAAc,0BAA2B,aAC5C,EAAc,yBACd,WAAA;AAAA,YAAA;AAAA,eAAA,KAAkB,GAAW,QAA7B,OAAA,SAAkB,EAAmB;;;;AAzB/C;AAAS,KAAA,GAAA,oBA6BT,GAAgB,QAChB,MACA;AAEA,MAAM,IAAiB,EACrB,IADqB,GAAA,WAChB;AACH,WAAO,EACL,WADK,GAAA,WACa;AAChB,SAAgB;OAFb,cAIL,UAJK,GAAA,WAIY;AACf,UAAgB;OALb,aAOL,gBAPK,GAAA,SAOU,IAAgB;AACzB,SAAS,MAAM,gBAAgB,CAAC,MAClC,MAAgB,MAChB,IAAgB;OAVf,mBAaL,QAbK,GAAA,SAaE,IAAgB;AACjB,SAAS,MAAM,gBAAgB,CAAC,MAClC,MAAgB,MAChB,EAAgB,IAAU,GAAW;OAhBpC,WAmBL,WAnBK,GAAA,SAmBK,IAAU,GAAa;AAC/B,QAAgB,IAAU,EAAM;OApB7B;KAFY,SA4BjB,IAAY,GAAM,MAAD,OAAA,OAAA,IAClB,GAAiB,GAAe,CAAC,eADf,EAErB,SAAO,CAAG,GAAH,OAAe,EAAc,WAAW,KAC/C,eAAe,IACf,eAAa,OAAA,OAAA,IACR,EAAc,eADN,EAEX,WAAS,GAAA,OACH,MAAA,EAAc,kBAAd,OAAA,SAAA,EAA6B,cAAa,IADvC,CAEP,aAKA,KAAe,EAAU;AAE/B,IAAU,OAAO,SAAC,GAAwD;AAKxE,QAJA,MAII,CAAC,KAAiB,KAAU;AAC9B,aAAO,EAAgB,GAAW,GAAW;AAK/C,QAAI,CAAA,MAAiB,KAAU,OAK/B;AAAA,UAAI,OAAO,KAAW;AACpB,eACE,GAAW,MAAW,EAAgB,GAAW,GAAW;AAKhE,UAAI,EAAoB,QAAQ,MAAuB,GAAG;AACxD,YAAM,IAAO,EAAoB;AACjC,eAAO,EAAgB,GAAW;;AAIpC,UAAI,GAAW,QAAQ,MAA+B;AACpD,eAAO,EAAgB,GAAW;;KAItC,EAAU,WAAW,WAAY;AAC/B,QAAM,IAAQ,GAAW;AACzB,QAAI,CAAC;AACH,aAAO,EAAU,KAAK;AAExB,QAAM,IAAQ,GAAW,QAAQ;AACjC,MAAU,KAAK,GAAW,IAAQ,MAAM;KAG1C,EAAU,eAAe,WAAY;AACnC,QAAM,IAAO,GAAW,GAAW,SAAS;AAC5C,QAAI,CAAC;AACH,aAAO,EAAU,KAAK;AAExB,QAAM,IAAQ,GAAW,QAAQ,IAC3B,KAAS,GAAW,IAAQ,MAAM;AACxC,MAAU,KAAK;;AAGjB,MAAM,IAAmB,EAAU;AAEnC,SAAA,EAAU,WAAW,SAAC,GAAgB;AACpC,QAAY,EAAM,aAAa,GAC/B,EAAiB;KAGnB,EAAU,eAAe,SAAC,GAAwB;AAChD,OAAgB,OAChB,EAA0B,QAAQ,SAAC,GAAD;AAAA,aAAQ;QAE1C,IAAsB,GAEtB,GAAgB,QAChB,MACA,MACA,IAA4B,GAAkB,IAE9C,EAAU,SAAS,EAAC,eAAe;KAGrC,IAA4B,GAAkB,IAEvC;GAzNgC;AM5CzC,GAAM,gBAAgB,EAAC,QAAA;AAAA,IAAA,KAAA;ACUhB,IAAM,KAAa,GAAC,OACzB,OAAO,KAAQ,YAAY,MAAQ,QAAQ,OAAQ,EAAiB,YAAa,YADzD;AAMnB,YAA+D,GAA4C;AAChH,kBAAiC,EAAK;IAAtC,cApBF;AAoBE,YAAA,GAAA;AACQ,WAAA,OAAO;AACP,WAAA,SAAS;AACT,WAAA,gBAAgB;AAEd,WAAA,kBAAkB,GACxB,EACE,IAAI,YACJ,SAAS,QACT,QAAQ,EACN,MAAM,EACJ,IAAI,EACF,MAAM,EACJ,QAAQ,eACR,SAAS,CAAC,eAIhB,aAAa,EACX,MAAM,YACN,SAAS,WACT,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,WAAW,MAAM,eAC1B,EAAC,QAAQ,YAAY,MAAM,mBAG/B,SAAS,EACP,IAAI,EACF,MAAM,EACJ,QAAQ,WACR,SAAS,CAAC,WAEZ,SAAS,EACP,QAAQ,YACR,SAAS,CAAC,WAAW,kBAI3B,UAAU,EACR,IAAI,EACF,QAAQ,EACN,QAAQ,WACR,SAAS,CAAC,QAAQ,yBAQhC,EACE,QAAQ,EACN,WAAW,MACF,KAAK,MAEd,YAAY,MACH,CAAC,KAAK,QAGjB,SAAS,EACP,MAAM,MAAM;AACV,YAAM,IAAc,KAAK;AACrB,cAAgB,QAEpB,MAAK,QAAQ,GAAM,MAAM,EACvB,WAAW,MACX,WAAW,OACX,OAAO,KAAa,IACpB,OAAO,GACP,WAAW,QACX,OAAO,OAEP,OAAO,GAAoB;AACzB,YAAS,WAAW;cAIxB,KAAK,iBAAiB,cAAc,KAAK;SAE3C,MAAM,MAAM;AACV,aAAK,MAAM;SAEb,QAAQ,MAAM;AACZ,aAAK,MAAM,UACX,KAAK,OAAO;SAEd,SAAS,MAAM;AA5GzB,YAAA;AA6GY,QAAA,KAAA,KAAK,UAAL,QAAA,EAAY,WACZ,KAAK,OAAO;SAEd,SAAS,MAAM;AAhHzB,YAAA;AAiHY,QAAA,KAAA,KAAK,UAAL,QAAA,EAAY;;;IASpB,WAAiB;AACf,WAAK,kBAAkB,GAAU,KAAK,iBACnC,aAAa,OAAS;AACjB,aAAK,iBAEP,QAAQ,IAAI,aAAa,GAAS,EAAM;SAG3C,SAEH,KAAK,gBAAgB,KAAK;;IAG5B,WAAiB;AACf,WAAK,gBAAgB,KAAK;;IAG5B,cAAoB;AAClB,WAAK,gBAAgB,KAAK;;QAGxB,cAAuC;AACzC,UAAI;AAEA,WAAK,WAAW,KAClB,IAAK,KAAK,SAEV,IAAK,GAAG,KAAK,QAAQ;AAEvB,UAAM,IAAW,SAAS,eAAe;AACzC,aAAI,MAAa,OAAa,OAEvB,EAAS,QAAQ,UAAU;;;AAtItC;AAAA,SAAA,GAAA,GAAA,uBACQ,EAAA,CAAL,IADH,EACQ,WAAA,QAAA,IACA,EAAA,CAAL,IAFH,EAEQ,WAAA,UAAA,IACA,EAAA,CAAL,IAHH,EAGQ,WAAA,iBAAA,IAuID;;AA3IF;AAAS,GAAA,IAAA;ACZT,YAAgE,GAA6C;AAClH,kBAAkC,EAAK;QACjC,YAAqB;AACvB,aAAO,KAAK,aAAa;;QAGvB,UAAU,GAAgB;AACxB,UACF,KAAK,aAAa,kBAAkB,MAEpC,KAAK,gBAAgB;;;AAT3B;AAAA,SAAA,GAAA,GAAA,wBAcO;;AAfF;AAAS,GAAA,IAAA;ACMV,aAAiB,GAAY;AACjC,MAAI,IAAQ,IACR,IAAa,GACb,IAAO;AACX,WAAS,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK;AAChC,MAAK,OAAO,OAAO,EAAK,IAAI,OAAO,OAAO,EAAK,IAAI,OAAO,QAAQ,CAAC,IACrE,KAAO,MACH,KAAO,OAAM,EAAC,MAAM,UAAU,OAAO,GAAY,KAAK,GAAG,OAAA,MAC7D,IAAQ,MACR,IAAa,GACb,KAAK,KACI,EAAK,OAAO,OAAO,EAAK,IAAI,OAAO,OAAO,EAAK,IAAI,OAAO,QAAQ,KAC3E,KAAO,OACP,MAAM,EAAC,MAAM,QAAQ,OAAO,GAAY,KAAK,IAAI,GAAG,OAAO,EAAM,MAAM,GAAG,UAC1E,IAAQ,IACR,KAAK,GACL,IAAa,IAEf,KAAS,EAAK,MAAM;AAElB,OAAO,OAAM,EAAC,MAAM,UAAU,OAAO,GAAY,KAAK,EAAK,QAAQ,OAAA;;AApBnE;AAAW,GAAA,IAAA;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,EAAA,KAAA,GAAA,KAAA,IAAA,EAAA,QAAA,IAAA,EAAA,IAAA,GAAA,IAAA;GAAA;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,IAAA,MAAA,MAAA,EAAA,KAAA,KAAA,IAAA,EAAA,QAAA,EAAA,IAAA;GAAA;AAAA,IAAA;AAAA,IAAA;AAAA,ICXX,KAAA,6BAA4B;EAIhC,YAAY,GAAqC,GAAkB;AAAlB,SAAA,aAAA,GAHjD,GAAA,IAAA,MAAA,SACA,GAAA,IAAA,MAAS,KAGP,GAAA,MAAI,IAAW,GAAM,MACrB,GAAA,MAAI,IAAA,KAAS,aAAa;;MAGxB,gBAAa;AACf,WAAO,GAAA,MAAI,IAAA,KAAS,KAAK;;MAGvB,qBAAkB;AACpB,WAAO,GAAA,MAAI,IAAA,KAAS,KAAK;;MAGvB,QAAK;AACP,WAAO,GAAA,MAAI,IAAA;;MAGT,MAAM,GAAoB;AAC5B,OAAA,MAAI,IAAU,KAAS,IAAE,MACzB,GAAA,MAAI,IAAA,KAAS,aAAa;;MAGxB,UAAO;AACT,WAAO,GAAA,MAAI,IAAA,KAAS;;MAGlB,eAAY;AACd,WAAO,GAAA,MAAI,IAAA,KAAS;;MAGlB,aAAa,GAAc;AAC7B,OAAA,MAAI,IAAA,KAAS,eAAe;;GAnC1B;AAAA,GAAA,IAAA;AAAA,KAAA,oBAAA,WAAA,KAAA,oBAAA;AAuCA,IAAA,KAAA,6BAA2B;EAG/B,YAAmB,GAAyB,GAAU;AAAnC,SAAA,UAAA,GAAyB,KAAA,OAAA,GAF5C,KAAA,WAAkD;;MAI9C,eAAY;AACd,WAAO,KAAK,QAAQ,eAAe,KAAK,KAAK,cAAc,KAAK,KAAK;;MAGnE,aAAa,GAAc;AAC7B,QAAI,KAAK,SAAS,WAAW;AAC3B,YAAM,IAAI,aAAa,2BAA2B;AAElD,SAAK,SAAS,GAA6B,QAAQ,IAAQ,KAAK;;EAGpE,OAAO,GAAoC;AACzC,SAAK,SAAS,KAAK;;EAGrB,aAAa,GAAwB;AACnC,QAAI,KAAK,SAAS,WAAW,KAAK,MAAc;AAC9C,WAAK,QAAQ,kBAAkB,KAAK,KAAK,cAAc,KAAK,KAAK;SAC5D;AACL,UAAM,IAAM,KAAK,SAAS,IAAI,OAAM,OAAO,KAAM,WAAW,IAAI,EAAE,OAAQ,KAAK;AAC/E,WAAK,QAAQ,eAAe,KAAK,KAAK,cAAc,KAAK,KAAK,MAAM;;;GAzBpE;AAAA,GAAA,IAAA;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,EAAA,KAAA,GAAA,KAAA,IAAA,EAAA,QAAA,IAAA,EAAA,IAAA,GAAA,IAAA;GAAA;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,IAAA,MAAA,MAAA,EAAA,KAAA,KAAA,IAAA,EAAA,QAAA,EAAA,IAAA;GAAA;AAAA,IAAA;AAAA,ICvCA,KAAA,6BAAuB;EAG3B,YAAY,GAAwB,GAAkB;AAAlB,SAAA,aAAA,GAFpC,GAAA,IAAA,MAAA,SAGE,GAAA,MAAI,IAAU,CAAC,IAAK,MACpB,EAAK,cAAc;;MAGjB,QAAK;AACP,WAAO,GAAA,MAAI,IAAA,KAAQ,IAAI,OAAQ,EAAK,aAAa,KAAK;;MAGpD,MAAM,GAAc;AACtB,SAAK,QAAQ;;MAGX,kBAAe;AACjB,WAAO,GAAA,MAAI,IAAA,KAAQ,GAAG;;MAGpB,cAAW;AACb,WAAO,GAAA,MAAI,IAAA,KAAQ,GAAA,MAAI,IAAA,KAAQ,SAAS,GAAG;;EAG7C,WAAW,GAAgC;AACzC,QAAM,IAAqB,EAAM,IAAI,OAC/B,OAAO,KAAS,WAAiB,IAAI,KAAK,KACvC;AAEJ,MAAM,UAAQ,EAAM,KAAK,IAAI,KAAK,MACvC,GAAA,MAAI,IAAA,KAAQ,GAAG,OAAO,GAAG;AACzB,aAAW,KAAQ,GAAA,MAAI,IAAA;AAAS,QAAK;AACrC,OAAA,MAAI,IAAU,GAAK;;GAhCjB;AAAA,GAAA,IAAA;AAAA,KAAA,oBAAA;ACIA,YAA0B,GAA0B;AACxD,SAAO,EACL,eAAe,GAA4B,GAA+B,GAAe;AACvF,SAAK,gBAAgB,GAAU,GAAO;KAExC,gBAAgB,GAAqB,GAA+B,GAAe;AAAA,QAAA;AACjF,QAAI,CAAA,QAAO,KAAW,YAAY,CAAC,IAAA;AACnC,eAAW,MAAQ;AACjB,YAAI,GAAK,cAAc,GAAQ;AAC7B,cAAM,KAAQ,KAAC,EAAmC,GAAK,iBAAW,QAAA,MAAA,SAAA,IAAI;AACtE,YAAY,IAAM;;;;;AAVtB;AAAU,GAAA,IAAA;AAiBV,YAAkC,GAAoB,GAAc;AACxE,IAAK,QAAQ,OAAO;;AADhB;AAAU,GAAA,IAAA;AAIV,YAAkC,GAAoB,GAAc;AACxE,SACE,OAAO,KAAU,aACjB,aAAgB,MAChB,OAAO,EAAK,QAAQ,EAAK,kBAAoC,YAE7D,GAAK,eAAe,GACb,QAEF;;AATH;AAAU,GAAA,IAAA;AAYT,IAAM,KAAmB,GAAgB;AAAzC,IACM,KAAqC,GAAgB,CAAC,GAAoB,MAAkB;AACvG,KAAwB,GAAM,MAAU,GAAwB,GAAM;;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,EAAA,KAAA,GAAA,KAAA,IAAA,EAAA,QAAA,IAAA,EAAA,IAAA,GAAA,IAAA;GAAA;AAAA,IAAA,KAAA,gCAAA,GAAA,GAAA,GAAA,GAAA;AAAA,MAAA,MAAA,OAAA,CAAA;AAAA,UAAA,IAAA,UAAA;AAAA,MAAA,OAAA,KAAA,aAAA,MAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA;AAAA,UAAA,IAAA,UAAA;AAAA,SAAA,MAAA,MAAA,IAAA,MAAA,MAAA,EAAA,KAAA,KAAA,IAAA,EAAA,QAAA,EAAA,IAAA;GAAA;AAAA,IAAA;AAAA,IAAA;ACnCxE,aAAuB,GAAoB;AACzC,MAAM,IAAS,EAAG,cAAc,iBAAiB,GAAI,WAAW,YAAY,WAAW,cAAc,MAAM,QACvG;AACJ,SAAQ,IAAO,EAAO;AACpB,QAAI,aAAgB,WAAW,EAAK;AAClC,eAAS,IAAI,GAAG,IAAI,EAAK,WAAW,QAAQ,KAAK,GAAG;AAClD,YAAM,IAAO,EAAK,WAAW,KAAK;AAClC,YAAI,KAAQ,EAAK,MAAM,SAAS,OAAO;AACrC,cAAM,KAAc,IAAI,GAAqB,GAAM;AACnD,mBAAW,MAAS,GAAM,EAAK;AAC7B,gBAAI,GAAM,SAAS;AACjB,iBAAY,OAAO,GAAM;iBACpB;AACL,kBAAM,IAAO,IAAI,GAAsB,IAAa,GAAM;AAC1D,iBAAY,OAAO,IACnB,MAAM;;;;aAKL,aAAgB,QAAQ,EAAK,eAAe,EAAK,YAAY,SAAS;AAC/E,eAAW,KAAS,GAAM,EAAK,cAAc;AACvC,UAAM,MAAM,EAAK,YAAY,UAAQ,EAAK,UAAU,EAAM,MAC1D,EAAM,SAAS,UAAQ,OAAM,IAAI,GAAiB,GAAM,EAAM;AAClE;;;AAxBR;AAAU,GAAA,IAAA;AA8BJ,IAAA,KAAA,qCAAgC,iBAAgB;EAIpD,YAAY,GAA+B,GAAiB,IAA8B,IAAgB;AAAA,QAAA,GAAA;AACxG;AAJF,OAAA,IAAA,MAAA,SACA,GAAA,IAAA,MAAA,SAOM,OAAO,eAAe,UAAU,GAAiB,aACnD,OAAO,eAAe,MAAM,GAAiB,YAE/C,KAAK,YAAY,EAAS,QAAQ,UAAU,QAC5C,GAAA,MAAI,IAAU,MAAM,KAAK,GAAa,QAAM,MAC5C,GAAA,MAAI,IAAc,GAAS,MAC3B,MAAA,KAAA,GAAA,MAAI,IAAA,MAAY,oBAAc,QAAA,OAAA,UAAA,GAAA,KAAA,GAAG,MAAM,GAAA,MAAI,IAAA,MAAS;;EAGtD,OAAO,GAAe;AACpB,OAAA,MAAI,IAAA,KAAY,gBAAgB,MAAM,GAAA,MAAI,IAAA,MAAS;;GAnBjD;AAAA,GAAA,IAAA;AAAA,KAAA,oBAAA,WAAA,KAAA,oBAAA;AC/BN,IAAM,KAAa,oBAAI;AAEjB,YAAsB,GAA0B;AACpD,SAAO,GAAW,IAAI;;AADlB;AAAU,GAAA,IAAA;AAIV,YAA2B,GAAoB,GAAc;AACjE,SAAI,GAAY,KACd,GAAM,IACC,QAEF;;AALH;AAAU,GAAA,IAAA;AAQV,YAAyC,GAAqC;AAClF,SAAO,IAAI,MAAgC;AACzC,QAAM,IAAW,EAAiB,GAAG;AACrC,WAAA,GAAW,IAAI,IACR;;;AAJL;AAAU,GAAA,IAAA;AChBhB,IAAM,KAAiB,oBAAI;AAA3B,IACA,KAAA,6BAAkB;EAEhB,YAAoB,GAA0B,GAAY;AAAtC,SAAA,UAAA,GAA0B,KAAA,OAAA,GAC5C,KAAK,QAAQ,iBAAiB,KAAK,MAAM,OACzC,GAAe,IAAI,KAAK,SAAU,IAAI,KAAK,MAAM;;EAEnD,IAAI,GAAuB;AACrB,WAAO,KAAY,aACrB,KAAK,cAAc,EAAS,KAAK,KAAK,WAC7B,OAAO,KAAa,YAAY,OAAQ,EAA0B,eAAgB,aAC3F,KAAK,cAAe,EAA0B,YAAY,KAAK,KAE/D,MAAK,QAAQ,oBAAoB,KAAK,MAAM,OAC5C,GAAe,IAAI,KAAK,SAAU,OAAO,KAAK;;SAG3C,IAAI,GAA2B;AAC/B,OAAe,IAAI,EAAK,YAAU,GAAe,IAAI,EAAK,SAAS,oBAAI;AAC5E,QAAM,IAAO,EAAK,cAAc,MAAM,IAChC,IAAmB,GAAe,IAAI,EAAK;AACjD,WAAI,EAAiB,IAAI,KAAc,EAAiB,IAAI,KACrD,IAAI,GAAa,EAAK,SAAS;;GArB1C;AAAA,GAAA,IAAA;AAyBM,YAAuB,GAAoB,GAAc;AAC7D,SAAI,aAAgB,MAAyB,EAAK,cAAc,WAAW,QACzE,IAAa,IAAI,GAAM,IAAK,IAC5B,EAAK,QAAQ,kBAAkB,EAAK,oBAAoB,EAAK,gBACtD,QAEF;;AANH;AAAU,GAAA,IAAA;AClBhB,YAA4B,GAAoB,GAAc;AAC5D,SAAI,aAAiB,MAAkB,aAAgB,KACrD,GAAM,WAAW,IACV,QAEF;;AALT;AAAS,GAAA,IAAA;AAQT,YAAiC,GAAoB,GAAc;AACjE,SAAI,aAAiB,oBAAoB,aAAgB,KACnD,GAAM,WAAW,UAAQ,EAAK,QAAQ,GAAG,EAAM,aAC5C,QAEF;;AALT;AAAS,GAAA,IAAA;AAQT,YAAoB,GAAc;AAChC,SAAO,OAAO,KAAU,YAAY,OAAO,YAAc;;AAD3D;AAAS,GAAA,IAAA;AAIT,YAAyB,GAAoB,GAAc;AACzD,MAAI,CAAC,GAAW;AAAQ,WAAO;AAC/B,MAAI,aAAgB,IAAkB;AACpC,QAAM,IAAQ;AACd,aAAW,KAAQ;AACjB,UAAI,aAAgB,IAAgB;AAClC,YAAM,IAAW,SAAS;AAC1B,UAAK,WAAW,IAChB,EAAM,KAAK,GAAG,EAAS;;AACd,qBAAgB,mBACzB,EAAM,KAAK,GAAG,EAAK,cAEnB,EAAM,KAAK,OAAO;AAGtB,WAAI,EAAM,UAAQ,EAAK,QAAQ,GAAG,IAC3B;;AAEP,WAAA,EAAK,QAAQ,MAAM,KAAK,GAAO,KAAK,MAC7B;;AAnBX;AAAS,GAAA,IAAA;AAuBH,YAAsB,GAAoB,GAAc;AAC5D,KAAiB,GAAM,MACrB,GAAwB,GAAM,MAC9B,GAAa,GAAM,MACnB,GAAmB,GAAM,MACzB,GAAwB,GAAM,MAC9B,GAAgB,GAAM,MACtB,GAAwB,GAAM;;AAP5B;AAAU,GAAA,IAAA;AAUhB,IAAM,KAAY,oBAAI;AAAtB,IACM,KAAoB,oBAAI;AAD9B,IAEM,KAA4B,oBAAI;AAFtC,IAGM,KAAA,6BAAqB;EACzB,YACkB,GACA,GACA,GAA2B;AAF3B,SAAA,UAAA,GACA,KAAA,SAAA,GACA,KAAA,YAAA;;MAGd,WAAQ;AACV,QAAI,GAAU,IAAI,KAAK;AACrB,aAAO,GAAU,IAAI,KAAK;AACrB;AACL,UAAM,IAAW,SAAS,cAAc,aAClC,IAAM,KAAK,QAAQ,SAAS;AAClC,aAAA,EAAS,YAAY,KAAK,QAAQ,OAAO,CAAC,GAAK,GAAK,OAAM,IAAM,IAAO,MAAI,IAAM,MAAM,UAAS,KAAK,KACrG,GAAU,IAAI,KAAK,SAAS,IACrB;;;EAIX,WAAW,GAAgC;AACzC,QAAM,IAAW,KAAK;AACtB,QAAI,GAAkB,IAAI,OAAa,GAAU;AAC/C,SAAkB,IAAI,GAAS;AAC/B,UAAM,IAAW,IAAI,GAAiB,GAAU,KAAK,QAAQ,KAAK;AAClE,SAA0B,IAAI,GAAS,IACnC,aAAmB,KACrB,EAAQ,QAAQ,GAAG,EAAS,YAE5B,EAAQ,YAAY;AAEtB;;AAEF,OAA0B,IAAI,GAAU,OAAQ,KAAK;;GAhCnD;AAAA,GAAA,IAAA;AAoCN,IAAM,KAAmB,GAAgB;AACnC,WAAe,MAAkC,GAAiB;AACtE,SAAO,IAAI,GAAe,GAAS,GAAQ;;AADvC;AAAU,GAAA,GAAA;AAIV,YAAiB,GAAwB,GAAgC;AAC7E,IAAO,WAAW;;AADd;AAAU,GAAA,IAAA;ACxGhB,IAAM,KAA6C,oBAAI;AAAvD,IACa,KAAQ,GAAU,IAAI,MAAyB,OAAsB;AAC3E,KAAO,IAAI,MAAO,GAAO,IAAI,GAAM,EAAC,GAAG,EAAS;AACrD,MAAM,IAAQ,GAAO,IAAI;AACzB,WAAS,IAAI,GAAG,IAAI,EAAS,QAAQ,KAAK;AACpC,MAAS,cAAc,UAEzB,QAAQ,QAAQ,EAAS,IAAI,KAAK,OAAQ;AACpC,UAAI,EAAM,KACZ,GAAM,IAAI,GACV,GAAY,GAAM;SAGb,KAAK,EAAM,KACpB,GAAM,IAAI,GACV,GAAY,GAAM,EAAS;;ACf1B,IAAM,KAAa,GAAW,OAAmB,OAAsB;AAC5E,MAAI,CAAE,cAAgB;AAAmB;AACzC,MAAM,IAAW,SAAS,cAAc;AACxC,IAAS,YAAY;AACrB,MAAM,IAAW,SAAS,WAAW,EAAS,SAAS;AACvD,IAAK,QAAQ,GAAG,EAAS;;ACCpB,YAA+D,GAA4C;AAChH,kBAAiC,EAAK;IAAtC,cAXF;AAWE,YAAA,GAAA;AACQ,WAAA,OAAO;;IAEb,SAAS,GAA6B;AACpC,aAAO,IAAO,KAAK;qCACY,KAAK,QAAQ;;IAGtC,QAAQ,GAAmD;AACjE,UAAI,KAAK,SAAS;AAChB,eAAO,EAAM,CAAC;AAGhB,UAAM,IAAW,SAAS,eAAe,KAAK;AAC9C,aAAI,MAAa,OAAa,OAEvB,EAAS,QAAQ,UAAU;;QAGxB,YAA4B;AACtC,aAAO;;;;;;;;;;;;;;;;;;;AApBX;AAAA,SAAA,GAAA,GAAA,uBACQ,EAAA,CAAL,IADH,EACQ,WAAA,QAAA,IAuCD;;AAzCF;AAAS,GAAA,IAAA;ACFT,IAAM,KAAW,GAAC,OACvB,OAAO,KAAQ,YAAY,MAAQ,QAAQ,OAAQ,EAAe,MAAO,UADnD;AAGjB,YAA6D,GAA0C;AAC5G,kBAA+B,EAAK;IAApC,cAZF;AAYE,YAAA,GAAA;AACQ,WAAA,KAAK;;;AADb;AAAA,SAAA,GAAA,GAAA,qBACQ,EAAA,CAAL,IADH,EACQ,WAAA,MAAA,IAGD;;AALF;AAAS,GAAA,IAAA;ACGT,IAAM,KAAa,GAAC,OACzB,OAAO,KAAQ,YAAY,MAAQ,QAAQ,OAAQ,EAAiB,YAAa,YADzD;AAGnB,YAA+D,GAA4C;AAChH,kBAAiC,EAAK;IAOpC,WAAiB;AACQ,WAA+B,UAGtD,MAAK,iBAAiB,SAAS,KAAK,wBAEpC,KAAK,OAAO,GAAM,MAAM,EACtB,WAAW,MACX,WAAW,OACX,OAAO,OACP,SAAS,KAAK,aACd,aAAa,MACb,UAAU,SAAS,MACnB,QAAQ,CAAC,GAAG,KACZ,WAAW,OACX,OAAO,kBACP,SAAS,UACT,QAAQ,KAAK,cAAc,KAAK,OAChC,QAAQ,MAAM;AA3CtB,YAAA,GAAA,IAAA,IAAA;AA4CU,QAAA,KAAA,KAAK,cAAL,QAAA,EAAgB,QAChB,MAAA,KAAK,iBAAL,QAAA,GAAmB,QACnB,MAAA,KAAK,gBAAL,QAAA,GAAkB,QAClB,KAAA,KAAK,kBAAL,QAAA,EAAoB;;;IAK1B,WAAiB;AACf,WAAK,KAAK;;IAGZ,WAAiB;AACf,WAAK,KAAK;;IAGJ,cAAoB;AAC1B,UAAM,IAAiB,KAA+B;AACtD,WAAA,QAAA,EAAe;;IAGT,wBAA8B;AACpC,WAAK,cAAc,IAAI,MAAM,uBAAuB,EAAC,SAAS;;QAGpD,cAAgC;AAC1C,UAAM,IAAW,SAAS,eAAe;AACzC,SAAK,QAAQ;AAEb,UAAM,IAAO,EAAS,QAAQ,UAAU,OAClC,KAAU,SAAS;AAEzB,aAAA,GAAO,IAAO,KAAQ,KAEf;;IAGD,cAAc,GAA+B;AACnD,UAAI,GAAS,EAAS,YAAY;AAChC,YAAM,KAAW,EAAS,OAAO,cAAc;AAC/C,WAAK,QAAQ,KACb,GAAS,WAAW,OAEpB,KAAK,YAAa,GAAmC,QACjD,KAAK,cAAc,UACrB,MAAK,YAAY,GAAM,IAAU,EAC/B,WAAW,OACX,SAAS,2BAEX,GAAS,iBAAiB,aAAa,KAAK,gBAAgB,KAAK;;AAIrE,UAAI,GAAY,EAAS,YAAY;AACnC,YAAM,KAAc,EAAS,OAAO,cAAc;AAClD,WAAK,QAAQ,KACb,GAAY,WAAW,OAEvB,KAAK,eAAgB,GAAsC,QACvD,KAAK,iBAAiB,UACxB,MAAK,eAAe,GAAM,IAAa,EACrC,WAAW,OACX,SAAS,mBAEX,GAAY,iBAAiB,aAAa,KAAK,mBAAmB,KAAK;;AAI3E,UAAI,GAAY,EAAS,YAAY;AACnC,YAAM,KAAa,EAAS,OAAO,cAAc;AACjD,WAAK,QAAQ,KACb,GAAW,WAAW,OAEtB,KAAK,cAAe,GAAqC,QACrD,KAAK,gBAAgB,UACvB,MAAK,cAAc,GAAM,IAAY,EACnC,WAAW,OACX,SAAS,4BAEX,GAAW,iBAAiB,aAAa,KAAK,kBAAkB,KAAK;;AAIzE,UAAM,IAAiB,EAAS,OAAO,cAAc;AACrD,SAAK,QAAQ,IAEb,KAAK,gBAAiB,EAAyC,QAC3D,KAAK,kBAAkB,UACzB,MAAK,gBAAgB,GAAM,GAAgB,EACzC,WAAW,OACX,SAAS,cAGb,EAAe,iBAAiB,aAAa,KAAK,YAAY,KAAK,QACnE,EAAe,iBAAiB,aAAa,KAAK,6BAA6B,KAAK;;IAG9E,kBAAwB;AAC9B,WAAK,YACL,KAAK,cAAc,IAAI,MAAM,qBAAqB,EAAC,SAAS;;IAGtD,qBAA2B;AACjC,WAAK,YACL,KAAK,cAAc,IAAI,MAAM,wBAAwB,EAAC,SAAS;;IAGzD,oBAA0B;AAChC,WAAK,YACL,KAAK,cAAc,IAAI,MAAM,uBAAuB,EAAC,SAAS;;IAGxD,+BAAqC;AAC3C,WAAK,cAAc,IAAI,MAAM,oBAAoB,EAAC,SAAS;;;AA3I/D;AAAA,SAAA,GAAA,GAAA,uBA+IO;;AAhJF;AAAS,GAAA,IAAA;ACXT,IAAA,KAAA,qCAAkC,GACvC,GAAc,GAAe,GAAkB,GAAe,iBAC9D;EAFK,cANP;AAMO,UAAA,GAAA;AASC,SAAA,IAAI;AACJ,SAAA,IAAI;AACJ,SAAA,IAAI;;MAEN,gBAAmD;AACrD,WAAO;;EAGT,YAAkB;AAChB,SAAK;;EAGC,gBAAsB;AAG5B,QAFA,GAAK,QAAQ,KAAK,gBAEd,KAAK,cAAc,YAAY;AAAoB;AAEvD,QAAM,IAAiB,KAA+B;AAClD,SAAe,EAAc;AAEjC,QAAM,IAAU,KAAK;AACP,OAAM,MAAiB,EACnC,WAAW,MACX,WAAW,OACX,OAAO,KAAa,IACpB,OAAO,GACP,WAAW,QACX,OAAO,OACP,OAAO,GAAyB;AAC9B,QAAS,WAAW;SAGlB;;EAGA,6BAA6B;AACnC,QAAM,IAAU,SAAS;AAEzB,WAAA,GACE;;;;;;;;uDAQiD,KAAK,YAAY,KAAK;yDACpB,KAAK,YAAY,KAAK,KAAK;2DACzB,KAAK,YAAY,KAAK,OAAO;;;;uDAIjC,KAAK,YAAY,KAAK;uDACtB,KAAK,YAAY,KAAK;uDACtB,KAAK,YAAY,KAAK;;;SAIvE,IAGK;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UACL,KAAK,qBACL,KAAK,iBAAiB,cAAc,KAAK;;EAG3C,uBAA6B;AAC3B,QAAM,IAAY,KAA+B;AACjD,SAAA,QAAA,EAAU;;EAGZ,yBAAyB,GAAc,GAAyB,GAA+B;AACzF,KAAC,KAAK,QACN,MAAa,KAEb,MAAa,QACb,OAAS,YAAU,MAAK,IAAI,WAAW,KACvC,MAAS,YAAU,MAAK,IAAI,WAAW,KACvC,MAAS,YAAU,MAAK,IAAI,WAAW,KAC3C,KAAK,IAAI,KAAK,gBACd,KAAK,MAAM,KAAK,aAChB,KAAK,QAAQ,KAAK,eAElB,KAAK;;EAGP,SAAe;AACb,SAAK,IAAI,KAAK,gBACd,KAAK,MAAM,KAAK,aAChB,KAAK,QAAQ,KAAK;AAElB,QAAM,IAAiB,GAAC,OACf,oFAAuF,iBADzE,mBAIjB,IAAkB,GAAA,CAAC,GAAgB,MAChC;;;kCAGqB,KAAQ;;gBAJd;AASxB,OACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAkF8D,KAAK;;;;;;;;;;;;;;;;;;;;oBAoBrD,EAAe,MAAM,EAAe,OAAO,EAAe,OAAO,EAAe;oBAChF,EAAe,OAAO,EAAe,QAAQ,EAAe,QAAQ,EAAe;oBACnF,EAAe;;;;oBAIf,EAAgB,GAAG,QAAQ,EAAgB,IAAI,QAAQ,EAAgB,IAAI;oBAC3E,EAAgB,IAAI,QAAQ,EAAgB,IAAI,QAAQ,EAAgB,KAAK;oBAC7E,EAAgB,KAAK,QAAQ,EAAgB,KAAK,QAAQ,EAAgB,KAAK;oBAC/E,EAAgB,IAAI;;;;;iBAMlC,KAAK;;EAIT,SAAiB;AACf,WAAO,IAAI;;EAGL,oBAA0B;AAChC,QAAM,IAAuB,KAAK,iBAAiB,GAAG;AAEtD,SAAK,WAAW,MAAM,SAAS,QAAS,MAAM,KAAK,IAAK,QAAQ,IAAuB,QACvF,KAAK,UAAU,MAAM,SAAS,cAAe,MAAM,KAAK,IAAK,QAAQ,IAAuB,QAExF,KAAK,MAAM,KACb,MAAK,OAAO,MAAM,YAAY,WAAW,KAAK,mBAAmB,CAAC,KAAK;AAGzE,QAAM,IAAiB,KAA+B;AACtD,SAAA,QAAA,EAAe,WAAW,KAAK;;MAGrB,IAAY;AACtB,QAAM,IAAQ,KAAK,aAAa;AAChC,WAAA,GAAK,QAAQ,IAEN,WAAW;;MAGR,EAAE,GAAe;AAC3B,SAAK,aAAa,UAAU,EAAM;;EAG5B,eAAuB;AAC7B,WAAO,WAAW,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,QAAQ;;MAG/E,IAAI,GAAe;AAC7B,SAAK,aAAa,YAAY,EAAM;;MAG1B,MAAc;AACxB,QAAM,IAAU,KAAK,aAAa;AAClC,WAAA,GAAK,QAAQ,IAEN,WAAW;;EAGZ,YAAoB;AAC1B,WAAQ,KAAK,MAAM,KAAK,GAAG,KAAK,KAAK,MAAO,KAAK;;MAGvC,MAAM,GAAe;AAC/B,SAAK,aAAa,cAAc,EAAM;;MAG5B,QAAgB;AAC1B,QAAM,IAAY,KAAK,aAAa;AACpC,WAAA,GAAK,QAAQ,IAEN,WAAW;;EAGZ,cAAsB;AAC5B,QAAM,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACjG,WAAQ,MAAM,IAAK,KAAK;;EAGlB,YAAY,GAAe,IAAS,GAAW;AACrD,WAAQ,MAAS,IAAI,MAAM,MAAM,EAAM,QAAQ;;GAnT5C;AAAA,GAAA,IAAA,wBAGG,EAAA,CAAP,KAHI,GAGG,WAAA,QAAA,IACA,EAAA,CAAP,KAJI,GAIG,WAAA,cAAA,IACA,EAAA,CAAP,KALI,GAKG,WAAA,aAAA,IACA,EAAA,CAAP,KANI,GAMG,WAAA,UAAA,IACC,EAAA,CAAR,KAPI,GAOI,WAAA,oBAAA,IAEH,EAAA,CAAL,IATI,GASC,WAAA,KAAA,IACA,EAAA,CAAL,IAVI,GAUC,WAAA,KAAA,IACA,EAAA,CAAL,IAXI,GAWC,WAAA,KAAA;AA4SR,GAAW;AAAA,IAAA,KAAA;;;;AC/SJ,IAAA,KAAA,qCAAiC,GACtC,GAAc,GAAe,GAAiB,GAAc,GAAkB,GAAe,mBAC7F;MACI,gBAAkD;AACpD,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAA0B,KAAK;;EAG9E,SAAiB;AACf,WAAO,IAAI;;GAlBR;AAAA,GAAA,IAAA;AAsBP,GAAW;AAAA,IAAA,KAAA;;;;ACfJ,IAAA,KAAA,qCAA2B,GAChC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA4C;AAC9C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAoB,KAAK;;EAGxE,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAAuB,KAAK,QAEhC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AAAA,IAAA,KAAA;;;;;;AC5CJ,IAAA,KAAA,qCAAqC,GAC1C,GAAc,GAAe,GAAe,GAAc,GAAkB,GAAe,mBAC3F;EAFK,cAPP;AAOO,UAAA,GAAA;AAGC,SAAA,QAAQ;;MAEV,gBAAsD;AACxD,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OACE;UACI,KAAK,SAAS;;eAGlB,KAAK;;EAIT,SAAiB;AACf,WAAI,KAAK,SAAS,KACT,IAAI,QAEJ,IAAI,MAAiC,KAAK;;GA7BhD;AAAA,GAAA,IAAA,2BAGC,EAAA,CAAL,IAHI,GAGC,WAAA,SAAA;AA+BR,GAAW;AAAA,IAAA,KAAA;;;;;;;;;;;;ACnBJ,IAAA,KAAA,qCAA+B,GACpC,GACE,GACE,GACE,GAAe,GAAe,GAAiB,GAAc,GAAkB,GAAe,sBAIpG;MACI,gBAAgD;AAClD,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAwB,KAAK;;EAG5E,SAAiB;AACf,WAAI,KAAK,UAAU,KACV,IAAI,QAEJ,IAAI,MAA2B,KAAK,MAAM,QAAQ,KAAK;;GA3B7D;AAAA,GAAA,IAAA;AAgCP,GAAW;AAAA,IAAA,KAAA;;;;;;;;;;;;;;ACjCJ,IAAA,KAAA,qCAA8B,GACnC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA+C;AACjD,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAuB,KAAK;;EAG3E,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAA0B,KAAK,QAEnC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AAAA,IAAA,KAAA;;;;;;AC7BJ,IAAA,KAAA,qCAA4B,GACjC,GACE,GACE,GACE,GAAe,GAAe,GAAiB,GAAc,GAAkB,GAAe,sBAIpG;MACI,gBAA6C;AAC/C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAqB,KAAK;;EAGzE,SAAiB;AACf,WAAI,KAAK,UAAU,KACV,IAAI,QAEJ,IAAI,MAAwB,KAAK,MAAM,QAAQ,KAAK;;GA3B1D;AAAA,GAAA,IAAA;AAgCP,GAAW;AAAA,IAAA,KAAA;;;;;;AChCJ,IAAA,KAAA,qCAA4B,GACjC,GACE,GACE,GACE,GAAe,GAAe,GAAiB,GAAc,GAAkB,GAAe,sBAIpG;MACI,gBAA6C;AAC/C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAqB,KAAK;;EAGzE,SAAiB;AACf,WAAI,KAAK,UAAU,KACV,IAAI,QAEJ,IAAI,MAAwB,KAAK,MAAM,QAAQ,KAAK;;GA3B1D;AAAA,GAAA,IAAA;AAgCP,GAAW;AAAA,IAAA,KAAA;;;;;AChCJ,IAAA,KAAA,qCAA4B,GACjC,GACE,GACE,GACE,GAAe,GAAe,GAAiB,GAAc,GAAkB,GAAe,sBAIpG;MACI,gBAA6C;AAC/C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAqB,KAAK;;EAGzE,SAAiB;AACf,WAAI,KAAK,UAAU,KACV,IAAI,QAEJ,IAAI,MAAwB,KAAK,MAAM,QAAQ,KAAK;;GA3B1D;AAAA,GAAA,IAAA;AAgCP,GAAW;AAAA,IAAA,KAAA;;;;ACvCJ,IAAA,KAAA,qCAA8B,GACnC,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,oBAEnG;MACI,gBAA+C;AACjD,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAuB,KAAK;;EAG3E,SAAiB;AACf,WAAO,IAAI;;GApBR;AAAA,GAAA,IAAA;AAwBP,GAAW;AAAA,IAAA,KAAA;;;;AClBJ,IAAA,KAAA,qCAA2B,GAChC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA4C;AAC9C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAoB,KAAK;;EAGxE,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAAuB,KAAK,QAEhC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AAAA,IAAA,KAAA;;;;AC7CJ,IAAA,KAAA,qCAA+B,GACpC,GAAc,GAAe,GAAc,GAAkB,GAAe,kBAC5E;EAFK,cANP;AAMO,UAAA,GAAA;AAGC,SAAA,QAAQ;;MAEV,gBAAmF;AACrF,YAAQ,KAAK;WACN;AACH,eAAO;WACJ;AACH,eAAO;;AAEP,cAAM,IAAI,MAAM,wBAAwB,KAAK;;;EAInD,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OACE;UACI,KAAK,SAAS;;eAGlB,KAAK;;EAIT,SAAiB;AACf,WAAO,KAAK,KAAK;;GAjCd;AAAA,GAAA,IAAA,qBAGC,EAAA,CAAL,IAHI,GAGC,WAAA,SAAA;AAkCR,GAAW;AAAA,IAAA,KAAA;;;;ACtBJ,IAAA,KAAA,qCAA2B,GAChC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA4C;AAC9C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAoB,KAAK;;EAGxE,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAAuB,KAAK,QAEhC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AAAA,IAAA,KAAA;;;;AC9BJ,IAAA,KAAA,qCAA2B,GAChC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA4C;AAC9C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAoB,KAAK;;EAGxE,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAAuB,KAAK,QAEhC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AAAA,IAAA,KAAA;;;;AC9BJ,IAAA,KAAA,qCAA2B,GAChC,GACE,GACE,GAAkB,GAAe,GAAiB,GAAc,GAAkB,GAAe,qBAGrG;MACI,gBAA4C;AAC9C,WAAO;;EAGT,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OAAO,qBAAwB,KAAK,SAAS,aAAoB,KAAK;;EAGxE,SAAiB;AACf,WAAI,KAAK,OAAO,KACP,IAAI,MAAuB,KAAK,QAEhC,IAAI;;GAzBV;AAAA,GAAA,IAAA;AA8BP,GAAW;AClBJ,IAAM,KAAc,GAAC,OAC1B,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,IAfU;AAApB,IAiBM,KAAiB,GAAC,OACR,KAAQ,QAAQ,aAAe,IADxB;AAjBvB,IAoBM,KAAiB,GAAC,OACR,KAAQ,QAAQ,aAAe,IADxB;AApBvB,IAuBM,KAAiB,GAAC,OACR,KAAQ,QAAQ,aAAe,IADxB;AAvBvB,IA0BM,KAAiB,GAAC,OACR,KAAQ,QAAQ,aAAe,IADxB;AA1BvB,IA6BM,KAAqB,GAAC,OACZ,KAAQ,QAAQ,aAAe,IADpB;AA7B3B,IAgCM,KAAiB,GAAC,OACR,KAAQ,QAAQ,aAAe,IADxB;AAhCvB,IAmCM,KAAoB,GAAC,OACX,KAAQ,QAAQ,aAAe,IADrB;AAnC1B,IAsCM,KAAkB,GAAC,OACT,KAAQ,QAAQ,aAAe,IADvB;AAtCxB,IAyCM,KAAkB,GAAC,OACT,KAAQ,QAAQ,aAAe,IADvB;AAzCxB,IA4CM,KAAkB,GAAC,OACT,KAAQ,QAAQ,aAAe,IADvB;AA5CxB,IA+CM,KAAoB,GAAC,OACX,KAAQ,QAAQ,aAAe,IADrB;AA/C1B,IAkDM,KAAuB,GAAC,OACd,KAAQ,QAAQ,aAAe,IADlB;AAlD7B,IAqDM,KAAwB,GAAC,OACf,KAAQ,QAAQ,aAAe,IADjB;AArD9B,IAwDM,KAAqB,GAAC,OACZ,KAAQ,QAAQ,aAAe,IADpB;AAxD3B,IA2DM,KAA2B,GAAC,OAClB,KAAQ,QAAQ,aAAe,IADd;AC5FjC,YAAmB,GAAe;AACvC,SAAO,UAAU,KAAK;;AADjB;AAAS,GAAA,IAAA;ACST,IAAA,KAAA,qCAAqC,YAAY;MAGlD,mBAA4B;AAC9B,WAAO,KAAK,MAAM,MAAM;;EAG1B,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UACL,KAAK,aACL,KAAK,iBAAiB,aAAa,KAAK,YACxC,SAAS,iBAAiB,SAAS,KAAK,eAAe,KAAK;;EAG9D,SAAe;AACb,OAAO,kBAAqB,KAAK;;EAGnC,cAAc,GAA4B;AACxC,SAAK,aACL,KAAK,UAAU,YAAY;;EAG7B,gBAAgB,GAAyB;AACvC,SAAK,aACL,KAAK,UAAU,YAAY,GAC3B,OAAO,WAAW,MAAM;AACtB,WAAK,UAAU,QAAQ;OACtB;;EAGL,mBAAmB,GAA4B;AAC7C,SAAK,aACL,KAAK,UAAU,YAAY,GAC3B,OAAO,WAAW,MAAM;AACtB,WAAK,UAAU,WAAW;OACzB;;EAGL,kBAAkB,GAA4B;AAC5C,SAAK,aACL,KAAK,UAAU,YAAY,GAC3B,OAAO,WAAW,MAAM;AACtB,WAAK,UAAU,UAAU;OACxB;;MAGD,YAAuC;AACzC,QAAM,IAAK,KAAK,MAAM,OAAO,cAAc;AAC3C,WAAA,GAAK,QAAQ,IAEN;;EAGD,YAAY;AAClB,SAAK,QAAQ,GAAM,MAAM,EACvB,WAAW,MACX,WAAW,OACX,OAAO,OACP,SAAS,KAAK,cACd,aAAa,MACb,QAAQ,CAAC,GAAG,IACZ,WAAW,UACX,OAAO,uBACP,SAAS,UACT,aAAa;;EAIT,YAAkB;AACxB,SAAK,MAAM,QACX,KAAK,UAAU;;EAGT,eAAe,GAAoB;AACzC,QAAM,IAAY,EAAM;AAGtB,KAAC,KAAK,MAAM,OAAO,SAAS,MAC5B,CAAC,KAAK,MAAM,UAAU,SAAS,MAC/B,CAAC,GAAY,MAEb,KAAK,MAAM;;MAIH,eAAiC;AAC3C,QAAM,IAAW,SAAS,cAAc;AACxC,OAAK,QAAQ;AAEb,QAAM,IAAO,EAAS,QAAQ,UAAU,OAClC,IAAU,SAAS;AAEzB,WAAA,GAAO,IAAO,KAAQ,IAEf;;GAjGJ;AAAA,GAAA,IAAA;AAqGP,GAAW;ACzGX,IAAA,KAAqB,GAAA,MAAA;AAArB,IAEa,KAAuB,GAAC,OACnC,MAAQ,QAAQ,aAAe,IADG;AAFpC,IAQO,KAAA,qCAAiC,YAAY;EAA7C,cAbP;AAaO,UAAA,GAAA;AACC,SAAA,QAAQ;AACR,SAAA,SAAS;AACT,SAAA,cAAc;AACd,SAAA,WAAW;AACX,SAAA,QAAQ;AAEN,SAAA,aAAyC;AACzC,SAAA,qBAAqB,GAC3B,EACE,IAAI,gBACJ,SAAS,QACT,QAAQ,EACN,MAAM,EACJ,IAAI,EACF,YAAY,EACV,QAAQ,YAEV,WAAW,EACT,QAAQ,QACR,SAAS,CACP,yBACA,oBACA,oBACA,wBACA,0BAGJ,iBAAiB,EACf,QAAQ,QACR,SAAS,CAAC,uBAAuB,oBAAoB,2BAI3D,QAAQ,EACN,IAAI,EACF,WAAW,EACT,QAAQ,UACR,SAAS,CAAC,0BAEZ,UAAU,EACR,QAAQ,QACR,SAAS,CAAC,kCAMpB,EACE,SAAS,EACP,qBAAqB,MAAM;AACzB,UAAI,CAAC,OAAO,UAAU,KAAK,gBAAgB,KAAK,eAAe;AAC7D,cAAM,IAAI,GAAc,mBAAmB,KAAK;OAGpD,uBAAuB,CAAC,GAAU,MAAU;AACtC,QAAM,SAAS,eAEnB,MAAK,cAAc,GAAiB,KAAK;OAE3C,kBAAkB,CAAC,GAAU,MAAU;AACrC,UAAI,EAAM,SAAS;AAAmB;AAEtC,UAAM,CAAC,EAAE,KAAS,KAAK,cAAc,KAAK;AAC1C,WAAK,QAAQ;OAEf,kBAAkB,CAAC,GAAU,MAAU;AACrC,UAAI,EAAM,SAAS;AAAa;AAEhC,UAAM,CAAC,KAAU,KAAK,cAAc,GAAS,KAAK;AAClD,WAAK,SAAS;OAEhB,kBAAkB,MAAM;AACtB,WAAK;OAEP,sBAAsB,MAAM;AAC1B,WAAK,OAAQ,MAAK,SAAS,IAAI,KAAK,MAAO,KAAI,KAAK;OAEtD,qBAAqB,MAAM;AACzB,WAAK,cAAc,IAAI,MAAM,uBAAuB,EAAC,SAAS;OAEhE,qBAAqB,MAAM;AACzB,WAAK,cAAc,IAAI,MAAM,uBAAuB,EAAC,SAAS;;;EAQtE,yBAAyB,GAAc,GAAyB,GAA+B;AACzF,UAAa,KACb,MAAa,QAEb,OAAS,gBAAgB,MAAa,MACxC,KAAK,mBAAmB,KAAK,EAAC,MAAM,gBAElC,MAAS,sBAAsB,KAAK,uBAAuB,UAC7D,KAAK,mBAAmB,KAAK,EAAC,MAAM;;EAIxC,oBAA0B;AACxB,SAAK,qBAAqB,GAAU,KAAK,oBACtC,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,iBAAiB,GAAS,EAAM;OAG/C,SAEC,KAAK,eAAe,QACtB,KAAK,aAAa,EAAC,MAAM,WAE3B,KAAK,UACL,KAAK,oBACL,KAAK;;EAGP,uBAA6B;AAC3B,IAAA,IAAA,GAAA,SAAS,MAAM;;EAGjB,SAAe;AACb,OACE;;;;;;;;;;;;;iBAcA,KAAK;;EAID,kBAAwB;AAC9B,IAAA,IAAA,GAAA,SAAS,MAAM,UAAU,EACvB,QAAQ,QACR,WAAW,CACT,GAAA,QAAS,UAAU,SAAS,EAC1B,aAAa,YAGjB,WAAW,EACT,OAAO,KAAK,UAAU,KAAK,OAC3B,MAAM,KAAK,KAAK,KAAK,OACrB,KAAK,KAAK,QAAQ,KAAK;;EAKrB,YAAkB;AACxB,SAAK,mBAAmB,KAAK,EAAC,MAAM;;EAG9B,KAAK,GAAsB;AACjC,QAAM,IAAc,GAAA,QAAS,eAAe,EAAM,QAAQ,OACpD,IAAa,EAAM,QAAQ;AAEjC,SAAK,OAAO;AAEZ,QAAM,IAAS,KAAK,mBAAmB;AACvC,SAAK,aAAa,eAAe,EAAO;AAExC,QAAM,CAAC,EAAE,MAAS,KAAK,cAAc;AAEjC,SAAK,UAAU,MAAO,MAAK,QAAQ;;EAGjC,UAAgB;AACtB,SAAK,mBAAmB,KAAK,EAAC,MAAM;;EAG9B,mBAAyB;AAC/B,QAAI,KAAK,gBAAgB;AAAG;AAE5B,QAAM,IAAQ,KAAK,KAAK,aAClB,IAAM,IAAI,KAAK,aACf,IAAa,IAAI,MAAM,IAAM,IAAQ,GAAG,KAAK,MAAM,IAAI,CAAC,GAAG,OAAM,KAAI;AAE3E,SAAK,aAAa;AAClB,aAAW,KAAQ;AACb,WAAK,gBAAgB,IACnB,MAAS,IACX,KAAK,WAAW,KAAK,MACZ,MAAS,IAClB,KAAK,WAAW,KAAK,MAAM,WAClB,MAAS,KAClB,KAAK,WAAW,KAAK,KAAK,MAAM,YAEhC,KAAK,WAAW,IAAO,KAAK,MAAM,GAAG,YAGnC,MAAS,IACX,KAAK,WAAW,KAAK,MACZ,MAAS,IAClB,KAAK,WAAW,KAAK,KAAK,KAAK,eAAe,UAAK,KAAK,gBAC/C,MAAS,KAClB,KAAK,WAAY,KAAK,KAAK,KAAM,KAAK,eAAe,WAAM,KAAK,gBAEhE,KAAK,WAAY,IAAO,KAAK,KAAM,KAAK,eAAe,GAAG,WAAS,KAAK;;EAMxE,cAAc,GAA+B;AACnD,QAAI,IAAW,MACX,IAAa,MACb,IAAY;AAEhB,aAAW,MAAQ,KAAK,YAAY;AAClC,UAAM,KAAQ,KAAK,IAAI,WAAW,MAAQ;AACtC,MAAA,OAAa,QAAQ,KAAQ,MAC/B,KAAW,IACX,IAAa,WAAW,KACxB,IAAY,KAAK,WAAW;;AAGhC,WAAA,GAAK,QAAQ,IACb,GAAK,QAAQ,IAEN,CAAC,GAAY;;EAGd,mBAAmB,GAAoB;AAC7C,WAAQ,KAAa,OAAO,KAAK,KAAK;;MAG5B,KAAK,GAAoB;AACnC,SAAK,MAAM,cAAc,GAAG,IAAa;;GA/OtC;AAAA,GAAA,IAAA,uBACC,EAAA,CAAL,IADI,GACC,WAAA,SAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,UAAA,IACA,EAAA,CAAL,IAHI,GAGC,WAAA,eAAA,IACA,EAAA,CAAL,IAJI,GAIC,WAAA,YAAA,IACA,EAAA,CAAL,IALI,GAKC,WAAA,SAAA;AA8OR,GAAW;ACvPJ,IAAA,KAAA,qCAAwC,YAAY;EAApD,cATP;AASO,UAAA,GAAA;AAWC,SAAA,8BAA8B;AAC9B,SAAA,oBAAoB;AACpB,SAAA,8BAA8B;;MAEhC,KAAa;AACf,WAAO,KAAK,QAAQ;;MAGlB,QAAgB;AAClB,WAAO,KAAK,WAAW;;MAGrB,eAAuB;AACzB,WAAO,GAAY,KAAK,WAAW;;MAGjC,sBAA+B;AACjC,WAAO,KAAK,4BAA4B;;MAGtC,OAAe;AACjB,WAAO,KAAK,UAAU;;MAGpB,UAAU,GAAuD;AASnE,QARA,KAAK,SACL,KAAK,mBAED,GAAS,MACX,MAAK,8BAA8B,OACnC,KAAK,QAAQ,QAAQ,EAAU,KAG7B,GAAY,IAAY;AAC1B,UAAM,IAAc,GAAiB,EAAU;AAE3C,SAAmB,KACrB,MAAK,gBAAgB,cAAc,aACnC,KAAK,yBAAyB,cAAc,eACnC,IAAgB,MAAc,GAAgB,MAAc,GAAgB,OACrF,MAAK,gBAAgB,cAAc,aACnC,KAAK,yBAAyB,cAAc,cAG9C,KAAK,oBAAoB,OACzB,KAAK,WAAW,QAAQ,EAAU,OAClC,KAAK,oBACL,KAAK,YAAY,QAAQ,EAAU,OACnC,KAAK,iBAAiB,QAAQ,EAAY,YAC1C,KAAK,iBAAiB,cAAc,EAAY,YAChD,KAAK,4BACL,KAAK,4BAA4B,UAAU,EAAU,iBAAiB;;AAGpE,OAAY,MACd,MAAK,8BAA8B,OACnC,KAAK,UAAU,QAAQ,EAAU;;EAI7B,QAAc;AACpB,SAAK,QAAQ,QAAQ,IACrB,KAAK,WAAW,QAAQ,IACxB,KAAK,YAAY,QAAQ,IACzB,KAAK,iBAAiB,QAAQ,IAC9B,KAAK,4BAA4B,UAAU,OAC3C,KAAK,UAAU,QAAQ;;EAGzB,kBAAwB;AACtB,SAAK,8BAA8B,MACnC,KAAK,oBAAoB,MACzB,KAAK,8BAA8B;;EAGrC,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UAEL,KAAK,iBAAiB,uBAAuB,KAAK,cAClD,KAAK,iBAAiB,uBAAuB,KAAK,cAClD,KAAK,QAAQ,iBAAiB,UAAU,KAAK,SAAS,KAAK,QAC3D,KAAK,WAAW,iBAAiB,UAAU,KAAK,iBAAiB,KAAK,QACtE,KAAK,iBAAiB,iBAAiB,UAAU,KAAK,kBAAkB,KAAK,QAC7E,KAAK,4BAA4B,iBAAiB,UAAU,KAAK,oBAAoB,KAAK,QAC1F,KAAK,UAAU,iBAAiB,UAAU,KAAK,WAAW,KAAK;;EAGjE,SAAe;AACb,OAAO,kBAAqB,KAAK;;EAG3B,YAAY,GAAoB;AACtC,QAAM,IAAc,EAAM;AAC1B,QAAI,CAAC,GAAqB;AAAc,YAAM,IAAI,MAAM,GAAG;AAE3D,SAAK,WAAW,QAAQ,EAAY,OACpC,KAAK,cAAc,IAAI,MAAM,oCAAoC,EAAC,SAAS;;EAGrE,YAAY,GAAoB;AACtC,QAAM,IAAc,EAAM;AAC1B,QAAI,CAAC,GAAqB;AAAc,YAAM,IAAI,MAAM,GAAG;AAE3D,SAAK,WAAW,QAAQ,EAAY,OACpC,KAAK,cAAc,IAAI,MAAM,oCAAoC,EAAC,SAAS;;EAGrE,mBAAyB;AAC/B,SAAK,WAAW,aAAa,uBAAuB,KAAK,WAAW;;EAG9D,qBAA2B;AACjC,QAAM,IAAQ,KAAK,WAAW,aAAa;AAC3C,OAAK,QAAQ,IAEb,KAAK,WAAW,QAAQ;;EAGlB,WAAiB;AACvB,SAAK,cAAc,IAAI,MAAM,iCAAiC,EAAC,SAAS;;EAGlE,mBAAyB;AAC/B,QAAM,IAAQ,KAAK,WAAW;AAE9B,QAAI,GAAa,IAAQ;AACvB,UAAI,GACE,IAAc,GAAiB;AACrC,WAAK,iBAAiB,QAAQ,EAAY,YAC1C,KAAK,iBAAiB,cAAc,EAAY,YAChD,KAAK,4BAED,GAAgB,GAAO,cAEzB,KAAW,IADO,IAAc,WACH,KAC7B,KAAK,WAAW,QAAQ,KACf,GAAmB,GAAO,aAEnC,KAAW,GADO,IAAc,WACJ,KAC5B,KAAK,WAAW,QAAQ,KAExB,IAAW,GAEb,KAAK,oBACL,KAAK,YAAY,QAAQ,GACzB,KAAK,cAAc,IAAI,MAAM,oCAAoC,EAAC,SAAS;;AAE3E,WAAK;;EAID,aAAmB;AACzB,SAAK,cAAc,IAAI,MAAM,mCAAmC,EAAC,SAAS;;EAGpE,2BAAiC;AACvC,SAAK,iBAAiB,aAAa,uBAAuB,KAAK,iBAAiB;;EAG1E,6BAAmC;AACzC,QAAM,IAAQ,KAAK,iBAAiB,aAAa;AACjD,OAAK,QAAQ,IAEb,KAAK,iBAAiB,QAAQ,GAC9B,KAAK,iBAAiB,cAAc;;EAG9B,oBAA0B;AAChC,QAAM,IAAc,KAAK,iBAAiB;AAEtC,OAAU,MAAgB,SAAS,KAAe,IACpD,MAAK,iBAAiB,cAAc,GACpC,KAAK,YAAY,cAAc,SAAS,IACxC,KAAK,WAAW,QAAQ,KAAK,YAAY,SAEzC,KAAK;;EAID,sBAA4B;AAClC,SAAK,cAAc,IAAI,MAAM,oCAAoC,EAAC,SAAS;;GAjMxE;AAAA,GAAA,IAAA,8BACG,EAAA,CAAP,KADI,GACG,WAAA,WAAA,IACA,EAAA,CAAP,KAFI,GAEG,WAAA,mBAAA,IACA,EAAA,CAAP,KAHI,GAGG,WAAA,cAAA,IACA,EAAA,CAAP,KAJI,GAIG,WAAA,eAAA,IACA,EAAA,CAAP,KALI,GAKG,WAAA,oBAAA,IACA,EAAA,CAAP,KANI,GAMG,WAAA,4BAAA,IACA,EAAA,CAAP,KAPI,GAOG,WAAA,oBAAA,IACA,EAAA,CAAP,KARI,GAQG,WAAA,+BAAA,IACA,EAAA,CAAP,KATI,GASG,WAAA,aAAA,IAEF,EAAA,CAAL,IAXI,GAWC,WAAA,+BAAA,IACA,EAAA,CAAL,IAZI,GAYC,WAAA,qBAAA,IACA,EAAA,CAAL,IAbI,GAaC,WAAA,+BAAA;AAwLR,GAAW;ACzMJ,IAAA,KAAA,qCAAoC,YAAY;EAAhD,cALP;AAKO,UAAA,GAAA;AACC,SAAA,aAAa;AACb,SAAA,OAAO;AACP,SAAA,aAAa;AACb,SAAA,SAAS;AACT,SAAA,cAAc;AACd,SAAA,WAAW;;EAMjB,cAAc,GAAqD;AACjE,QAAM,IAAe,KAAK;AAE1B,aAAW,CAAC,GAAG,MAAS,OAAO,QAAQ,IAAa;AAClD,UAAM,KAAc,EAAa,SAAS;AAC1C,SAAK,QAAQ;AAEb,UAAM,KAAY,GAAQ,KAAK;AAE/B,SAAY,aAAa,uBAAuB,GAAU,KAAK,aAC/D,GAAY,aAAa,uBAAuB,GAAU,KAAK;AAE/D,UAAM,IAAY,GAAU;AAE5B,UADA,KAAK,oBAAoB,IAAa,IAClC,MAAc;AAAG;AAErB,UAAM,IAAY,GAAU,UAAU,KAAK,KAAM;AACjD,WAAK,gBAAgB,IAAa;;;EAItC,oBAA0B;AACpB,SAAK,eAAe,QACxB,MAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UACL,KAAK,qBAAqB,KAAK,eAE3B,KAAK,aAAa,wBACpB,MAAK,sCACL,KAAK;;EAID,oBAA0B;AAChC,SAAK,cACH,IAAI,MAAM,wBAAwB,EAChC,SAAS;;EAKf,yBAAyB,GAAc,GAAyB,GAA+B;AACzF,SAAK,eAAe,QACpB,MAAa,KAEb,MAAS,sBACX,KAAK;;EAID,qCAA2C;AACjD,QAAM,IAAU,EACd,MAAM,MACN,WAAW,CAAC,GAAG,QAEX,IAAW,GAAC,OAAyC;AACzD,eAAW,MAAQ,GAAS;AAC1B,YAAM,KAAQ,GAAK;AACf,WAAK,qBAAqB,MAC5B,IAAM,aACJ,gBACA,+EAEF,KAAK,oCACI,GAAK,sBAAsB,KACpC,GAAM,aAAa,gBAAgB;;OAVxB,aAcX,IAAW,IAAI,qBAAqB,GAAU;AACpD,aAAW,KAAQ,KAAK;AACtB,QAAS,QAAQ;;EAIb,iCAAuC;AAC7C,SAAK,cACH,IAAI,YAAY,qCAAqC,EACnD,QAAQ,KAAK,wBACb,SAAS;;MAKH,yBAAmC;AAC7C,QAAM,IAAS,KAAK,KAAK;AAEzB,WAAO,KAAK,oBAAoB,IAAI,OAAQ,SAAS,EAAK,aAAa,cAAe,OAAO,OAAQ,IAAO;;MAG1G,sBAAqC;AACvC,QAAM,IAAS,KAAK,yBAAyB,IAC3C,OAAQ,MAAM,KAAK,EAAK,iBAAiB;AAE3C,WAAQ,GAAqB,OAAO,GAAG;;EAGzC,SAAe;AACb,OACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAipBmB,KAAK,0BACxB,KAAK;AAGP,aAAW,CAAC,GAAG,MAAU,MAAK,aAAa,sBAAsB,OAAO,MAAM,KAAK;AACjF,WAAK,oBAAoB,KAAK,aAAa,IAAI,WAAW;AAE5D,aAAW,CAAC,GAAG,MAAU,MAAK,aAAa,kBAAkB,IAAI,MAAM,KAAK,WAAW;AACrF,UAAM,IAAc,KAAK,aAAa,IAChC,IAAQ,IAAO,WAAW,KAAQ;AACxC,WAAK,gBAAgB,GAAa;AAClC,UAAM,KAAqB,EAAa,cAAc;AACtD,SAAoB,MAAM,YAAY,UAAU,CAAC;;;EAI7C,oBAAoB,GAA6C,GAAyB;AAEhG,QADI,MAAgB,QAChB,MAAgB;AAAW;AAE/B,QAAI,IAAa,KAAK,MAAM,IAAY;AACxC,QAAa,IAAa,KAAM,MAAe,IAAI,IAAI,KAAM,KAAK,MAAM,IAAa,MAAM,IAC3F,IAAa,IAAa,KAE1B,EAAY,aAAa,kBAAkB,EAAU,aACrD,EAAY,aAAa,0BAA0B,EAAW;;EAGxD,gBAAgB,GAA6C,GAAqB;AAExF,QADI,MAAgB,QAChB,MAAgB;AAAW;AAE/B,QAAI,IAAe,KAAK,MAAM,IAAQ,MAAM;AACxC,QAAe,KAAG,KAAe,MAAM,IAE3C,EAAY,aAAa,cAAc,EAAM,aAC7C,EAAY,aAAa,sBAAsB,EAAa;;MAGlD,mBAAmC;AAC7C,WAAI,KAAK,aAAa,uBAA6B,KAAK,gBAAgB,MAEjE,IAAO,KAAK,gBAAgB,MAAM,KAAK,gBAAgB;;EAGxD,gBAAgB,GAA6B;AACnD,WAAO;;kBAEO;;;;;;;;EASR,gBAAgB,GAAmC;AACzD,QAAI,IAAc,KAEZ,IAAS,KAAK,iBAClB,CAAC,GAAG,MAAM,KAAK,GAAW,SACzB,OACQ,KAAK,iBAAiB,GAAQ,QAC5B,KAAK,iBAAiB,IAAQ,QAC5B,KAAK,iBAAiB,IAAO,OAC3B,KAAK,iBAAiB,GAAO,OAC3B,KAAK,iBAAiB,GAAO,OAC3B,KAAK,iBAAiB,SAOzC;AAGF,aAAW,KAAQ;AACjB,UAAc,IAAO,KAAe;AAGtC,WAAO;;EAGD,iBACN,GACA,GACA,IAAe,EAAK,SAAS,GACX;AASlB,WARmB,GAAA,CAAC,IAAmB,KAAY,MAC1C,GAAQ,OACb,CAAC,GAAiB,GAAgB,MAChC,IAAQ,KAAY,IAAM,CAAC,GAAG,GAAK,GAAQ,MAAM,GAAO,IAAQ,MAClE,KAJe,cAQD,GAAM,GAAM,IAAI,QAAQ;AACxC,UAAI,KAAQ;AAEZ,UAAI;AACF,iBAAW,KAAY,EAAM;AAC3B,eAAQ,IAAO,MAAS;;AAG1B,iBAAW,KAAO;AAChB,eAAQ,IAAO,MAAS,KAAK,gBAAgB;AAIjD,aAAI,MAAS,KACJ,wCAA2C;YAC9C;kBAGG,wCAA2C,MAAS;;;EAKzD,qBAAqB,GAAmC;AAC9D,QAAM,IAAiB,GAAM;AAE7B,OAAgB,GAAgB,EAC9B,WAAW,MACX,WAAW,OACX,OAAO,KAAa,IACpB,OAAO,GACP,OAAO;;EAIX,gBAAgB,GAAyB;AACvC,QAAI,KAAK,YAAY;AAAM;AAE3B,QAAM,IAAgB,EAAM,QACtB,IAAM,KAAK,WAAW,IACtB,IAAc,EAAc,aAAa,wBACzC,KAAc,EAAc,aAAa,wBACzC,KAAgB,EAAc,aAAa,mBAC3C,IAAY,EAAc,aAAa,eAEzC;AAEA,UAAgB,QAAQ,OAAgB,OAC1C,IAAY,GAAQ,OAEpB,IAAY,IAAI,GAAQ,WAAW,IAAc,WAAW;AAG9D,QAAI;AAEA,UAAiB,WAAW,QAAmB,IACjD,IAAQ,IAER,IAAQ,IAAY,WAAW,KAAa,GAG9C,KAAK,2BACH,KAAK,QAAS,SACd,GACA,GACA,GACA,KAAgB,WAAW,MAAiB,GAC5C,GACA,KAAK;;EAID,2BACN,GACA,GACA,GACA,GACA,IACA,IACA,GACM;AACS,MAAmC,OAC5C,WAAW,KAAK,aAAa,GAAW,GAAK,GAAW,IAAW,IAAO;;EAG1E,aACN,GACA,GACA,GACA,GACA,IACA,IACQ;AACR,QAAM,IAAc,EAAU,cAAc,uCACtC,IAAe,EAAU,cAAc,wCACvC,IAAkB,EAAU,cAAc,2CAC1C,KAAkB,EAAU,cAAc,2CAC1C,KAAgB,EAAU,cAAc,wCACxC,KAAU,EAAU,cAAc;AAEpC,SACF,GAAY,cAAc,EAAI,SAAS,GAAG,SAAS,IAAQ,OAGzD,KACF,GAAa,cAAc,EAAI,aAG7B,KACF,GAAgB,cAAc,KAAK,YAAY,EAAU,MAAM,KAG7D,MACF,IAAgB,cAAc,GAAG,KAAK,YAAY,EAAU,MAAM,QAGhE,MACF,IAAc,cAAc,GAAG,KAAK,YAAY,IAAY,IAAY,KAAK,QAG3E,MACF,IAAQ,cAAc,GAAG,KAAK,YAAY,IAAO;AAGnD,QAAM,KAAM,SAAS,cAAc;AACnC,WAAA,GAAI,YAAY,EAAU,UAAU,QAG7B,GAAI;;MAGD,UAAsC;AAChD,WAAO,SAAS,eAAe;;EAGzB,YAAY,GAAe,GAAmB;AACpD,WAAQ,MAAS,IAAI,MAAM,MAAM,EAAM,QAAQ;;EAGzC,WAAW,GAAyB;AAC1C,QAAM,IAAU,EAAG,aAAa;AAEhC,WAAO,SAAS;;GAh/Bb;AAAA,GAAA,IAAA,0BACC,EAAA,CAAL,IADI,GACC,WAAA,cAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,QAAA,IACA,EAAA,CAAL,IAHI,GAGC,WAAA,cAAA,IACA,EAAA,CAAL,IAJI,GAIC,WAAA,UAAA,IACA,EAAA,CAAL,IALI,GAKC,WAAA,eAAA,IACA,EAAA,CAAL,IANI,GAMC,WAAA,YAAA,IAEG,EAAA,CAAR,KARI,GAQI,WAAA,gBAAA,IACA,EAAA,CAAR,KATI,GASI,WAAA,qBAAA,IACA,EAAA,CAAR,KAVI,GAUI,WAAA,4BAAA;AA0+BX,GAAW;AAAA,IAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/+BJ,IAAA,KAAA,qCAAsC,YAAY;EAAlD,cAVP;AAUO,UAAA,GAAA;AACC,SAAA,UAAU;AACV,SAAA,QAAQ;AAKN,SAAA,0BAA0B,GAChC,EACE,IAAI,sBACJ,SAAS,WACT,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,QAAQ,MAAM,YACvB,EAAC,QAAQ,WAAW,MAAM,kBAG9B,MAAM,EACJ,IAAI,EACF,OAAO,EACL,QAAQ,WACR,SAAS,CAAC,UAAU,kBAAkB,6BAI5C,SAAS,EACP,IAAI,EACF,QAAQ,EACN,QAAQ,QACR,SAAS,CAAC,8BAMpB,EACE,SAAS,EACP,iBAAiB,MAAM;AACrB,WAAK,UAAU;OAEjB,gBAAgB,MAAM;AACpB,WAAK,UAAU;OAEjB,QAAQ,CAAC,GAAU,MAAU;AAC3B,UAAI,EAAM,SAAS;AAAS;AACxB,WAAK,UAAQ,KAAK,OAAO;AAE7B,UAAM,IAAY,SAAS,cAAc;AACzC,QAAU,KAAK;AAEf,UAAM,IAAW,KAAK,IAAI,KAAK,aAAa,KAAK,eAC3C,KAAS,IAAW,GACpB,KAAO,KAAK,yBACZ,IAAO,GAAK,OAAO,OAAO,aAC1B,IAAM,GAAK,MAAM,OAAO;AAE9B,QAAU,aAAa,QAAQ,WAC/B,EAAU,aAAa,eAAe,8BACtC,EAAU,MAAM,QAAQ,EAAU,MAAM,SAAS,GAAG,OACpD,EAAU,MAAM,OAAO,GAAG,EAAM,UAAW,KAAO,SAClD,EAAU,MAAM,MAAM,GAAG,EAAM,UAAW,KAAM,SAEhD,KAAK,KAAK,YAAY;OAExB,oBAAoB,MAAM;AACxB,WAAK,cAAc,IAAI,MAAM,4BAA4B,EAAC,SAAS;SAGvE,QAAQ,EACN,QAAQ,MAAM,CAAC,KAAK,SACpB,WAAW,MAAM,KAAK;;EAO5B,oBAA0B;AACxB,SAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UAEL,KAAK,0BAA0B,GAAU,KAAK,yBAC3C,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,uBAAuB,GAAS,EAAM;OAGrD,SAEH,KAAK,iBAAiB,SAAS,KAAK;;EAGtC,yBAAyB,GAAc,GAAyB,GAA+B;AACzF,UAAa,KAEb,MAAS,kBAAkB,MAAa,QAC1C,KAAK,wBAAwB,KAAK,EAAC,MAAM;;EAI7C,SAAe;AACb,OACE;;;;;;;;;;;;;;;;;;;;;;;;2EAwBqE,KAAK,cAAc,KAAK,sBAC7F,KAAK;;EAID,iBAAiB,GAAyB;AAChD,SAAK,wBAAwB,KAAK,EAAC,MAAM,SAAS,SAAS,EAAM,SAAS,SAAS,EAAM;;MAG/E,aAA6B;AACvC,WAAO,EAAM,CAAC;;MAGJ,eAA+B;AACzC,WAAO,EAAM,CAAC;;GA9IX;AAAA,GAAA,IAAA,4BACC,EAAA,CAAL,IADI,GACC,WAAA,WAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,SAAA,IAEE,EAAA,CAAP,KAJI,GAIG,WAAA,QAAA,IACA,EAAA,CAAP,KALI,GAKG,WAAA,UAAA;AA6IV,GAAW;ACxJJ,IAAA,KAAA,qCAAkC,YAAY;EAA9C,cAJP;AAIO,UAAA,GAAA;AACC,SAAA,UAAU;AACV,SAAA,YAAY;;EAElB,WAAiB;AACf,SAAK,YAAY;;EAGnB,oBAA0B;AACxB,SAAK,aAAa,EAAC,MAAM,WACzB,KAAK;;EAGP,SAAe;AACb,OACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6EA,KAAK;;GA5FJ;AAAA,GAAA,IAAA,wBACC,EAAA,CAAL,IADI,GACC,WAAA,WAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,aAAA,IAFD,KAAA,EAAA,CADN,KACM;ACCP,IAAA,KAAqB,GAAA,MAAA;AAAA,IAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGd,IAAM,KAA2B,GAAC,OAClB,KAAQ,QAAQ,aAAe,IADd;AAAjC,IAYA,KAAA,qCAAqC,YAAY;EAAjD,cApBP;AAoBO,UAAA,GAAA;AACC,SAAA,gBAAgB;AAChB,SAAA,mBAAmB;AACnB,SAAA,oBAAoB;AACpB,SAAA,aAAa;AACb,SAAA,gBAAgB;AAChB,SAAA,SAAS;AACT,SAAA,QAAQ;AAEN,SAAA,yBAAyB,GAC/B,EACE,IAAI,oBACJ,SAAS,SACT,QAAQ,EACN,OAAO,EACL,IAAI,EACF,gBAAgB,EACd,QAAQ,YACR,SAAS,CAAC,oBAEZ,gBAAgB,EACd,QAAQ,WACR,SAAS,CAAC,oBAEZ,eAAe,EACb,QAAQ,YACR,SAAS,CAAC,mBAEZ,kBAAkB,EAChB,QAAQ,SACR,SAAS,CAAC,mBAAmB,uCAInC,SAAS,EACP,IAAI,EACF,kBAAkB,EAChB,QAAQ,SACR,SAAS,CAAC,sBAEZ,gBAAgB,EACd,QAAQ,YACR,SAAS,CAAC,wBAIhB,UAAU,EACR,OAAO,yBACP,IAAI,EACF,kBAAkB,EAChB,QAAQ,SACR,SAAS,CAAC,sBAEZ,kBAAkB,EAChB,QAAQ,SACR,SAAS,CAAC,mBAAmB,2CAMvC,EACE,SAAS,EACP,eAAe,MAAM;AACnB,SAAK,QAAQ,KAAK,YAElB,KAAK,gBAAgB,KAAK,UAAU,QAAQ,qBAC5C,KAAK,cAAc,IAAI,MAAM,yBAAyB,EAAC,SAAS;OAElE,iBAAiB,MAAM;AACrB,WAAK,gBAAgB,IACrB,KAAK,cAAc,IAAI,MAAM,2BAA2B,EAAC,SAAS;OAEpE,eAAe,MAAM;AACnB,WAAK,cAAc,IAAI,MAAM,yBAAyB,EAAC,SAAS;OAElE,cAAc,CAAC,GAAU,MAAU;AAC7B,QAAM,SAAS,mBAEnB,MAAK,OAAO,EAAM,YAClB,KAAK,gBAAgB,EAAM,UAAU,QAAQ,qBAC7C,EAAM,UAAU,UAAU;OAE5B,eAAe,CAAC,GAAU,MAAU;AAC9B,QAAM,SAAS,oBAEnB,GAAM,UAAU,UAAU;OAE5B,iBAAiB,CAAC,GAAU,MAAU;AAChC,QAAM,SAAS,sBAEnB,MAAK,gBAAgB,IACrB,KAAK,YAAY,EAAM;OAEzB,uBAAuB,MAAM;AAC3B,WAAK,cAAc,IAAI,MAAM,2BAA2B,EAAC,SAAS;OAEpE,8BAA8B,MAAM;AAClC,WAAK,cAAc,IAAI,MAAM,qCAAqC,EAAC,SAAS;;;MAQhF,gBAAyB;AAC3B,WAAO,CAAC,KAAK,cAAc,CAAC,KAAK;;MAG/B,WAAoB;AACtB,WAAO,KAAK,kBAAkB;;MAG5B,YAA8B;AAEhC,QAAM,IADW,MAAM,KAAK,KAAK,UACL,OAAQ,OAA4B,GAAY;AAE5E,YAAQ,EAAW;WACZ;AACH,eAAO;WACJ;AACH,eAAO,EAAW;;AAElB,cAAM,IAAI,MAAM;;;MAIlB,aAAqC;AACvC,QAAM,IAAO,KAAK;AAElB,WAAO,EACL,GAAG,OAAO,cAAc,EAAK,OAAO,KAAK,cAAc,GACvD,GAAG,OAAO,cAAc,EAAK,MAAM,KAAK,eAAe;;EAI3D,SAA0B;AACxB,QAAM,IAAY,KAAK;AAEvB,WAAI,MAAc,OACT,MAEA,EAAU;;EAIrB,oBAA0B;AACxB,SAAK,yBAAyB,GAAU,KAAK,wBAC1C,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,qBAAqB,EAAM;OAG1C,SAEH,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UACD,KAAK,cAAc,QAAM,KAAK,cAAc,KAAK,YACrD,KAAK,gBAEL,KAAK,iBAAiB,kBAAkB,KAAK,gBAC7C,KAAK,iBAAiB,oBAAoB,KAAK,kBAC/C,KAAK,iBAAiB,0BAA0B,KAAK,gBACrD,KAAK,iBAAiB,oBAAoB,KAAK;;EAGjD,SAAe;AACb,OACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCA6BgC,KAAK,iBACrC,KAAK;;EAIT,IAAI,GAA4B;AAC9B,SAAK,uBAAuB,KAAK,EAAC,MAAM,iBAAiB,WAAA;;EAGnD,cAAc,GAA4B;AAChD,SAAK,uBAAuB,KAAK,EAAC,MAAM,kBAAkB,WAAA;;EAGpD,eAAqB;AACvB,SAAK,cAAc,QACrB,MAAK,gBAAgB,KAAK,UAAU,QAAQ,sBAG9C,IAAA,GAAA,SAAS,MAAM,SAAS,EACtB,QAAQ,oBACR,SAAS;;EAIL,gBAAsB;AAC5B,SAAK,uBAAuB,KAAK,EAAC,MAAM;;EAGlC,kBAAwB;AAC9B,SAAK,uBAAuB,KAAK,EAAC,MAAM;;EAGlC,gBAAsB;AAC5B,SAAK,uBAAuB,KAAK,EAAC,MAAM;;EAGlC,gBAAgB,GAAoB;AAC1C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAChD,SAAK,uBAAuB,KAAK,EAAC,MAAM,oBAAoB,WAAA;;MAGlD,UAA0B;AACpC,WAAO,EAAM,CAAC;;GAlPX;AAAA,GAAA,IAAA,2BACC,EAAA,CAAL,IADI,GACC,WAAA,iBAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,oBAAA,IACA,EAAA,CAAL,IAHI,GAGC,WAAA,qBAAA,IACA,EAAA,CAAL,IAJI,GAIC,WAAA,cAAA,IACA,EAAA,CAAL,IALI,GAKC,WAAA,iBAAA,IACA,EAAA,CAAL,IANI,GAMC,WAAA,UAAA,IACA,EAAA,CAAL,IAPI,GAOC,WAAA,SAAA;AA+OR,GAAW;AClNJ,IAAM,KAAuB,GAAC,OACd,KAAQ,QAAQ,aAAe,IADlB;AAA7B,IAyDD,KAAU,GAAA,CACd,GACA,MAEA,MAAM,KACJ,EAAM,OAAO,CAAC,GAAK,GAAS,GAAO,OAAS;AAC1C,MAAM,KAAM,EAAO,GAAS,GAAO,KAC7B,IAAO,EAAI,IAAI;AACrB,SAAI,IACF,EAAK,KAAK,KAEV,EAAI,IAAI,IAAK,CAAC,KAET;GACN,oBAAI,SAdK;AAzDT,IAsFA,KAAA,qCAAiC,YAAY;EAA7C,cA9IP;AA8IO,UAAA,GAAA;AACC,SAAA,SAAS;AACT,SAAA,aAAa;AACb,SAAA,SAAS;AACT,SAAA,OAAO;AACP,SAAA,QAAQ;AAEN,SAAA,qBAAqB,GAC3B,EACE,IAAI,gBACJ,SAAS,WACT,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,UAAU,MAAM,cACzB,EAAC,QAAQ,WAAW,MAAM,kBAG9B,QAAQ,EACN,MAAM,YACN,SAAS,WACT,IAAI,EACF,eAAe,EACb,QAAQ,UACR,SAAS,CAAC,mBAAmB,wBAE/B,iBAAiB,EACf,QAAQ,UACR,SAAS,CAAC,0BAEZ,UAAU,EACR,QAAQ,WACR,SAAS,CAAC,iBAGd,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,YAAY,MAAM,gBAC3B,EAAC,QAAQ,UAAU,MAAM,iBAG7B,UAAU,EACR,IAAI,EACF,UAAU,EACR,QAAQ,gBAId,QAAQ,EACN,IAAI,EACF,YAAY,EACV,QAAQ,sBAMlB,SAAS,EACP,MAAM,YACN,IAAI,EACF,eAAe,EACb,QAAQ,WACR,SAAS,CAAC,mBAAmB,wBAE/B,iBAAiB,EACf,QAAQ,WACR,SAAS,CAAC,0BAEZ,iBAAiB,EACf,QAAQ,WACR,SAAS,CAAC,sBAEZ,kBAAkB,EAChB,QAAQ,WACR,SAAS,CAAC,qCAGd,QAAQ,EACN,aAAa,EACX,MAAM,YACN,SAAS,WACT,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,YAAY,MAAM,gBAC3B,EAAC,QAAQ,UAAU,MAAM,iBAG7B,UAAU,EACR,IAAI,EACF,UAAU,EACR,QAAQ,gBAId,QAAQ,EACN,IAAI,EACF,YAAY,EACV,QAAQ,sBAMlB,gBAAgB,EACd,MAAM,YACN,SAAS,WACT,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,gBAAgB,MAAM,oBAC/B,EAAC,QAAQ,iBAAiB,MAAM,wBAGpC,cAAc,EACZ,IAAI,EACF,kBAAkB,EAChB,QAAQ,uBAId,eAAe,EACb,IAAI,EACF,gBAAgB,EACd,QAAQ,kCAU1B,EACE,SAAS,EACP,iBAAiB,CAAC,GAAU,MAAU;AACpC,UAAI,EAAM,SAAS,mBAAmB,EAAM,SAAS;AAAmB;AAExE,UAAM,IAAW,EAAM,UACjB,IAAM,KAAK,IAAI;AACrB,SAAK,QAAQ,EAAS,YAEtB,EAAS,UAAU,MAAM;OAE3B,mBAAmB,CAAC,GAAU,MAAU;AAClC,QAAM,SAAS,mBAEnB,KAAK,cACH,IAAI,YAAY,qBAAqB,EACnC,QAAQ,EAAC,UAAU,EAAM,YACzB,SAAS;OAIf,qBAAqB,CAAC,GAAU,MAAU;AACpC,QAAM,SAAS,qBAEnB,KAAK,cACH,IAAI,YAAY,uBAAuB,EACrC,QAAQ,EAAC,UAAU,EAAM,YACzB,SAAS;OAIf,8BAA8B,CAAC,GAAU,MAAU;AAC7C,QAAM,SAAS,sBAEnB,KAAK,cACH,IAAI,YAAY,iCAAiC,EAC/C,QAAQ,EAAC,UAAU,EAAM,YACzB,SAAS;OAIf,UAAU,MAAM;AACd,WAAK,SAAS;SAGlB,QAAQ,EACN,UAAU,MACD,KAAK,QAEd,WAAW,MACF,CAAC,KAAK,QAEf,UAAU,MACD,KAAK,QAEd,YAAY,MACH,CAAC,KAAK,QAEf,gBAAgB,MACP,KAAK,YAEd,iBAAiB,MACR,CAAC,KAAK;;MAQjB,YAAoB;AACtB,WAAO,KAAK,UAAU;;MAGpB,YAAqB;AACvB,WAAI,KAAK,QAAQ,qBAAqB;;MAMpC,QAA6B;AAG/B,WAFc,KAAK,QAAQ;;EAK7B,oBAA0B;AACxB,SAAK,qBAAqB,GAAU,KAAK,oBACtC,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,iBAAiB,GAAS,EAAM;OAG/C,SAEH,KAAK,iBAAiB,cAAc,KAAK,0BACzC,KAAK,iBAAiB,cAAc,KAAK,0BACzC,KAAK,iBAAiB,SAAS,KAAK,0BACpC,KAAK,iBAAiB,yBAAyB,KAAK,eACpD,KAAK,iBAAiB,2BAA2B,KAAK,iBACtD,KAAK,iBAAiB,qCAAqC,KAAK,kBAChE,KAAK,iBAAiB,yBAAyB,KAAK,WACpD,KAAK,iBAAiB,2BAA2B,KAAK,iBAEtD,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,6BACL,KAAK;;EAGP,yBAAyB,GAAc,GAAyB,GAA+B;AAC7F,QAAI,MAAa,KAEb,OAAS,iBACP,OAAa,OACf,KAAK,mBAAmB,KAAK,EAAC,MAAM,gBAEpC,KAAK,mBAAmB,KAAK,EAAC,MAAM,kBAIpC,MAAS,qBACP,OAAa,OACf,KAAK,mBAAmB,KAAK,EAAC,MAAM,sBAEpC,KAAK,mBAAmB,KAAK,EAAC,MAAM,wBAIpC,MAAS;AACX,eAAW,KAAQ,KAAK;AAClB,cAAa,OACf,EAAK,SAAS,OAEd,EAAK,SAAS;;EAMtB,SAAe;AACb,OAAO,kBAAqB,KAAK,aACjC,KAAK;;EAGP,0BAA0B,GAAyC;AACjE,aAAW,KAAQ,KAAK;AACtB,QAAK,aAAa,OAClB,EAAK,gBAAgB;AAGvB,QAAM,IAAmB,KAAK,sBACxB,IAAwB,KAAK,sBAAsB;AACzD,aAAW,KAAQ;AACb,SAAe,EAAK,cAAY,GAAK,UAAU,WAAW;AAMhE,QAHA,KAAK,sBAAsB,IAC3B,KAAK,4BAA4B,IAE7B,EAAiB,WAAW,GAChC;AAAA,UAAI,EAAiB,WAAW,KAAK,EAAsB,WAAW,GAAG;AACnD,UAAiB,GAAG,UAC5B;AACZ;;AAGE,QAAsB,WAAW,IACnC,KAAK,gCAAgC,KAErC,KAAK,6BAA6B,IAGpC,KAAK,8BAA8B;;;EAG7B,sBAAsB,GAAyC;AACrE,QAAM,IAAc,KAAA,OAAA,SAAA,EAAiB,aAC/B,IAAgB,KAAK;AAE3B,QAAI,EAAc,WAAW,KAAK;AAChC,eAAW,KAAQ;AACA,UAAK,UACb;SAEN;AACL,eAAW,MAAQ;AACA,WAAK,UACb,UACT,GAAK,aAAa,EAAc,KAAK,OAAQ,KAAK,IAAI,KAAQ,KAAK,IAAI,MACvE,GAAK,gBAAgB,EAAc,KAAK,OAAQ,KAAK,IAAI,KAAQ,KAAK,IAAI;AAG5E,UAAM,IAAW,EAAc,IAAI,QAAQ,KAAK,IAAI;AACpD,eAAW,MAAY,KAAK,eAAe;AACzC,YAAM,KAAS,KAAK,IAAI,GAAG,IACrB,IAAS,KAAK,IAAI,GAAG;AACvB,aAAS,KAAK,IAAI,OAAa,KAAK,IAAI,MAAY,KACtD,IAAS,aAAa,MACtB,GAAS,gBAAgB;;;;EAMzB,4BAA4B,GAAyC;AAC3E,QAAI,KAAA,OAAA,SAAA,EAAiB;AAAmB;AAExC,QAAM,IAAiB,KAAK;AAE5B,aAAW,KAAiB,GAAgB;AAC1C,UAAM,IAAY,EAAc;AAEhC,UADI,EAAU,UAAU,MACpB,MAAoB,UAAa,EAAgB,6BAA6B;AAAG;AAErF,UAAI,KAAqB,EACtB,OAAO,QAAQ;AACd,YAAI,CAAC,GAAmB,GAAK;AAAY,gBAAM,IAAI,MAAM,GAAG,GAAK;AACjE,eAAO,EAAU,UAAU,GAAK,UAAU;SAE3C,IAAI,QAAQ,KAAK,IAAI;AACpB,YAAoB,UAAa,EAAgB,2BAA2B,KAC9E,MAAqB,GAAmB,MAAM,GAAG,EAAgB,4BAG/D,CAAA,CAAC,GAAmB,SAAS,KAAK,IAAI,OAE1C,GAAc,aAAa,GAAmB,KAAK,QAAQ,KAAO,KAAK,IAAI,KAC3E,EAAc,gBAAgB,GAAmB,KAAK,QAAQ,KAAO,KAAK,IAAI;;AAGhF,aAAW,KAAY,KAAK,eAAe;AAEzC,UAAM,KAD2B,KAAK,mBAAmB,OAAO,OAAQ,EAAK,cAAc,EAAK,eAChD,IAAI,OAAQ,KAAK,IAAI,KAC/D,KAAS,KAAK,IAAI,GAAG,KACrB,IAAS,KAAK,IAAI,GAAG;AAEvB,WAAS,KAAK,IAAI,MAAa,KAAK,IAAI,KAAY,KACtD,GAAS,aAAa,MACtB,EAAS,gBAAgB;;;EAKvB,gCAAgC,GAAyC;AAC/E,QAAM,IAAuB,KAAK,sBAC9B,IAAc,EAAqB,IAAI,QAAQ,KAAK,IAAI,MACxD,IAAa;AAEb,UAAoB,UAClB,GAAgB,iCAAiC,IACnD,IAAc,KACL,EAAgB,+BAA+B,KACxD,KAAc,EAAY,MAAM,GAAG,EAAgB;AAIvD,aAAW,MAAQ,GAAsB;AACvC,WAAc;AAEd,UAAM,KAAc,GAAK;AAErB,MAAA,MAAA,OAAA,SAAA,EAAiB,0BAGnB,MAAoB,UACnB,GAAgB,iCAAiC,KAC/C,EAAgB,+BAA+B,KAC9C,IAAa,EAAgB,gCALjC,GAAY,YASZ,IAAY,UACZ,GAAK,aAAa,EAAY,KAAK,OAC1B,KAAK,IAAI,MAAQ,IAE1B,GAAK,gBAAgB,EAAY,KAAK,OAC7B,KAAK,IAAI,MAAQ;;;EAMxB,6BAA6B,GAAyC;AAC5E,QAAM,IAAwB,KAAK,sBAAsB,IACnD,IAAmB,KAAK,sBACxB,IAA6B,CAAC,GAAG,IAAI,IAAI,EAAsB,IAAI,QAAQ,GAAK,kBAChF,KAAsB,KAAK,wBAAwB,GAAiB,IACpE,KAAiB,EAAiB,IAAI,QAAM,KAAK,IAAI,MACrD,IACJ,OAAwB,OAAO,KAAiB,GAAe,MAAM,GAAG,KACpE,IAAmB,EAAsB,IAAI,QAAM,KAAK,IAAI,MAC5D,IAAqB,EAAkB,OAAO;AAEpD,aAAW,CAAC,IAAG,OAAS,OAAO,QAAQ,IAAmB;AACxD,UAAM,KAAc,GAAK;AAEzB,SAAK,gBAAgB,EAAmB,KAAK,QACpC,KAAK,IAAI,MAAQ,KAE1B,GAAK,aAAa,EAAmB,KAAK,QACjC,KAAK,IAAI,MAAQ,KAGtB,OAAwB,QAAS,OAAwB,QAAQ,SAAS,MAAK,KACjF,GAAY,WAEZ,IAAK,aAAa,KAAK,IAAI,GAAG,KAAsB,KAAK,IAAI,KAC7D,GAAY;;AAIhB,aAAW,MAAQ,GAAuB;AACxC,UAAI,CAAC,GAAe,GAAK;AAAY,cAAM,IAAI,MAAM,GAAG,GAAK;AAE7D,SAAK,UAAU,WAAW,KAAK,YAAY,IAAM,IAAgB,IACjE,GAAK,aAAa,EAAmB,KAAK,QACjC,KAAQ,KAAK,IAAI,MAE1B,GAAK,gBAAgB,EAAmB,KAAK,QACpC,KAAQ,KAAK,IAAI;;;EAKtB,8BAA8B,GAAyC;AAC7E,QAAM,IAAwB,KAAK,sBAAsB,IACnD,IAAoB,KAAK,qBAC5B,OAAO,OAAQ,GAAqB,EAAK,cAAc,CAAC,EAAK,UAAU,UACvE,IAAI,OAAQ,KAAK,IAAI,KAClB,IAAmB,EAAsB,IAAI,OAAM,KAAK,IAAI,KAC5D,KAAsB,EAAkB,OAAO,IAE/C,KAAS,KAAK,IAAI,GAAG,KACrB,IAAS,KAAK,IAAI,GAAG;AAE3B,aAAW,KAAQ,KAAK;AAClB,WAAS,KAAK,IAAI,MAAS,KAAK,IAAI,KAAQ,KAC9C,GAAK,aAAa,MAClB,EAAK,gBAAgB;;EAKnB,YACN,GACA,GACA,GACU;AACV,QAAI,IAAO;AAEX,WAAI,KACE,GAAgB,oBAAoB,KAAK,EAAS,kBAAkB,WACtE,IAAO,EAAe,MAAM,GAAG,EAAgB,qBACtC,EAAgB,sBAAsB,KAAK,EAAS,kBAAkB,WAC/E,IAAO,EAAe,MAAM,GAAG,EAAgB,uBACtC,EAAgB,oBAAoB,KAAK,EAAS,kBAAkB,WAC7E,IAAO,EAAe,MAAM,GAAG,EAAgB,qBACtC,EAAgB,oBAAoB,KAAK,EAAS,kBAAkB,WAC7E,IAAO,EAAe,MAAM,GAAG,EAAgB,qBACtC,EAAgB,wBAAwB,KAAK,EAAS,kBAAkB,eACjF,IAAO,EAAe,MAAM,GAAG,EAAgB,yBACtC,EAAgB,oBAAoB,KAAK,EAAS,kBAAkB,WAC7E,IAAO,EAAe,MAAM,GAAG,EAAgB,qBACtC,EAAgB,uBAAuB,KAAK,EAAS,kBAAkB,cAChF,IAAO,EAAe,MAAM,GAAG,EAAgB,wBACtC,EAAgB,qBAAqB,KAAK,EAAS,kBAAkB,YAC9E,IAAO,EAAe,MAAM,GAAG,EAAgB,sBACtC,EAAgB,qBAAqB,KAAK,EAAS,kBAAkB,YAC9E,IAAO,EAAe,MAAM,GAAG,EAAgB,sBACtC,EAAgB,qBAAqB,KAAK,EAAS,kBAAkB,YAC9E,IAAO,EAAe,MAAM,GAAG,EAAgB,sBACtC,EAAgB,uBAAuB,KAAK,EAAS,kBAAkB,eAChF,KAAO,EAAe,MAAM,GAAG,EAAgB,yBAI5C;;EAGT,IAAI,GAA0C;AAC5C,QAAM,IAAM,KAAK,UAAU,QAAQ;AACnC,WAAA,GAAK,KAAK,MAAQ,IAAI,gCAEf;;MAGL,UAAmB;AACrB,WAAI,KAAK,OAAa,QACf,KAAK,UAAU,MAAM,OAAQ,CAAC,EAAK;;EAG5C,WAAW,GAA+C;AACxD,QAAM,IAAW,KAAK,UAAU;AAChC,WAAA,GAAK,QAAQ,IAEN;;MAGL,YAAsC;AACxC,WAAO,MAAM,KAAK,KAAK,iBAAiB;;MAGtC,gBAA0C;AAC5C,WAAO,KAAK,UAAU,OAAO,OAAQ,CAAC,EAAK;;MAGzC,eAAuC;AACzC,WAAO,KAAK,UAAU,KAAK,YAAY;;EAGzC,iBAAyC;AACvC,QAAM,IAAW,IAAI;AACrB,WAAA,EAAS,SAAS,KAAK,QACvB,KAAK,OAAO,IACL;;EAGT,gBAAgB,GAA4B;AAC1C,QAAM,IAAW,IAAI;AACrB,SAAK,OAAO,IACZ,EAAS,IAAI;;MAGH,oBAA8C;AACxD,WAAO,KAAK,UAAU,OAAO,OAAQ,EAAK,UAAU,OAAO,OAAQ,EAAK,kBAAkB;;MAGhF,qBAA+C;AACzD,WAAO,KAAK,UAAU,OAAO,OAAQ,EAAK,UAAU,OAAO,OAAQ,EAAK,kBAAkB;;MAGhF,uBAAiD;AAC3D,WAAO,KAAK,UAAU,OAAO,OAAQ,EAAK,YAAY,GAAqB,EAAK;;EAG1E,wBACN,GACA,GACe;AACf,QAAI,MAAU;AAAW,aAAO;AAEhC,QAAI,IAAa;AA+CjB,WA9CI,EAA2B,SAAS,aAAa,CAAC,EAAM,aAAa,EAAM,oBAAoB,KACjG,KAAa,EAAM,oBAEjB,EAA2B,SAAS,aAAa,CAAC,EAAM,eAAe,EAAM,sBAAsB,KACrG,KAAa,EAAM,sBAEjB,EAA2B,SAAS,aAAa,CAAC,EAAM,aAAa,EAAM,oBAAoB,KACjG,KAAa,EAAM,oBAEjB,EAA2B,SAAS,aAAa,CAAC,EAAM,aAAa,EAAM,oBAAoB,KACjG,KAAa,EAAM,oBAGnB,EAA2B,SAAS,iBACpC,CAAC,EAAM,iBACP,EAAM,wBAAwB,KAE9B,KAAa,EAAM,wBAEjB,EAA2B,SAAS,aAAa,CAAC,EAAM,aAAa,EAAM,oBAAoB,KACjG,KAAa,EAAM,oBAGnB,EAA2B,SAAS,gBACpC,CAAC,EAAM,gBACP,EAAM,uBAAuB,KAE7B,KAAa,EAAM,uBAEjB,EAA2B,SAAS,cAAc,CAAC,EAAM,cAAc,EAAM,qBAAqB,KACpG,KAAa,EAAM,qBAEjB,EAA2B,SAAS,cAAc,CAAC,EAAM,cAAc,EAAM,qBAAqB,KACpG,KAAa,EAAM,qBAEjB,EAA2B,SAAS,cAAc,CAAC,EAAM,cAAc,EAAM,qBAAqB,KACpG,KAAa,EAAM,qBAGnB,EAA2B,SAAS,gBACpC,CAAC,EAAM,gBACP,EAAM,uBAAuB,KAE7B,KAAa,EAAM,uBAGjB,MAAe,IAAU,OACtB;;EAGD,sBAAsB,GAAwE;AACpG,QAAI,IAAO,GACP,IAAO,GACP,IAAO,GACP,KAAO,GACP,KAAW,GACX,IAAO,GACP,IAAU,GACV,IAAQ,GACR,KAAQ,GACR,KAAQ;AAEZ,WAAO,KAAK,UACT,OAAO,QAAQ,GAAK,UACpB,OAAO,QAAQ,GAAe,GAAK,YACnC,OAAO,QACF,MAAoB,SAAkB,OAEtC,GAAe,GAAK,aACtB,MAAQ,GACJ,EAAgB,qBAAqB,KAAK,IAAO,EAAgB,mBAC5D,QAEF,CAAC,EAAgB,aAEtB,GAAe,GAAK,aACtB,MAAQ,GACJ,EAAgB,uBAAuB,KAAK,IAAO,EAAgB,qBAC9D,QAEF,CAAC,EAAgB,eAEtB,GAAe,GAAK,aACtB,MAAQ,GACJ,EAAgB,qBAAqB,KAAK,IAAO,EAAgB,mBAC5D,QAEF,CAAC,EAAgB,aAEtB,GAAe,GAAK,aACtB,OAAQ,GACJ,EAAgB,qBAAqB,KAAK,KAAO,EAAgB,mBAC5D,QAEF,CAAC,EAAgB,aAEtB,GAAmB,GAAK,aAC1B,OAAY,GACR,EAAgB,yBAAyB,KAAK,KAAW,EAAgB,uBACpE,QAEF,CAAC,EAAgB,iBAEtB,GAAe,GAAK,aACtB,MAAQ,GACJ,EAAgB,qBAAqB,KAAK,IAAO,EAAgB,mBAC5D,QAEF,CAAC,EAAgB,aAEtB,GAAkB,GAAK,aACzB,MAAW,GACP,EAAgB,wBAAwB,KAAK,IAAU,EAAgB,sBAClE,QAEF,CAAC,EAAgB,gBAEtB,GAAgB,GAAK,aACvB,MAAS,GACL,EAAgB,sBAAsB,KAAK,IAAQ,EAAgB,oBAC9D,QAEF,CAAC,EAAgB,cAEtB,GAAgB,GAAK,aACvB,OAAS,GACL,EAAgB,sBAAsB,KAAK,KAAQ,EAAgB,oBAC9D,QAEF,CAAC,EAAgB,cAEtB,GAAgB,GAAK,aACvB,OAAS,GACL,EAAgB,sBAAsB,KAAK,KAAQ,EAAgB,oBAC9D,QAEF,CAAC,EAAgB,cAEtB,GAAkB,GAAK,aAAmB,CAAC,EAAgB,eAExD;;EAIL,sBAA4B;AAClC,SAAK,cAAc,IAAI,MAAM,uBAAuB,EAAC,SAAS;;EAGxD,gBAAgB,GAAoB;AAC1C,QAAM,IAAW,EAAM;AACvB,SAAK,mBAAmB,KAAK,EAAC,MAAM,oBAAoB,UAAA;;EAGlD,0BAAgC;AACtC,SAAK,cAAc,IAAI,MAAM,2BAA2B,EAAC,SAAS;;EAG5D,0BAAgC;AACtC,SAAK,cAAc,IAAI,MAAM,2BAA2B,EAAC,SAAS;;EAG5D,wBAAwB,GAAyB;AACnD,OAAY,EAAM,WAEtB,KAAK,cAAc,IAAI,MAAM,sBAAsB,EAAC,SAAS;;EAGvD,aAAa,GAAoB;AACvC,QAAM,IAAW,EAAM;AACvB,SAAK,mBAAmB,KAAK,EAAC,MAAM,iBAAiB,UAAA;;EAG/C,eAAe,GAAoB;AACzC,QAAM,IAAW,EAAM;AACvB,SAAK,mBAAmB,KAAK,EAAC,MAAM,mBAAmB,UAAA;;EAGjD,WAAiB;AACvB,SAAK,mBAAmB,KAAK,EAAC,MAAM;;EAG9B,eAAe,GAAoB;AACzC,QAAM,IAAW,EAAM;AACvB,SAAK,mBAAmB,KAAK,EAAC,MAAM,mBAAmB,UAAA;;EAGzD,YAAmC;AACjC,QAAM,IAAwC;AAE9C,aAAW,CAAC,GAAO,MAAY,GAAQ,KAAK,YAAY,OAAM,EAAG;AAC/D,cAAQ;aACD,IAAc;AACjB,cAAM,IAAS;AACf,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAQ,OAAQ,EAAK;AAC9D,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAkC,EAAC,MAAM,IAAQ,SAAA;AACnD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAc;AACjB,cAAM,IAAS;AACf,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAQ,OAAQ,EAAK;AAC9D,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAkC,EAAC,MAAM,IAAQ,SAAA;AACnD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAc;AACjB,cAAM,IAAS;AACf,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAQ,OAAQ,EAAK;AAC9D,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAkC,EAAC,MAAM,IAAQ,SAAA;AACnD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAc;AACjB,cAAM,IAAS;AACf,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAQ,OAAQ,EAAK;AAC9D,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAkC,EAAC,MAAM,IAAQ,SAAA;AACnD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAkB;AACrB,cAAM,IAAa;AACnB,mBAAW,CAAC,IAAO,OAAmB,GAAQ,GAAY,OAAQ,EAAK;AACrE,qBAAW,CAAC,GAAO,MAAgB,GAAQ,IAAgB,OAAQ,EAAK;AACtE,uBAAW,CAAC,GAAa,OAAqB,GAAQ,GAAa,QAAQ,GAAK,SAAS,aAAa;AACpG,oBAAM,KAAQ,GAAiB,IACzB,KAAS,GAAM,eACf,KAAU,GAAiB,IAAI,OAAQ,EAAK,MAC5C,KAAsC,EAAC,MAAM,IAAQ,SAAA;AACvD,sBAAU,MAAI,IAAe,KAAK,IAClC,OAAU,MAAI,IAAe,QAAQ,KACrC,MAAgB,MAAI,IAAe,WAAW,GAAM,WACxD,EAAe,KAAK;;AAI1B;;aAEG,IAAc;AACjB,cAAM,IAAS;AACf,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAQ,OAAQ,EAAK;AAC9D,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAkC,EAAC,MAAM,IAAQ,SAAA;AACnD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAiB;AACpB,cAAM,IAAY;AAClB,mBAAW,CAAC,IAAO,OAAgB,GAAQ,GAAW,OAAQ,EAAK;AACjE,qBAAW,CAAC,GAAa,MAAqB,GAAQ,IAAa,OAAQ,EAAK,SAAS,aAAa;AACpG,kBAAM,IAAQ,EAAiB,IACzB,KAAS,EAAM,eACf,KAAU,EAAiB,IAAI,QAAQ,GAAK,MAC5C,KAAqC,EAAC,MAAM,IAAQ,SAAA;AACtD,qBAAU,MAAI,IAAe,KAAK,KAClC,MAAgB,MAAI,IAAe,WAAW,EAAM,WACxD,EAAe,KAAK;;AAGxB;;aAEG,IAAe;AAClB,cAAM,IAAU;AAChB,mBAAW,CAAC,IAAO,OAAmB,GAAQ,GAAS,OAAQ,EAAK;AAClE,qBAAW,CAAC,GAAO,MAAgB,GAAQ,IAAgB,OAAQ,EAAK;AACtE,uBAAW,CAAC,GAAa,OAAqB,GAAQ,GAAa,QAAQ,GAAK,SAAS,aAAa;AACpG,oBAAM,KAAQ,GAAiB,IACzB,KAAS,GAAM,eACf,KAAU,GAAiB,IAAI,OAAQ,EAAK,MAC5C,KAAmC,EAAC,MAAM,IAAQ,SAAA;AACpD,sBAAU,MAAI,IAAe,KAAK,IAClC,OAAU,MAAI,IAAe,QAAQ,KACrC,MAAgB,MAAI,IAAe,WAAW,GAAM,WACxD,EAAe,KAAK;;AAI1B;;aAEG,IAAe;AAClB,cAAM,IAAU;AAChB,mBAAW,CAAC,IAAO,OAAmB,GAAQ,GAAS,OAAQ,EAAK;AAClE,qBAAW,CAAC,GAAO,MAAgB,GAAQ,IAAgB,OAAQ,EAAK;AACtE,uBAAW,CAAC,GAAa,OAAqB,GAAQ,GAAa,QAAQ,GAAK,SAAS,aAAa;AACpG,oBAAM,KAAQ,GAAiB,IACzB,KAAS,GAAM,eACf,KAAU,GAAiB,IAAI,OAAQ,EAAK,MAC5C,KAAmC,EAAC,MAAM,IAAQ,SAAA;AACpD,sBAAU,MAAI,IAAe,KAAK,IAClC,OAAU,MAAI,IAAe,QAAQ,KACrC,MAAgB,MAAI,IAAe,WAAW,GAAM,WACxD,EAAe,KAAK;;AAI1B;;aAEG,IAAe;AAClB,cAAM,IAAU;AAChB,mBAAW,CAAC,IAAO,OAAmB,GAAQ,GAAS,OAAQ,EAAK;AAClE,qBAAW,CAAC,GAAO,MAAgB,GAAQ,IAAgB,OAAQ,EAAK;AACtE,uBAAW,CAAC,GAAa,OAAqB,GAAQ,GAAa,QAAQ,GAAK,SAAS,aAAa;AACpG,oBAAM,KAAQ,GAAiB,IACzB,KAAS,GAAM,eACf,KAAU,GAAiB,IAAI,OAAQ,EAAK,MAC5C,KAAmC,EAAC,MAAM,IAAQ,SAAA;AACpD,sBAAU,MAAI,IAAe,KAAK,IAClC,OAAU,MAAI,IAAe,QAAQ,KACrC,MAAgB,MAAI,IAAe,WAAW,GAAM,WACxD,EAAe,KAAK;;AAI1B;;aAEG,IAAiB;AACpB,cAAM,IAAa,EAA8B,OAAO,OAAQ,CAAC,EAAK;AACtE,cAAI,EAAU,WAAW;AAAG;AAE5B,cAAM,KAAS,EAAU,GAAG,eACtB,KAAW,EAAU,GAAG,UACxB,IAAqC,EAAC,MAAM,IAAQ,SAAS,CAAC,EAAU,GAAG,KAAK,EAAU,GAAG;AAC/F,iBAAa,UAAa,GAAS,SAAS,KAAG,GAAe,WAAW,KAC7E,EAAe,KAAK;AACpB;;aAEG,IAAoB;AACvB,cAAM,IAAgB,EAAiC,OAAO,QAAQ,CAAC,GAAK;AAE5E,cADI,EAAa,SAAS,KACtB,KAAK,WAAW,KAAK,QAAQ,GAAe,OAAS,GAAK,SAAS,SAAS;AAAI;AAEpF,cAAM,KAAU,EAAa,IAAI,QAAQ,GAAK;AAC9C,YAAe,KAAK,EAAC,MAAM,EAAa,GAAG,eAAe,SAAA;AAC1D;;aAEG,IAAqB;AACxB,cAAM,IAAgB,GAChB,KAAU,EAAQ,IAAI,QAAQ,GAAK;AACzC,YAAe,KAAK,EAAC,MAAM,EAAc,GAAG,eAAe,SAAA;AAC3D;;aAEG,IAAkB;AACrB,cAAM,IAAa;AACnB,mBAAW,CAAC,EAAE,OAAmB,GAAQ,GAAY,QAAQ,GAAK,QAAQ;AACxE,gBAAM,KAAU,GAAe,IAAI,OAAQ,EAAK;AAChD,cAAe,KAAK,EAAC,MAAM,GAAe,GAAG,eAAe,SAAA;;AAE9D;;aAEG,IAAwB;AAC3B,cAAM,IAAmB;AACzB,mBAAW,CAAC,IAAM,OAAkB,GAAQ,GAAkB,OAAQ,EAAK,OAAO;AAChF,gBAAM,IAAU,GAAc,IAAI,QAAQ,GAAK,MAEzC,IAA4C,EAAC,MADpC,GAAc,GAAG,eACiC,SAAA;AAC7D,mBAAS,MAAI,GAAe,OAAO,KACvC,EAAe,KAAK;;AAEtB;;;AAGA,gBAAM,IAAI,GAAc,0BAA0B,EAAC,OAAA;;AAGzD,WAAO;;MAGG,aAA0B;AACpC,WAAO,KAAK,UACT,OAAO,OAAQ,EAAK,UACpB,IAAI,OAAQ,EAAK,WACjB,OAAQ,OAAyC,MAAS;;EAG/D,SAAiB;AACf,QAAM,IAAQ,KAAK,UAAU,IAAI,OAAQ,EAAK;AAC9C,WAAO,EAAM,SAAS,KAAK,EAAM,EAAM,SAAS,OAAO;AACrD,QAAM;AAER,WAAI,EAAM,WAAW,IACZ,QAEF,IAAI,EAAM,KAAK;;GAv+BnB;AAAA,GAAA,IAAA,uBACC,EAAA,CAAL,IADI,GACC,WAAA,UAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,cAAA,IACA,EAAA,CAAL,IAHI,GAGC,WAAA,UAAA,IACA,EAAA,CAAL,IAJI,GAIC,WAAA,QAAA,IACA,EAAA,CAAL,IALI,GAKC,WAAA,SAAA;AAs+BR,GAAW;ACtlCJ,IAAA,KAAA,qCAAmC,YAAY;EAA/C,cAnCP;AAmCO,UAAA,GAAA;AACC,SAAA,QAAQ;AAKN,SAAA,uBAAuB,GAC7B,EACE,IAAI,kBACJ,SAAS,eACT,QAAQ,EACN,aAAa,EACX,MAAM,YACN,SAAS,WACT,IAAI,EACF,gBAAgB,EACd,QAAQ,eACR,SAAS,CAAC,qBAAqB,oBAEjC,oBAAoB,EAClB,QAAQ,eACR,SAAS,CAAC,oCAEZ,kBAAkB,EAChB,QAAQ,eACR,SAAS,CAAC,sBAGd,QAAQ,EACN,SAAS,EACP,QAAQ,CACN,EAAC,QAAQ,QAAQ,MAAM,YACvB,EAAC,QAAQ,WAAW,MAAM,kBAG9B,MAAM,EACJ,OAAO,kBACP,IAAI,EACF,gBAAgB,EACd,QAAQ,WACR,SAAS,CACP,oBACA,sBACA,kCACA,0BACA,qBAGJ,YAAY,EACV,QAAQ,QACR,SAAS,CAAC,oBAEZ,kBAAkB,EAChB,QAAQ,QACR,SAAS,CAAC,mBAEZ,kBAAkB,EAChB,QAAQ,QACR,SAAS,CAAC,qBAEZ,qBAAqB,EACnB,QAAQ,QACR,SAAS,CAAC,yBAEZ,qBAAqB,EACnB,QAAQ,QACR,SAAS,CAAC,wBAEZ,6BAA6B,EAC3B,QAAQ,QACR,SAAS,CAAC,+BAEZ,gCAAgC,EAC9B,QAAQ,QACR,SAAS,CAAC,kCAEZ,+BAA+B,EAC7B,QAAQ,QACR,SAAS,CAAC,iCAEZ,kBAAkB,EAChB,QAAQ,QACR,SAAS,CAAC,qBAEZ,qBAAqB,EACnB,QAAQ,QACR,SAAS,CAAC,wBAEZ,oBAAoB,EAClB,QAAQ,QACR,SAAS,CAAC,2BAIhB,SAAS,EACP,IAAI,EACF,yBAAyB,EACvB,QAAQ,WACR,SAAS,CAAC,gCAEZ,WAAW,EACT,QAAQ,WACR,SAAS,CAAC,mBAEZ,aAAa,EACX,QAAQ,WACR,SAAS,CAAC,qBAEZ,kBAAkB,EAChB,QAAQ,QACR,SAAS,CAAC,6BAA6B,qCAAqC,qBAE9E,wBAAwB,EACtB,QAAQ,QACR,SAAS,CACP,6BACA,qCACA,kBACA,gDAShB,EACE,QAAQ,EACN,QAAQ,MACC,CAAC,KAAK,QAAQ,SAEvB,WAAW,MACF,KAAK,QAAQ,WAGxB,SAAS,EACP,gBAAgB,MAAM;AACpB,WAAK,QAAQ,YAAY;OAE3B,kBAAkB,MAAM;AACtB,WAAK,QAAQ,UAAU;OAEzB,gBAAgB,MAAM;AACpB,WAAK,QAAQ,UAAU;OAEzB,oBAAoB,CAAC,GAAU,MAAU;AACnC,QAAM,SAAS,oBAEnB,KAAK,QAAQ,kBAAkB,EAAM;OAEvC,2BAA2B,CAAC,GAAU,MAAU;AAC9C,UAAI,EAAM,SAAS;AAA2B;AAE9C,UAAM,IAAY,EAAM,WAClB,IAAa,KAAK,QAAQ,aAAa,EAAM,GAAG,EAAM;AAI5D,UAFA,EAAU,UAAU,MAEhB,EAAW,aAAa,MAAM;AAChC,YAAM,KAAY,EAAW;AAC7B,WAAK,QAAQ;AAEb,YAAM,KAAU,KAAK,QAAQ,mBAAmB,KAC1C,IAAc,GAAQ,UAAU,EAAW;AACjD,WAAK,QAAQ,IAGb,EAAY,OAAO,IACnB,EAAY,gBAAgB,EAAU,QAAQ,qBAG9C,KAAK,QAAQ,kBAAkB,GAAQ;;AAEvC,UAAW,SAAS,OAAO;OAG/B,gCAAgC,MAAM;AACpC,eAAS,gBAAgB,aAAa,iBAAiB;OAEzD,mCAAmC,MAAM;AACvC,eAAS,gBAAgB,gBAAgB;OAE3C,wBAAwB,MAAM;AACxB,WAAK,QAAQ,YAAY,KAAK,QAAQ,gBACxC,KAAK,QAAQ;OAGjB,2BAA2B,MAAM;AAC/B,WAAK,QAAQ;OAEf,eAAe,MAAM;AACnB,WAAK,QAAQ;OAEf,gBAAgB,CAAC,GAAU,MAAU;AAC/B,QAAM,SAAS,oBAEnB,KAAK,QAAQ,eAAe,EAAM;OAEpC,eAAe,CAAC,GAAU,MAAU;AAC9B,QAAM,SAAS,gBAEnB,KAAK,QAAQ,cAAc,EAAM;OAEnC,cAAc,CAAC,GAAU,MAAU;AAC7B,QAAM,SAAS,sBAAsB,EAAM,SAAS,eAExD,GAAM,KAAK,SAAS;OAEtB,gBAAgB,CAAC,GAAU,MAAU;AAC/B,QAAM,SAAS,sBAAsB,EAAM,SAAS,iBAExD,GAAM,KAAK,SAAS;OAEtB,oBAAoB,MAAM;AACxB,WAAK,QAAQ;OAEf,+BAA+B,CAAC,GAAU,MAAU;AAC9C,QAAM,SAAS,4BAED,EAAM,UACV,WACV,CAAC,KAAK,gBAAgB,oBAE1B,KAAK,gBAAgB,UAAU;OAEjC,mBAAmB,CAAC,GAAU,MAAU;AACtC,UAAI,EAAM,SAAS;AAAkB;AAErC,UAAM,IAAY,EAAM;AACpB,SAAW,MAAY,EAAU;OAEvC,mBAAmB,CAAC,GAAU,MAAU;AAClC,QAAM,SAAS,yBACf,MAAK,gBAAgB,oBAEzB,EAAM,UAAU;OAElB,0BAA0B,CAAC,GAAU,MAAU;AACzC,QAAM,SAAS,iCAEnB,KAAK,gBAAgB,gBAAgB,EAAM;OAE7C,6BAA6B,CAAC,GAAU,MAAU;AAC5C,QAAM,SAAS,oCAEnB,KAAK,gBAAgB,mBAAmB,EAAM;OAEhD,4BAA4B,CAAC,GAAU,MAAU;AAC3C,QAAM,SAAS,mCAEnB,KAAK,gBAAgB,kBAAkB,EAAM;OAE/C,gBAAgB,CAAC,GAAU,MAAU;AAC/B,QAAM,SAAS,sBAEnB,GAAM,UAAU,KAAK,EAAM;OAE7B,mBAAmB,CAAC,GAAU,MAAU;AAClC,QAAM,SAAS,yBAEnB,GAAM,UAAU,QAAQ,EAAM,OAC9B,EAAM,UAAU,eAAe,EAAM;OAEvC,kBAAkB,CAAC,GAAU,MAAU;AACjC,QAAM,SAAS,wBAEnB,GAAM,UAAU,OAAO,EAAM;OAE/B,+BAA+B,CAAC,GAAU,MAAU;AAClD,UAAI,EAAM,SAAS;AAAsB;AAEzC,UAAM,IAAY,EAAM;AACpB,WAAK,gBAAgB,oBACvB,KAAK,gBAAgB,cAAc;;;EAS7C,oBAA0B;AACxB,SAAK,uBAAuB,GAAU,KAAK,sBACxC,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,mBAAmB,GAAS,EAAM;OAGjD,SAEH,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UAEL,SAAS,iBAAiB,SAAS,KAAK,yBAAyB,KAAK,QACtE,KAAK,iBAAiB,oBAAoB,KAAK,oBAC/C,KAAK,iBAAiB,uBAAuB,KAAK,oBAClD,KAAK,iBAAiB,qBAAqB,KAAK,2BAChD,KAAK,iBAAiB,wBAAwB,KAAK,8BACnD,KAAK,iBAAiB,uBAAuB,KAAK,6BAClD,KAAK,iBAAiB,iCAAiC,KAAK,iBAC5D,KAAK,iBAAiB,oCAAoC,KAAK,oBAC/D,KAAK,iBAAiB,oCAAoC,KAAK,oBAC/D,KAAK,iBAAiB,mCAAmC,KAAK,mBAC9D,KAAK,iBAAiB,kBAAkB,KAAK,gBAC7C,KAAK,iBAAiB,oBAAoB,KAAK,kBAC/C,KAAK,iBAAiB,0BAA0B,KAAK,uBACrD,KAAK,iBAAiB,kBAAkB,KAAK,gBAC7C,KAAK,iBAAiB,oBAAoB,KAAK,kBAC/C,KAAK,iBAAiB,sBAAsB,KAAK,YACjD,KAAK,iBAAiB,qBAAqB,KAAK,WAChD,KAAK,iBAAiB,uBAAuB,KAAK,aAClD,KAAK,iBAAiB,2BAA2B,KAAK,uBACtD,KAAK,iBAAiB,2BAA2B,KAAK,iBACtD,KAAK,iBAAiB,2BAA2B,KAAK,iBACtD,KAAK,iBAAiB,8BAA8B,KAAK,oBAEzD,KAAK,iBAAiB,wBAAwB,MAAM;AAClD,eAAW,KAAQ,KAAK,QAAQ;AAC9B,UAAK;;;EAKX,SAAe;AACb,OAAO,kBAAqB,KAAK;;MAGvB,kBAAoC;AAC9C,WAAO,KAAK,QAAQ,cAAc;;EAG5B,yBAAyB,GAAoB;AACnD,QAAM,IAAY,EAAM;AAGtB,KAAC,GAAY,MACb,CAAC,KAAK,gBAAgB,MAAM,OAAO,SAAS,MAC5C,CAAC,KAAK,gBAAgB,MAAM,UAAU,SAAS,MAC/C,KAAK,oBAAoB,QAEzB,MAAK,gBAAgB,SAAS;;EAI1B,kBAAkB,GAAoB;AAC5C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,sBAAsB,WAAA;;EAGtD,kBAAkB,GAAoB;AAC5C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,uBAAuB,WAAA;;EAGvD,yBAAyB,GAAoB;AACnD,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAS;AAAY,YAAM,IAAI,MAAM,GAAG;AAE7C,SAAK,qBAAqB,KAAK,EAAC,MAAM,+BAA+B,WAAA;;EAG/D,4BAA4B,GAAoB;AACtD,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,kCAAkC,WAAA;;EAGlE,2BAA2B,GAAoB;AACrD,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,iCAAiC,WAAA;;EAGjE,eAAe,GAAoB;AACzC,QAAM,IAAY,EAAM,QAClB,IAAY,KAAK;AACvB,QAAI,CAAC,GAAS;AAAY,YAAM,IAAI,MAAM;AAE1C,SAAK,qBAAqB,KAAK,EAAC,MAAM,oBAAoB,WAAA,GAAW,IAAI,EAAU;;EAG7E,kBAAkB,GAAoB;AAC5C,QAAM,IAAY,EAAM,QAClB,IAAY,KAAK;AAEvB,QADA,GAAK,QAAQ,IACT,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG,EAAU;AAE1D,SAAK,qBAAqB,KAAK,EAC7B,MAAM,uBACN,WAAA,GACA,OAAO,EAAU,OACjB,cAAc,EAAU,sBAAsB,EAAU,eAAe;;EAInE,iBAAiB,GAAoB;AAC3C,QAAM,IAAY,EAAM,QAClB,IAAY,KAAK;AACvB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM;AAE7C,SAAK,qBAAqB,KAAK,EAAC,MAAM,sBAAsB,WAAA,GAAW,MAAM,EAAU;;EAGjF,cAAc,GAAoB;AACxC,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,kBAAkB,WAAA;;EAGlD,gBAAgB,GAAoB;AAC1C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,oBAAoB,WAAA;;EAGpD,qBAAqB,GAAoB;AAC/C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,0BAA0B,WAAA;;EAG1D,cAAc,GAAoB;AACxC,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAEhD,SAAK,qBAAqB,KAAK,EAAC,MAAM,kBAAkB,WAAA;;EAGlD,kBAAwB;AAC9B,SAAK,qBAAqB,KAAK,EAAC,MAAM;;EAGhC,UAAU,GAAoB;AACpC,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,SAAK,qBAAqB,KAAK,EAAC,MAAM,cAAc,MAAA;;EAG9C,SAAS,GAAoB;AACnC,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,SAAK,qBAAqB,KAAK,EAAC,MAAM,aAAa,MAAA;;EAG7C,WAAW,GAAoB;AACrC,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,SAAK,qBAAqB,KAAK,EAAC,MAAM,eAAe,MAAA;;EAG/C,qBAAqB,GAAoB;AAC/C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,MAAM,GAAG;AAGhD,QAAM,IADc,EACe,OAAO,gBACpC,KAAI,EAAe,GACnB,KAAI,EAAe;AACzB,SAAK,qBAAqB,KAAK,EAAC,MAAM,2BAA2B,WAAA,GAAW,GAAA,IAAG,GAAA;;EAGzE,eAAe,GAAoB;AACzC,QAAI,KAAK,QAAQ;AAAS;AAE1B,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,SAAK,qBAAqB,KAAK,EAAC,MAAM,oBAAoB,MAAA;;EAGpD,eAAe,GAAoB;AACzC,QAAI,KAAK,QAAQ;AAAS;AAE1B,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,SAAK,qBAAqB,KAAK,EAAC,MAAM,oBAAoB,MAAA;;EAGpD,oBAA0B;AAChC,SAAK,qBAAqB,KAAK,EAAC,MAAM;;GA/enC;AAAA,GAAA,IAAA,yBACC,EAAA,CAAL,IADI,GACC,WAAA,SAAA,IAEE,EAAA,CAAP,KAHI,GAGG,WAAA,WAAA,IACA,EAAA,CAAP,KAJI,GAIG,WAAA,mBAAA;AA+eV,GAAW;AC3gBJ,IAAA,KAAA,qCAAqC,YAAY;EAAjD,cAXP;AAWO,UAAA,GAAA;AACC,SAAA,QAAQ;AAEN,SAAA,yBAAyB,GAC/B,EACE,IAAI,oBACJ,SAAS,QACT,QAAQ,EACN,MAAM,EACJ,IAAI,EACF,gBAAgB,EACd,QAAQ,QACR,SAAS,CAAC,mBAEZ,kBAAkB,EAChB,QAAQ,QACR,SAAS,CAAC,8BAMpB,EACE,SAAS,EACP,cAAc,CAAC,GAAU,MAAU;AACjC,UAAI,EAAM,SAAS;AAAkB;AAErC,UAAM,IAAY,EAAM,WAClB,IAAe,EAAU,UAAU;AACzC,UAAI,CAAC,GAAY;AAAe,cAAM,IAAI,UAAU,GAAG;AAEnD,SAAW,MAAY,EAAU,eACrC,KAAK,QAAQ,IACb,KAAK,cAAc;OAErB,iBAAiB,CAAC,GAAU,MAAU;AAChC,QAAM,SAAS,sBAEnB,KAAK,YAAY,EAAM;;;EAQ/B,oBAA0B;AACxB,SAAK,yBAAyB,GAAU,KAAK,wBAC1C,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,qBAAqB,EAAM;OAG1C,SAEH,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UAEL,KAAK,cAAc,KAAK,YACxB,KAAK,iBAAiB,kBAAkB,KAAK,gBAC7C,KAAK,iBAAiB,oBAAoB,KAAK;;EAGjD,SAAe;AACb,OACE;;;;;;wBAOA,KAAK;;EAID,cAAc,GAA4B;AAChD,MAAU,YAAY,MACtB,EAAU,UAAU,MACpB,EAAU,UAAU,OAChB,GAAW,MAAY,EAAU;;MAG3B,YAAuB;AAEjC,QAAM,IADW,MAAM,KAAK,KAAK,UACL,OAAQ,OAA4B,GAAY;AAE5E,QAAI,EAAW,WAAW;AACxB,YAAM,IAAI,MAAM;AACX,QAAI,EAAW,WAAW;AAC/B,aAAO,EAAW;AAElB,UAAM,IAAI,MAAM;;EAIZ,cAAc,GAAoB;AACxC,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,UAAU,GAAG;AAEpD,SAAK,uBAAuB,KAAK,EAAC,MAAM,kBAAkB,WAAA;;EAGpD,gBAAgB,GAAoB;AAC1C,QAAM,IAAY,EAAM;AACxB,QAAI,CAAC,GAAY;AAAY,YAAM,IAAI,UAAU,GAAG;AAEpD,SAAK,uBAAuB,KAAK,EAAC,MAAM,oBAAoB,WAAA;;GA5GzD;AAAA,GAAA,IAAA,2BACC,EAAA,CAAL,IADI,GACC,WAAA,SAAA;AA+GR,GAAW;AC1FJ,IAAA,KAAA,qCAAoC,YAAY;EAAhD,cAjCP;AAiCO,UAAA,GAAA;AACC,SAAA,eAAe;AACf,SAAA,eAAe;AACf,SAAA,eAAe;AACf,SAAA,UAAU;AACV,SAAA,YAAY;AACZ,SAAA,OAAO;AACP,SAAA,eAAe;AACf,SAAA,QAAQ;AAGR,SAAA,aAAa;AACb,SAAA,oBAAoB;AACpB,SAAA,mBAAmB;AAEnB,SAAA,eAAe;AACf,SAAA,sBAAsB;AACtB,SAAA,qBAAqB;AAErB,SAAA,aAAa;AACb,SAAA,oBAAoB;AACpB,SAAA,mBAAmB;AAEnB,SAAA,aAAa;AACb,SAAA,oBAAoB;AACpB,SAAA,mBAAmB;AAEnB,SAAA,iBAAiB;AACjB,SAAA,wBAAwB;AACxB,SAAA,uBAAuB;AAEvB,SAAA,aAAa;AACb,SAAA,oBAAoB;AACpB,SAAA,mBAAmB;AAEnB,SAAA,gBAAgB;AAChB,SAAA,uBAAuB;AACvB,SAAA,sBAAsB;AAEtB,SAAA,cAAc;AACd,SAAA,qBAAqB;AACrB,SAAA,oBAAoB;AAEpB,SAAA,cAAc;AACd,SAAA,qBAAqB;AACrB,SAAA,oBAAoB;AAEpB,SAAA,cAAc;AACd,SAAA,qBAAqB;AACrB,SAAA,oBAAoB;AAEpB,SAAA,gBAAgB;AAChB,SAAA,uBAAuB;AAEvB,SAAA,eAAe;AAEf,SAAA,yBAAyB;AACzB,SAAA,+BAA+B;AAE/B,SAAA,qBAAqB;AACrB,SAAA,2BAA2B;AAIzB,SAAA,wBAAwB,GAA0D,EACxF,IAAI,mBACJ,SAAS,QACT,QAAQ,EACN,MAAM,EACJ,IAAI,EACF,MAAM,EAAC,QAAQ,iBAGnB,SAAS,EACP,IAAI,EACF,WAAW,EAAC,QAAQ;AA6lB5B,SAAA,KAAK,KAAK;;MA/kBN,YAAoB;AACtB,WAAO,KAAK,OAAO,GAAG;;MAGpB,kBAAiC;AACnC,QAAM,IAAO,KAAK;AAClB,WAAI,MAAS,OAAa,OAEnB,KAAK,eAAe;;MAGzB,aAAwC;AAG1C,WAFa,KAAK,MAAM,KAAK,OAAQ,EAAK,WAE3B;;EAGjB,eAAe,GAAkC;AAC/C,QAAM,IAAQ,KAAK,MAAM,QAAQ;AACjC,WAAA,GAAK,KAAK,MAAU,IAAI,yBAAyB,iBAE1C;;MAGL,QAA8B;AAChC,WAAO,MAAM,KAAyB,KAAK,iBAAiB;;MAGlD,aAAmC;AAC7C,WAAO,KAAK,MAAM,OAAO,OAAQ,EAAK;;MAG5B,gBAAsC;AAChD,WAAO,KAAK,MAAM,OAAO,OAAQ,CAAC,EAAK;;MAG7B,cAAyC;AACnD,QAAI,IAAO,MACP,IAAM;AAEV,aAAW,KAAQ,KAAK;AAClB,QAAK,YAAY,KAAK,EAAK,YAAY,KACzC,KAAO,GACP,IAAM,EAAK;AAIf,WAAO;;EAGD,qBAA2B;AACjC,QAAM,IAAS,KAAK,eAAe,KAAK,MAAM;AAE9C,aAAS,IAAI,GAAG,IAAI,GAAQ;AAC1B,WAAK,OAAO,IAAI;;EAOpB,OAAO,GAAuC;AAC5C,QAAM,IAAO,KAAK,MAAM;AACxB,WAAA,GAAK,QAAQ,IAEN;;EAMT,mBAAmB,GAAuC;AACxD,QAAM,IAAU,IAAI;AACpB,MAAQ,SAAS;AACjB,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW;AAClC,QAAQ;AAGV,QAAI,MAAc;AAChB,WAAK,QAAQ;SACR;AACL,UAAM,IAAO,KAAK,MAAM;AACxB,SAAK,QAAQ,EAAK,gBAElB,EAAK,cAAc,aAAa,GAAS,EAAK;;AAGhD,WAAO;;EAMT,aAAa,GAAgC;AAC3C,MAAK,SAAS;;EAMhB,qBAA2B;AACzB,aAAW,KAAQ,KAAK;AACtB,QAAK,SAAS;;EAOlB,cAAc,GAAgC;AAC5C,aAAW,KAAQ,KAAK;AACtB,QAAK,aAAa;AAEpB,MAAK,aAAa;;MAGhB,aAAwC;AAG1C,WAFa,KAAK,MAAM,KAAK,OAAQ,EAAK,eAE3B;;MAGL,YAAsC;AAChD,WAAO,MAAM,KAAK,KAAK,iBAAiB;;MAGtC,aAA0B;AAC5B,WAAO,KAAK,UACT,IAAsB,OAAQ,EAAK,WACnC,OAAQ,OAA2B,MAAS;;MAGrC,aAAsB;AAChC,WAAO,OAAO,iBAAiB,MAAM,kBAAkB;;EAGzD,oBAA0B;AAaxB,QAZA,KAAK,wBAAwB,GAAU,KAAK,uBACzC,aAAa,OAAS;AACjB,WAAK,SAEP,QAAQ,IAAI,oBAAoB,EAAM;OAGzC,SAEH,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UAED,KAAK,aAAa,oBAAoB;AACxC,UAAM,IAAO,KAAK;AAClB,WAAK,aAAa;;AAGpB,SAAK,sBACL,KAAK,sBACL,KAAK,kBAEL,KAAK,iBAAiB,cAAc,KAAK,0BACzC,KAAK,iBAAiB,uBAAuB,KAAK,aAClD,KAAK,iBAAiB,qBAAqB,KAAK,aAChD,KAAK,iBAAiB,qBAAqB,KAAK,oBAChD,KAAK,iBAAiB,uBAAuB,KAAK,aAClD,KAAK,iBAAiB,uBAAuB,KAAK,oBAClD,KAAK,iBAAiB,iCAAiC,KAAK,aAC5D,KAAK,iBAAiB,iCAAiC,KAAK,oBAE5D,KAAK,cAAc,IAAI,MAAM,wBAAwB,EAAC,SAAS;;EAGjE,yBAAyB,GAAc,GAAyB,GAA+B;AACzF,UAAa,KAEb,OAAS,kBACP,OAAa,OACf,KAAK,sBAAsB,KAAK,EAAC,MAAM,YAEvC,KAAK,sBAAsB,KAAK,EAAC,MAAM,iBAIvC,MAAS,eAAe,MAAa,MACvC,KAAK,aAAa;;EAId,SAAe;AACrB,OAAO,kBAAqB,KAAK;;EAG3B,WAAW,GAAoB;AACrC,QAAM,IAAO,EAAM;AACnB,SAAK,8BAA8B;;EAG7B,8BAA8B,GAAgC;AACpE,MAAK,0BAA0B,EAE7B,WAAW,KAAK,YAChB,mBAAmB,KAAK,mBACxB,kBAAkB,KAAK,kBAEvB,aAAa,KAAK,cAClB,qBAAqB,KAAK,qBAC1B,oBAAoB,KAAK,oBAEzB,WAAW,KAAK,YAChB,mBAAmB,KAAK,mBACxB,kBAAkB,KAAK,kBAEvB,WAAW,KAAK,YAChB,mBAAmB,KAAK,mBACxB,kBAAkB,KAAK,kBAEvB,eAAe,KAAK,gBACpB,uBAAuB,KAAK,uBAC5B,sBAAsB,KAAK,sBAE3B,WAAW,KAAK,YAChB,mBAAmB,KAAK,mBACxB,kBAAkB,KAAK,kBAEvB,cAAc,KAAK,eACnB,sBAAsB,KAAK,sBAC3B,qBAAqB,KAAK,qBAE1B,YAAY,KAAK,aACjB,oBAAoB,KAAK,oBACzB,mBAAmB,KAAK,mBAExB,YAAY,KAAK,aACjB,oBAAoB,KAAK,oBACzB,mBAAmB,KAAK,mBAExB,YAAY,KAAK,aACjB,oBAAoB,KAAK,oBACzB,mBAAmB,KAAK,mBAExB,cAAc,KAAK,eACnB,sBAAsB,KAAK,sBAE3B,aAAa,KAAK,cAElB,uBAAuB,KAAK,wBAC5B,8BAA8B,KAAK,8BAEnC,mBAAmB,KAAK,oBACxB,0BAA0B,KAAK;;EAI3B,0BAAgC;AACtC,SAAK,cAAc,IAAI,MAAM,8BAA8B,EAAC,SAAS;;EAGvE,SAAe;AACb,SAAK,oBACL,KAAK,sBACL,KAAK,sBACL,KAAK,wBACL,KAAK;;EAMP,KAAK,GAA6D;AAChE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAI,IAAI;AACd,aAAI,KAAU,EAAE,WACT;OACN,GAAG,IAEN,KAAK,UAEE;;EAMT,KAAK,GAA6D;AAChE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAI,IAAI;AACd,aAAI,KAAU,EAAE,WACT;OACN,GAAG,IAEC;;EAMT,KAAK,GAA6D;AAChE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAI,IAAI;AACd,aAAI,KAAU,EAAE,WACT;OACN,GAAG,IAEC;;EAMT,KAAK,GAA6D;AAChE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAI,IAAI;AACd,aAAI,KAAU,EAAE,WACT;OACN,GAAG,IAEC;;EAMT,SAAS,GAAyF;AAChG,QAAI,IAAQ,IACR,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;aACJ,OAAO,EAAK,MAAO;AAC5B,UAAQ,EAAK,IACb,IAAa,EAAK,MAAM;SACnB;AACL,UAAM,KAAQ,EAAK;AACnB,UAAa,GAAM,SACnB,IAAW,GAAM;;AAGnB,QAAM,KAAO,KAAK,wBAAwB,MAAM;AAC9C,UAAM,KAAQ,IAAI;AAClB,aAAA,GAAM,QAAQ,GACV,KAAU,GAAM,WACb;OACN,GAAG;AACN,WAAI,EAAW,SAAS,KAAG,KAAK,8BAA8B,KAEvD;;EAMT,KAAK,GAA6D;AAChE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAI,IAAI;AACd,aAAI,KAAU,EAAE,WACT;OACN,GAAG,IAEN,KAAK,UAEE;;EAMT,QAAQ,GAAgE;AACtE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAO,IAAI;AACjB,aAAI,KAAU,EAAK,WACZ;OACN,GAAG,IAEC;;EAMT,MAAM,GAA8D;AAClE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAK,IAAI;AACf,aAAI,KAAU,EAAG,WACV;OACN,GAAG,IAEC;;EAMT,MAAM,GAA8D;AAClE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAK,IAAI;AACf,aAAI,KAAU,EAAG,WACV;OACN,GAAG,IAEC;;EAMT,MAAM,GAA8D;AAClE,QAAI,GACA;AAEJ,QAAI,OAAO,EAAK,MAAO;AACrB,UAAa;SACR;AACL,UAAM,IAAQ,EAAK;AACnB,UAAa,EAAM,SACnB,IAAW,EAAM;;AAGnB,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAK,IAAI;AACf,aAAI,KAAU,EAAG,WACV;OACN,GAAG,IAEC;;EAMT,QAAQ,GAA6C;AACnD,QAAM,IAAO,KAAK,wBAAwB,MAAM,IAAI,MAAmB,GAAG;AAC1E,WAAA,KAAK,8BAA8B,IAC5B;;EAMT,WAAW,GAA6C;AACtD,QAAM,IAAO,KAAK,wBAAwB,MAAM,IAAI,MAAsB,GAAG;AAC7E,WAAA,KAAK,8BAA8B,IAC5B;;EAMT,SAAS,GAA6C;AACpD,WAAA,KAAK,wBAAwB,MAAM,IAAI,MAAuB,GAAG,IAC1D;;EAMT,MAAM,MAAqB,GAA6C;AACtE,WAAA,KAAK,wBAAwB,MAAM;AACjC,UAAM,IAAY,IAAI;AACtB,aAAA,EAAU,QAAQ,GACX;OACN,GAAG,IAEN,KAAK,UAEE;;EAMT,WAAW,GAA6C;AACtD,WAAA,KAAK,wBAAwB,MAAM,IAAI,MAA0B,GAAG,IACpE,KAAK,UACE;;EAGD,wBAAwB,MAAiC,GAA0C;AACzG,QAAM,IAAO,KAAK,IAAI,GAAG,KAAc,GACjC,IAAO,KAAK,wBAAwB;AAE1C,aAAW,MAAQ,GAAY;AAC7B,UAAM,KAAY;AAClB,QAAK,WAAW,IAAM,IAAI;;AAG5B,WAAO;;EAMT,GAAG,GAA4B,GAAkD;AAC/E,WAAA,KAAK,YAAY,IAAc,GAAS,IACjC;;EAMT,KAAK,GAA4B,GAAkD;AACjF,WAAA,KAAK,YAAY,IAAc,GAAS,IACxC,KAAK,UACE;;EAOT,GAAG,GAA4B,GAAkD;AAC/E,WAAA,KAAK,YAAY,IAAc,GAAS,IACjC;;EAMT,GAAG,GAA4B,GAAkD;AAC/E,WAAA,KAAK,YAAY,IAAc,GAAS,IACjC;;EAMT,OAAO,GAA4B,GAAkD;AACnF,WAAA,KAAK,YAAY,IAAkB,GAAS,IACrC;;EAMT,GAAG,GAA4B,GAAkD;AAC/E,WAAA,KAAK,YAAY,IAAc,GAAS,IACjC;;EAMT,MAAM,GAA4B,GAAkD;AAClF,WAAA,KAAK,YAAY,IAAiB,GAAS,IACpC;;EAMT,IAAI,GAA4B,GAAkD;AAChF,WAAA,KAAK,YAAY,IAAe,GAAS,IAClC;;EAMT,IAAI,GAA4B,GAAkD;AAChF,WAAA,KAAK,YAAY,IAAe,GAAS,IAClC;;EAMT,IAAI,GAA4B,GAAkD;AAChF,WAAA,KAAK,YAAY,IAAe,GAAS,IAClC;;EAMT,MAAM,GAA4B,GAAkD;AAClF,WAAA,KAAK,YAAY,IAAiB,GAAS,IACpC;;EAMT,MAAM,GAA6C;AACjD,QAAM,IAAO,KAAK,IAAI,GAAG,KAAc,GACjC,IAAO,KAAK,wBAAwB;AAE1C,aAAW,KAAQ;AACjB,QAAK,WAAW,GAAM,IAAI,IAAI;AAGhC,WAAA,KAAK,sBACL,KAAK,8BAA8B,IAE5B;;EAGD,YACN,GAYA,GACA,GACM;AACN,QAAM,IAAe,GAAgB,OAAW,IAC1C,KAAc,GAAgB,OAAW,IAEzC,KAAO,EAAY,OAAO,KAC1B,IAAO,KAAK,IAAI,GAAG,MAAQ,GAC3B,IAAO,KAAK,wBAAwB;AAE1C,aAAW,KAAQ;AACjB,QAAK,WAAW,GAAM,IAAI,IAAI;AAEhC,aAAW,KAAQ;AACjB,QAAK,WAAW,GAAM,IAAI,IAAI;AAGhC,SAAK,sBACL,KAAK,8BAA8B;;EAG7B,aAAiC;AAMvC,QAAM,IAAK,IAAI,MAET,IAAY,KAAK,OAAO,MAAM,IAAI,MAAM;AAC9C,WAAI,MAAc,QAAQ,EAAU,YAClC,KAAK,OAAO,KAEZ,EAAU,OAAO,IAGZ;;EAGD,wBAAwB,GAAkC;AAChE,QAAM,IAAO,IAAI;AACjB,SAAK,OAAO;AAEZ,aAAS,IAAI,GAAG,IAAI,GAAM,KAAK;AAC7B,UAAM,IAAW,IAAI;AACrB,QAAK,OAAO;;AAGd,WAAO;;EAGD,iBAAuB;AAC7B,QAAM,IAAY,KAAK,MAAM;AAC7B,QAAI,MAAc;AAAW;AAE7B,QAAM,IAAY,EAAU,UAAU;AACtC,aAAS,IAAI,GAAG,IAAI,GAAW;AAC7B,WAAK,WAAW;;EAIpB,kBAAkB,GAA4B;AAC5C,aAAW,KAAQ,KAAK;AACtB,QAAK,SAAS;AAEhB,MAAU,SAAS;;EAGrB,aAAmB;AACjB,aAAW,KAAQ,KAAK;AACtB,QAAK;;EAIT,uBAA6B;AAC3B,WAAO,KAAK,MAAM,MAAM,OAAQ,EAAK,YAAY,KAAK,gBAAgB,CAAC,EAAK,aAAa;AACvF,eAAW,KAAQ,KAAK;AACtB,UAAK,aAAa;;EAKhB,mBAAyB;AAC/B,aAAW,KAAQ,KAAK;AACtB,QAAK;;EAID,aAAa,GAAoB;AACvC,YAAQ,IAAI,iBAEZ,KAAK,YAAY;AAMjB,QAAI,IAAe;AAQnB,QAAI,MAAS,IAAI;AACX,WAAK,aAAa,sBACpB,KAAK;AAEP;;AAGF,QAAM,IAAU,KAAK,MAAM;AAC3B,SAAK,eAAgB,GAAQ,SAAS,IAAI;AAE1C,aAAW,KAAQ,EAAQ,MAAM;AAC/B,UAAM,KAAU,KAAK;AACrB,eAAW,MAAa,GAAM;AAC5B,gBAAQ;eACD,SAAS,KAAK,KAAY;AAC7B,gBAAM,IAAY,IAAI;AACtB,cAAU,YAAY,MACtB,EAAU,QAAQ,KAClB,GAAQ,gBAAgB;AACxB;;eAEG,SAAS,KAAK,KAAY;AAC7B,gBAAM,IAAY,IAAI;AACtB,cAAU,YAAY,MACtB,EAAU,QAAQ,KAClB,GAAQ,gBAAgB;AACxB;;eAEG,KAAK,KAAK,KAAY;AACzB,gBAAM,IAAQ,IAAI;AAClB,cAAM,YAAY,MAClB,EAAM,KAAK,KAAK,WAAW,GAAU,MAAM,KAC3C,GAAQ,gBAAgB;AACxB;;eAEG,OAAM,KAAK,OAAc,WAAW,KAAK,MAAY;AACxD,gBAAM,IAAQ,IAAI;AAClB,cAAM,YAAY,MAClB,EAAM,KAAK,GAAU,MAAM,GAAG,QAC9B,GAAQ,gBAAgB;AACxB;;eAEG,KAAK,KAAK,KAAY;AACzB,gBAAM,IAAQ,IAAI;AAClB,cAAM,YAAY,MAClB,EAAM,KAAK,KAAK,WAAW,GAAU,MAAM,KAC3C,GAAQ,gBAAgB;AACxB;;eAEG,KAAK,KAAK,KAAY;AACzB,gBAAM,IAAQ,IAAI;AAClB,cAAM,YAAY,MAClB,EAAM,KAAK,KAAK,WAAW,GAAU,MAAM,KAC3C,GAAQ,gBAAgB;AACxB;;eAEG,KAAK,KAAK,KAAY;AACzB,gBAAM,IAAY,IAAI;AACtB,cAAU,YAAY,MACtB,EAAU,QAAQ,KAAK,eAAe,GAAU,MAAM,KACtD,GAAQ,gBAAgB;AACxB;;eAEG,KAAK,KAAK,KAAY;AACzB,gBAAM,IAAQ,IAAI;AAClB,cAAM,YAAY,MAClB,EAAM,KAAK,KAAK,WAAW,GAAU,MAAM,KAC3C,GAAQ,gBAAgB;AACxB;;eAEG,QAAQ,KAAK,KAAY;AAC5B,gBAAM,IAAW,IAAI;AACrB,cAAS,YAAY,MACrB,EAAS,KAAK,KAAK,WAAW,GAAU,MAAM,KAC9C,GAAQ,gBAAgB;AACxB;;eAEG,MAAM,KAAK,KAAY;AAC1B,gBAAM,IAAS,IAAI;AACnB,cAAO,YAAY,MACnB,EAAO,QAAQ,KAAK,eAAe,GAAU,MAAM,KACnD,GAAQ,gBAAgB;AACxB;;eAEG,MAAM,KAAK,KAAY;AAC1B,gBAAM,IAAS,IAAI;AACnB,cAAO,YAAY,MACnB,EAAO,QAAQ,KAAK,eAAe,GAAU,MAAM,KACnD,GAAQ,gBAAgB;AACxB;;eAEG,MAAM,KAAK,KAAY;AAC1B,gBAAM,IAAS,IAAI;AACnB,cAAO,YAAY,MACnB,EAAO,QAAQ,KAAK,eAAe,GAAU,MAAM,KACnD,GAAQ,gBAAgB;AACxB;;eAEG,SAAS,KAAK,KAAY;AAC7B,gBAAM,IAAW,IAAI;AACrB,cAAS,YAAY,MACrB,GAAQ,gBAAgB;AACxB;;eAEG,MAAM,KAAK,KAAY;AAC1B,gBAAM,IAAc,IAAI;AACxB,cAAY,YAAY,MACxB,GAAQ,gBAAgB;AACxB;;eAEG,UAAU,KAAK,KAAY;AAC9B,gBAAM,IAAe,IAAI;AACzB,cAAa,YAAY,MACzB,GAAQ,gBAAgB;AACxB;;eAEG,WAAW,KAAK,KAAY;AAC/B,gBAAM,IAAkB,IAAI,MACtB,IAAS,YAAU,KAAK,GAAU,MAAM,OAAO,IAAI,MAAM,IAAI;AACnE,cAAgB,YAAY,MAC5B,EAAgB,OAAO,GACvB,GAAQ,gBAAgB;AACxB;;eAEG,aAAa,KAAK,KAAY;AACjC,gBAAM,IAAU,GAAU,MAAM;AAChC,eAAQ,UACR,IAAe,IAAI,MACnB,EAAa,UAAU,GACvB,EAAa,aAAa,gBAAgB,2BAC1C,KAAK,OAAO;AACZ;;eAEG,UAAU,KAAK,KAAY;AAC9B,eAAQ,UACR,EAAc;AACd;;mBAEO;AACP,gBAAI,OAAc;AACZ,iBAAQ,UAAU,WAAW,GAAQ,cAAc,SACrD,GAAQ,OAAO,OAEf,GAAQ,OAAO;;AAGjB,oBAAM,IAAI,MAAM,sBAAsB;AAExC,eAAQ;;;AAIZ,WAAQ;;;AAIZ,SAAK;;EAGC,WAAW,GAA2B;AAC5C,WAAS,YAAU,KAAK,MAAc,IAAI,MAAM,IAAI;;EAG9C,eAAe,GAA2B;AAChD,WAAS,eAAa,KAAK,MAAc,IAAI,MAAM,IAAI,OAAO,QAAQ,KAAK;;EAGrE,qBAA2B;AACjC,QAAM,IAAc,KAAK,aACnB,IACJ,KAAe,EAAY,YAAY,KAAK,eAAe,EAAY,YAAY,KAAK;AAE1F,aAAW,KAAQ,KAAK,OAAO;AAC7B,UAAM,IAAY,IAAmB,EAAK;AAC1C,eAAS,KAAI,GAAG,KAAI,GAAW;AAC7B,UAAK;;;EAKH,WAAW,GAAyB;AAC1C,QAAI,IAAc;AAElB,aAAW,KAAQ,KAAK,OAAO;AAC7B,UAAM,IAAW,EAAK,WAAW;AAGjC,UADA,EAAS,mBAAmB,GACxB,EAAS,kBAAkB;AAC7B,UAAS,mBAAmB,GAC5B,EAAS,oBAAoB,MAC7B,IAAc;eACL,EAAS,kBAAkB;AACpC,UAAS,mBAAmB,GAC5B,EAAS,oBAAoB,OAC7B,IAAc;eACL,EAAS,kBAAkB,aAAa;AACjD,YAAM,KAAgB,EAAK,UAAU,OAAO,QAAQ,GAAK,kBAAkB;AAC3E,YAAI,GAAc,WAAW,GAAG;AAC9B,cAAM,KAAe,GAAc,IAAI,QAAQ,EAAK,IAAI,MAClD,IAAM,EAAK,IAAI,IACf,IAAmB,GAAa,OAAO,IAAM,GAAa,KAAK,GAAa,IAC5E,IAAgB,EAAK,WAAW;AACtC,YAAS,mBAAmB,GAC5B,EAAS,oBAAoB,EAAc,kBAC3C,IAAc,EAAc;;AAE5B,YAAS,mBAAmB,GAC5B,EAAS,oBAAoB;;AAG/B,UAAS,mBAAmB,GAC5B,EAAS,oBAAoB;;;EAK3B,kBAAkB,GAAoB;AAC5C,QAAM,IAAO,EAAM;AACnB,QAAI,CAAC,GAAqB;AAAO,YAAM,IAAI,MAAM,GAAG;AAEpD,QAAM,IAAY,EAAsB,OAAO;AAC/C,QAAI,CAAC,GAAyB;AAAW,YAAM,IAAI,MAAM,GAAG;AAE5D,QAAM,IAAY,EAAK,UAAU,QAAQ;AACzC,OAAK,KAAK,MAAc,IAAI,gCAE5B,KAAK,WAAW;;MAMd,UAAU,GAAgB;AAC5B,aAAW,KAAQ,KAAK;AACtB,QAAK,YAAY;;EAOrB,aAAa,GAAW,GAAuB;AAC7C,WAAI,KAAK,aACA,KAAK,YAAY,GAAG,KAEpB,KAAK,YAAY,GAAG;;EAO/B,eAAe,GAA4B;AACzC,QAAM,IAAgB,KAAK,UAAU,OAAO,QAAQ,CAAC,GAAK,WACpD,IAAc;AACpB,SAAK,cAAc;AAEnB,QAAM,IAAa,EAAU;AACzB,OAAyB,MAAa,EAAc,KAAK;AAE7D,aAAW,CAAC,IAAe,OAAS,OAAO,QAAQ,KAAK,YAAY;AAClE,UAAM,IAAa,GAAK,YAClB,IAAI,KAAK,aAAa,EAAW,IAAI,EAAW,GAChD,IAAI,KAAK,aAAa,EAAW,IAAI,EAAW,GAChD,KAAY,SAAS,MAAiB,KAAK,WAE3C,KAAQ,IAAI,EAAU,YAAY,MAClC,KAAQ,IAAI,EAAU,YAAY;AAEpC,eAAS,MAAiB,KAAK,aAC7B,MAAK,aACP,EAAY,KAAK,EAAC,GAAG,GAAG,GAAG,QAE3B,EAAY,KAAK,EAAC,GAAG,IAAO,MAE1B,KAAK,YAAY,QAAW,UAAW,MAAK,YAAY,MAAS,KACjE,KAAK,YAAY,IAAO,OAAO,UACjC,MAAK,YAAY,IAAO,KAAK,EAC3B,UAAU,MACV,WAAW,IACX,WAAA,QAIF,KAAK,aACP,EAAY,KAAK,EAAC,GAAG,GAAG,GAAG,QAE3B,EAAY,KAAK,EAAC,GAAG,IAAO,MAE1B,KAAK,YAAY,QAAW,UAAW,MAAK,YAAY,MAAS,KACjE,KAAK,YAAY,IAAO,OAAO,UACjC,MAAK,YAAY,IAAO,KAAK,EAC3B,UAAU,MACV,WAAW,KAAK,MAAM,SAAS,MAAiB,KAAK,YACrD,WAAA,OAGA,EAAC,GAAK,YAAY,OAAS,MAC7B,EAAY,KAAK,IAGf,KAAK,YAAY,OAAO,UAAW,MAAK,YAAY,KAAK,KACzD,KAAK,YAAY,GAAG,OAAO,UAC7B,MAAK,YAAY,GAAG,KAAK,EACvB,UAAU,IACV,WAAW,MACX,WAAA;;AAIN,MAAU,cAAc;;EAM1B,kBAAkB,GAA8C;AAC9D,QAAM,IAAgB,EAAa;AACnC,OAAK,QAAQ;AAEb,QAAM,IAAQ,KAAK,aAAa,EAAc,WAAW,IAAI,EAAc,WAAW;AAEtF,aAAW,CAAC,GAAG,OAAO,OAAO,QAAQ,KAAK;AACxC,UAAI,CAAA,UAAS,MAAM;AAEnB,iBAAW,MAAK,IAAI;AAClB,cAAM,IAAa,GAAG;AAClB,YAAW,cAAc,QAC7B,GAAW,aAAa;;AAI5B,aAAW,CAAC,GAAW,OAAS,OAAO,QAAQ,IAAe;AAC5D,UAAM,KAAa,GAAK,YAClB,IAAI,KAAK,aAAa,GAAW,IAAI,GAAW,GAChD,IAAI,KAAK,aAAa,GAAW,IAAI,GAAW;AAEtD,SAAK,QAAQ,KAAK,YAAY,KAE9B,KAAK,YAAY,GAAG,KAAK,EACvB,UAAU,IACV,WAAW,MACX,WAAW,SAAS;;;EAK1B,YAAqC;AACnC,WAAO,KAAK,MAAM,IAAI,OAAQ,EAAK;;MAGzB,UAAkB;AAC5B,QAAM,IAAO,OAAO,SAAS,KAAK,WAAW,MAAM,OAAO,SAAS,MAAM,GAAG,MAAM;AAClF,WAAO,mBAAmB;;EAG5B,QAAc;AACZ,YAAQ,UAAU,IAAI,IAAI,mBAAmB,iBAC7C,SAAS;;EAGX,SAAiB;AACf,QAAI,IAAY,OACV,IAAO;AAEb,aAAW,KAAQ,KAAK,eAAe;AACrC,UAAI,EAAK,WAAA;AACP,YAAI,CAAC,GAAW;AACd,cAAM,IAAQ,EAAK;AACnB,YAAK,KAAK,MAAM,EAAM,cACtB,IAAY;;;AAGV,aACF,GAAK,KAAK,UACV,IAAY;AAGhB,QAAK,KAAK,EAAK;;AAOjB,WAJI,KACF,EAAK,KAAK,UAGR,KAAK,iBAAiB,KACjB,YAAY,EAAK,KAAK,kBAAkB,KAAK,mBAE7C,YAAY,EAAK,KAAK;;GA7vC5B;AAAA,GAAA,IAAA,0BACC,EAAA,CAAL,IADI,GACC,WAAA,gBAAA,IACA,EAAA,CAAL,IAFI,GAEC,WAAA,gBAAA,IACA,EAAA,CAAL,IAHI,GAGC,WAAA,gBAAA,IACA,EAAA,CAAL,IAJI,GAIC,WAAA,WAAA,IACA,EAAA,CAAL,IALI,GAKC,WAAA,aAAA,IACA,EAAA,CAAL,IANI,GAMC,WAAA,QAAA,IACA,EAAA,CAAL,IAPI,GAOC,WAAA,gBAAA,IACA,EAAA,CAAL,IARI,GAQC,WAAA,SAAA,IAGA,EAAA,CAAL,IAXI,GAWC,WAAA,cAAA,IACA,EAAA,CAAL,IAZI,GAYC,WAAA,qBAAA,IACA,EAAA,CAAL,IAbI,GAaC,WAAA,oBAAA,IAEA,EAAA,CAAL,IAfI,GAeC,WAAA,gBAAA,IACA,EAAA,CAAL,IAhBI,GAgBC,WAAA,uBAAA,IACA,EAAA,CAAL,IAjBI,GAiBC,WAAA,sBAAA,IAEA,EAAA,CAAL,IAnBI,GAmBC,WAAA,cAAA,IACA,EAAA,CAAL,IApBI,GAoBC,WAAA,qBAAA,IACA,EAAA,CAAL,IArBI,GAqBC,WAAA,oBAAA,IAEA,EAAA,CAAL,IAvBI,GAuBC,WAAA,cAAA,IACA,EAAA,CAAL,IAxBI,GAwBC,WAAA,qBAAA,IACA,EAAA,CAAL,IAzBI,GAyBC,WAAA,oBAAA,IAEA,EAAA,CAAL,IA3BI,GA2BC,WAAA,kBAAA,IACA,EAAA,CAAL,IA5BI,GA4BC,WAAA,yBAAA,IACA,EAAA,CAAL,IA7BI,GA6BC,WAAA,wBAAA,IAEA,EAAA,CAAL,IA/BI,GA+BC,WAAA,cAAA,IACA,EAAA,CAAL,IAhCI,GAgCC,WAAA,qBAAA,IACA,EAAA,CAAL,IAjCI,GAiCC,WAAA,oBAAA,IAEA,EAAA,CAAL,IAnCI,GAmCC,WAAA,iBAAA,IACA,EAAA,CAAL,IApCI,GAoCC,WAAA,wBAAA,IACA,EAAA,CAAL,IArCI,GAqCC,WAAA,uBAAA,IAEA,EAAA,CAAL,IAvCI,GAuCC,WAAA,eAAA,IACA,EAAA,CAAL,IAxCI,GAwCC,WAAA,sBAAA,IACA,EAAA,CAAL,IAzCI,GAyCC,WAAA,qBAAA,IAEA,EAAA,CAAL,IA3CI,GA2CC,WAAA,eAAA,IACA,EAAA,CAAL,IA5CI,GA4CC,WAAA,sBAAA,IACA,EAAA,CAAL,IA7CI,GA6CC,WAAA,qBAAA,IAEA,EAAA,CAAL,IA/CI,GA+CC,WAAA,eAAA,IACA,EAAA,CAAL,IAhDI,GAgDC,WAAA,sBAAA,IACA,EAAA,CAAL,IAjDI,GAiDC,WAAA,qBAAA,IAEA,EAAA,CAAL,IAnDI,GAmDC,WAAA,iBAAA,IACA,EAAA,CAAL,IApDI,GAoDC,WAAA,wBAAA,IAEA,EAAA,CAAL,IAtDI,GAsDC,WAAA,gBAAA,IAEA,EAAA,CAAL,IAxDI,GAwDC,WAAA,0BAAA,IACA,EAAA,CAAL,IAzDI,GAyDC,WAAA,gCAAA,IAEA,EAAA,CAAL,IA3DI,GA2DC,WAAA,sBAAA,IACA,EAAA,CAAL,IA5DI,GA4DC,WAAA,4BAAA,IAEG,EAAA,CAAR,KA9DI,GA8DI,WAAA,UAAA;AAosCX,GAAW;ACjxCJ,IAAA,KAAA,qCAAsC,YAAY;EAAlD,cAlBP;AAkBO,UAAA,GAAA;AACC,SAAA,YAAY;;EAUlB,oBAA0B;AACxB,SAAK,SAAS,IAAI,OAAO,uBACzB,KAAK,yBAAyB,IAE9B,KAAK,OAAO,iBAAiB,WAAW,KAAK,2BAA2B,KAAK,QAC7E,KAAK,iBAAiB,iCAAiC,KAAK,MAC5D,KAAK,iBAAiB,oCAAoC,KAAK,MAC/D,KAAK,iBAAiB,oCAAoC,KAAK,iBAC/D,KAAK,iBAAiB,mCAAmC,KAAK,MAC9D,KAAK,iBAAiB,2BAA2B,KAAK,mBACtD,KAAK,iBAAiB,2BAA2B,KAAK,mBACtD,KAAK,iBAAiB,qBAAqB,KAAK,MAChD,KAAK,iBAAiB,uBAAuB,KAAK,MAClD,KAAK,iBAAiB,uBAAuB,KAAK,MAClD,KAAK,iBAAiB,qCAAqC,KAAK,+BAChE,KAAK,iBAAiB,qCAAqC,KAAK,MAChE,KAAK,iBAAiB,4BAA4B,KAAK,MAEvD,KAAK,iBAAiB,qBAAqB,KAAK,iBAChD,KAAK,iBAAiB,uBAAuB,KAAK,iBAElD,KAAK,aAAa,EAAC,MAAM,WACzB,KAAK,UACL,KAAK,kBAEL,KAAK,QAAQ,cAAc,KAAK,QAAQ,OAAO,KAC/C,KAAK;;EAGP,SAAe;AACb,OAAO,kBAAqB,KAAK;;EAGnC,eAAqB;AACnB,SAAK,QAAQ;;EAGP,2BAA2B,GAA2B;AAlEhE,QAAA;AAmEI,QAAM,IAAO,EAAM,MACb,IAAY,KAAK;AAEvB,YAAQ,EAAK;WACN,QAAQ;AACX,YAAM,KAAO,KAAK,QAAQ,OAAO,EAAK;AAEtC,iBAAW,MAAU,EAAK,cAAc;AACtC,cAAM,IAAM,SAAS,KACf,IAAe,GAAK,WAAW,GAAK;AAC1C,cAAI,GAAsB,IAAe;AACvC,gBAAM,IAAc,EAAK,aAAa;AACtC,cAAa,IAAI,EAAY,IAC7B,EAAa,IAAI,EAAY,IAC7B,EAAa,IAAI,EAAY;;;AAIjC,YAAI,EAAK,cAAc;AACrB,cAAM,KAAe,EAAK;AAC1B,mBAAW,KAAU,IAAc;AACjC,gBAAM,IAAM,SAAS,IACf,IAAkB,GAAK,WAAW,GAAK;AACzC,eAAyB,MAC3B,GAAgB,QAAQ,GAAa,GAAK;;;AAKhD,iBAAW,MAAQ,GAAK,WAAW;AACjC,cAAM,IAAY,GAAK;AACnB,WAAC,GAAS,MACV,EAAU,OAAO,MAErB,GAAU,WAAW,CAAC,EAAK,MAAM,EAAU;;AAG7C,YAAI,MAAc,EAAK,MAAM;AAC3B,cAAM,KAA8C;AACpD,mBAAW,KAAO,EAAK,YAAY;AACjC,gBAAM,IAAI,EAAK,WAAW;AAC1B,eAAkB,KAAO,IAAI,GAAQ,EAAE,IAAI,EAAE;;AAE/C,UAAA,KAAA,KAAK,mBAAL,QAAA,EAAqB,cAAc;;AAErC;;WAEG,UAAU;AACb,iBAAW,MAAQ,KAAK;AACtB,aAAK,UAAU;AAEjB;;;AAGA,cAAM,IAAI,GAAc,kCAAkC,EAAC,MAAA;;;EAIzD,MAAY;AAClB,QAAI,KAAK,mBAAmB;AAAM;AAElC,QAAM,IAAY,KAAK,iBACjB,IAAkB,KAAK,QAAQ;AACrC,OAAK,KAAK,EAAgB,SAAS,GAAG;AAEtC,QAAM,IAAsB,KAAK,IAC/B,GAAG,EAAgB,IAAI,QACrB,KAAK,IACH,GAAG,GAAe,IAAI,QAAa;AACjC,UAAI,IAAqB;AACzB,aAAI,GAAe,OAAY,KAAW,GAAU,WAE7C,KAAK,IAAI,GAAG,GAAU,QAAQ,OAAO;WAK9C,IAAa,KAAuB,IAAI,IAAsB,IAAI;AAExE,SAAK,eAAe,aAAa,GACjC,KAAK,OAAO,YAAY,EACtB,YAAA,GACA,WAAA,GACA,OAAO,GACP,SAAS,KAAK;;EAIV,mBAAyB;AAC3B,SAAK,QAAQ,WACjB,KAAK;;MAGK,kBAA0B;AACpC,QAAM,IAAa,KAAK,QAAQ,YAC1B,IAAa,KAAK,QAAQ,YAC5B,IAAO,KAAc;AAEzB,WAAI,MAAS,QACX,KAAO,KAAK,QAAQ,OAAO,IAC3B,KAAK,QAAQ,cAAc,KAGtB,KAAK,QAAQ,eAAe;;EAG7B,6BAA6B,GAAoB;AACvD,QAAM,IAAc,EAAsB;AAC1C,OAAK,QAAQ,IAEb,KAAK,yBAAyB;;EAGxB,iBAAuB;AAC7B,QAAI,CAAC,KAAK;AAAW;AACrB,OAAK,QAAQ,KAAK;AAElB,QAAM,IAAO,KAAK,QAAQ;AAC1B,YAAQ,UAAU,IAAI,IAAI,mBAAmB;;GAvK1C;AAAA,GAAA,IAAA,4BACC,EAAA,CAAL,IADI,GACC,WAAA,aAAA,IAEE,EAAA,CAAP,KAHI,GAGG,WAAA,WAAA,IACA,EAAA,CAAP,KAJI,GAIG,WAAA,kBAAA,IACC,EAAA,CAAR,KALI,GAKI,WAAA,qBAAA;AAsKX,GAAW;;;AC7LX,IAAI,UAAU,eAAe;AAC3B,MAAI,SAAS,aAAa,aAAa;AACrC,cAAU,cAAc,SAAS,qBAAqB,EAAE,OAAO,QAAQ,MAAM,SAAU,OAAO;AAC5F,cAAQ,IAAI,eAAe,yCAAyC;AAAA;AAAA,SAEjE;AACL,cAAU,cACP,SAAS,yBAAyB,EAAE,OAAO,WAC3C,MAAM,SAAU,OAAO;AACtB,cAAQ,IAAI,eAAe,yCAAyC;AAAA;AAAA;AAAA;", + "sourcesContent": ["/**\n * @license Fraction.js v4.1.2 23/05/2021\n * https://www.xarg.org/2014/03/rational-numbers-in-javascript/\n *\n * Copyright (c) 2021, Robert Eisele (robert@xarg.org)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n **/\n\n\n/**\n *\n * This class offers the possibility to calculate fractions.\n * You can pass a fraction in different formats. Either as array, as double, as string or as an integer.\n *\n * Array/Object form\n * [ 0 => , 1 => ]\n * [ n => , d => ]\n *\n * Integer form\n * - Single integer value\n *\n * Double form\n * - Single double value\n *\n * String form\n * 123.456 - a simple double\n * 123/456 - a string fraction\n * 123.'456' - a double with repeating decimal places\n * 123.(456) - synonym\n * 123.45'6' - a double with repeating last place\n * 123.45(6) - synonym\n *\n * Example:\n *\n * var f = new Fraction(\"9.4'31'\");\n * f.mul([-4, 3]).div(4.9);\n *\n */\n\n(function(root) {\n\n \"use strict\";\n\n // Maximum search depth for cyclic rational numbers. 2000 should be more than enough.\n // Example: 1/7 = 0.(142857) has 6 repeating decimal places.\n // If MAX_CYCLE_LEN gets reduced, long cycles will not be detected and toString() only gets the first 10 digits\n var MAX_CYCLE_LEN = 2000;\n\n // Parsed data to avoid calling \"new\" all the time\n var P = {\n \"s\": 1,\n \"n\": 0,\n \"d\": 1\n };\n\n function createError(name) {\n\n function errorConstructor() {\n var temp = Error.apply(this, arguments);\n temp['name'] = this['name'] = name;\n this['stack'] = temp['stack'];\n this['message'] = temp['message'];\n }\n\n /**\n * Error constructor\n *\n * @constructor\n */\n function IntermediateInheritor() { }\n IntermediateInheritor.prototype = Error.prototype;\n errorConstructor.prototype = new IntermediateInheritor();\n\n return errorConstructor;\n }\n\n var DivisionByZero = Fraction['DivisionByZero'] = createError('DivisionByZero');\n var InvalidParameter = Fraction['InvalidParameter'] = createError('InvalidParameter');\n\n function assign(n, s) {\n\n if (isNaN(n = parseInt(n, 10))) {\n throwInvalidParam();\n }\n return n * s;\n }\n\n function throwInvalidParam() {\n throw new InvalidParameter();\n }\n\n function factorize(num) {\n\n var factors = {};\n\n var n = num;\n var i = 2;\n var s = 4;\n\n while (s <= n) {\n\n while (n % i === 0) {\n n /= i;\n factors[i] = (factors[i] || 0) + 1;\n }\n s += 1 + 2 * i++;\n }\n\n if (n !== num) {\n if (n > 1)\n factors[n] = (factors[n] || 0) + 1;\n } else {\n factors[num] = (factors[num] || 0) + 1;\n }\n return factors;\n }\n\n var parse = function(p1, p2) {\n\n var n = 0, d = 1, s = 1;\n var v = 0, w = 0, x = 0, y = 1, z = 1;\n\n var A = 0, B = 1;\n var C = 1, D = 1;\n\n var N = 10000000;\n var M;\n\n if (p1 === undefined || p1 === null) {\n /* void */\n } else if (p2 !== undefined) {\n n = p1;\n d = p2;\n s = n * d;\n } else\n switch (typeof p1) {\n\n case \"object\":\n {\n if (\"d\" in p1 && \"n\" in p1) {\n n = p1[\"n\"];\n d = p1[\"d\"];\n if (\"s\" in p1)\n n *= p1[\"s\"];\n } else if (0 in p1) {\n n = p1[0];\n if (1 in p1)\n d = p1[1];\n } else {\n throwInvalidParam();\n }\n s = n * d;\n break;\n }\n case \"number\":\n {\n if (p1 < 0) {\n s = p1;\n p1 = -p1;\n }\n\n if (p1 % 1 === 0) {\n n = p1;\n } else if (p1 > 0) { // check for != 0, scale would become NaN (log(0)), which converges really slow\n\n if (p1 >= 1) {\n z = Math.pow(10, Math.floor(1 + Math.log(p1) / Math.LN10));\n p1 /= z;\n }\n\n // Using Farey Sequences\n // http://www.johndcook.com/blog/2010/10/20/best-rational-approximation/\n\n while (B <= N && D <= N) {\n M = (A + C) / (B + D);\n\n if (p1 === M) {\n if (B + D <= N) {\n n = A + C;\n d = B + D;\n } else if (D > B) {\n n = C;\n d = D;\n } else {\n n = A;\n d = B;\n }\n break;\n\n } else {\n\n if (p1 > M) {\n A += C;\n B += D;\n } else {\n C += A;\n D += B;\n }\n\n if (B > N) {\n n = C;\n d = D;\n } else {\n n = A;\n d = B;\n }\n }\n }\n n *= z;\n } else if (isNaN(p1) || isNaN(p2)) {\n d = n = NaN;\n }\n break;\n }\n case \"string\":\n {\n B = p1.match(/\\d+|./g);\n\n if (B === null)\n throwInvalidParam();\n\n if (B[A] === '-') {// Check for minus sign at the beginning\n s = -1;\n A++;\n } else if (B[A] === '+') {// Check for plus sign at the beginning\n A++;\n }\n\n if (B.length === A + 1) { // Check if it's just a simple number \"1234\"\n w = assign(B[A++], s);\n } else if (B[A + 1] === '.' || B[A] === '.') { // Check if it's a decimal number\n\n if (B[A] !== '.') { // Handle 0.5 and .5\n v = assign(B[A++], s);\n }\n A++;\n\n // Check for decimal places\n if (A + 1 === B.length || B[A + 1] === '(' && B[A + 3] === ')' || B[A + 1] === \"'\" && B[A + 3] === \"'\") {\n w = assign(B[A], s);\n y = Math.pow(10, B[A].length);\n A++;\n }\n\n // Check for repeating places\n if (B[A] === '(' && B[A + 2] === ')' || B[A] === \"'\" && B[A + 2] === \"'\") {\n x = assign(B[A + 1], s);\n z = Math.pow(10, B[A + 1].length) - 1;\n A += 3;\n }\n\n } else if (B[A + 1] === '/' || B[A + 1] === ':') { // Check for a simple fraction \"123/456\" or \"123:456\"\n w = assign(B[A], s);\n y = assign(B[A + 2], 1);\n A += 3;\n } else if (B[A + 3] === '/' && B[A + 1] === ' ') { // Check for a complex fraction \"123 1/2\"\n v = assign(B[A], s);\n w = assign(B[A + 2], s);\n y = assign(B[A + 4], 1);\n A += 5;\n }\n\n if (B.length <= A) { // Check for more tokens on the stack\n d = y * z;\n s = /* void */\n n = x + d * v + z * w;\n break;\n }\n\n /* Fall through on error */\n }\n default:\n throwInvalidParam();\n }\n\n if (d === 0) {\n throw new DivisionByZero();\n }\n\n P[\"s\"] = s < 0 ? -1 : 1;\n P[\"n\"] = Math.abs(n);\n P[\"d\"] = Math.abs(d);\n };\n\n function modpow(b, e, m) {\n\n var r = 1;\n for (; e > 0; b = (b * b) % m, e >>= 1) {\n\n if (e & 1) {\n r = (r * b) % m;\n }\n }\n return r;\n }\n\n\n function cycleLen(n, d) {\n\n for (; d % 2 === 0;\n d /= 2) {\n }\n\n for (; d % 5 === 0;\n d /= 5) {\n }\n\n if (d === 1) // Catch non-cyclic numbers\n return 0;\n\n // If we would like to compute really large numbers quicker, we could make use of Fermat's little theorem:\n // 10^(d-1) % d == 1\n // However, we don't need such large numbers and MAX_CYCLE_LEN should be the capstone,\n // as we want to translate the numbers to strings.\n\n var rem = 10 % d;\n var t = 1;\n\n for (; rem !== 1; t++) {\n rem = rem * 10 % d;\n\n if (t > MAX_CYCLE_LEN)\n return 0; // Returning 0 here means that we don't print it as a cyclic number. It's likely that the answer is `d-1`\n }\n return t;\n }\n\n\n function cycleStart(n, d, len) {\n\n var rem1 = 1;\n var rem2 = modpow(10, len, d);\n\n for (var t = 0; t < 300; t++) { // s < ~log10(Number.MAX_VALUE)\n // Solve 10^s == 10^(s+t) (mod d)\n\n if (rem1 === rem2)\n return t;\n\n rem1 = rem1 * 10 % d;\n rem2 = rem2 * 10 % d;\n }\n return 0;\n }\n\n function gcd(a, b) {\n\n if (!a)\n return b;\n if (!b)\n return a;\n\n while (1) {\n a %= b;\n if (!a)\n return b;\n b %= a;\n if (!b)\n return a;\n }\n };\n\n /**\n * Module constructor\n *\n * @constructor\n * @param {number|Fraction=} a\n * @param {number=} b\n */\n function Fraction(a, b) {\n\n if (!(this instanceof Fraction)) {\n return new Fraction(a, b);\n }\n\n parse(a, b);\n\n a = gcd(P[\"d\"], P[\"n\"]); // Abuse variable a\n\n this[\"s\"] = P[\"s\"];\n this[\"n\"] = P[\"n\"] / a;\n this[\"d\"] = P[\"d\"] / a;\n }\n\n Fraction.prototype = {\n\n \"s\": 1,\n \"n\": 0,\n \"d\": 1,\n\n /**\n * Calculates the absolute value\n *\n * Ex: new Fraction(-4).abs() => 4\n **/\n \"abs\": function() {\n\n return new Fraction(this[\"n\"], this[\"d\"]);\n },\n\n /**\n * Inverts the sign of the current fraction\n *\n * Ex: new Fraction(-4).neg() => 4\n **/\n \"neg\": function() {\n\n return new Fraction(-this[\"s\"] * this[\"n\"], this[\"d\"]);\n },\n\n /**\n * Adds two rational numbers\n *\n * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => 467 / 30\n **/\n \"add\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * this[\"n\"] * P[\"d\"] + P[\"s\"] * this[\"d\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Subtracts two rational numbers\n *\n * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => -427 / 30\n **/\n \"sub\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * this[\"d\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Multiplies two rational numbers\n *\n * Ex: new Fraction(\"-17.(345)\").mul(3) => 5776 / 111\n **/\n \"mul\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Divides two rational numbers\n *\n * Ex: new Fraction(\"-17.(345)\").inverse().div(3)\n **/\n \"div\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"d\"],\n this[\"d\"] * P[\"n\"]\n );\n },\n\n /**\n * Clones the actual object\n *\n * Ex: new Fraction(\"-17.(345)\").clone()\n **/\n \"clone\": function() {\n return new Fraction(this);\n },\n\n /**\n * Calculates the modulo of two rational numbers - a more precise fmod\n *\n * Ex: new Fraction('4.(3)').mod([7, 8]) => (13/3) % (7/8) = (5/6)\n **/\n \"mod\": function(a, b) {\n\n if (isNaN(this['n']) || isNaN(this['d'])) {\n return new Fraction(NaN);\n }\n\n if (a === undefined) {\n return new Fraction(this[\"s\"] * this[\"n\"] % this[\"d\"], 1);\n }\n\n parse(a, b);\n if (0 === P[\"n\"] && 0 === this[\"d\"]) {\n Fraction(0, 0); // Throw DivisionByZero\n }\n\n /*\n * First silly attempt, kinda slow\n *\n return that[\"sub\"]({\n \"n\": num[\"n\"] * Math.floor((this.n / this.d) / (num.n / num.d)),\n \"d\": num[\"d\"],\n \"s\": this[\"s\"]\n });*/\n\n /*\n * New attempt: a1 / b1 = a2 / b2 * q + r\n * => b2 * a1 = a2 * b1 * q + b1 * b2 * r\n * => (b2 * a1 % a2 * b1) / (b1 * b2)\n */\n return new Fraction(\n this[\"s\"] * (P[\"d\"] * this[\"n\"]) % (P[\"n\"] * this[\"d\"]),\n P[\"d\"] * this[\"d\"]\n );\n },\n\n /**\n * Calculates the fractional gcd of two rational numbers\n *\n * Ex: new Fraction(5,8).gcd(3,7) => 1/56\n */\n \"gcd\": function(a, b) {\n\n parse(a, b);\n\n // gcd(a / b, c / d) = gcd(a, c) / lcm(b, d)\n\n return new Fraction(gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]), P[\"d\"] * this[\"d\"]);\n },\n\n /**\n * Calculates the fractional lcm of two rational numbers\n *\n * Ex: new Fraction(5,8).lcm(3,7) => 15\n */\n \"lcm\": function(a, b) {\n\n parse(a, b);\n\n // lcm(a / b, c / d) = lcm(a, c) / gcd(b, d)\n\n if (P[\"n\"] === 0 && this[\"n\"] === 0) {\n return new Fraction;\n }\n return new Fraction(P[\"n\"] * this[\"n\"], gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]));\n },\n\n /**\n * Calculates the ceil of a rational number\n *\n * Ex: new Fraction('4.(3)').ceil() => (5 / 1)\n **/\n \"ceil\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.ceil(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Calculates the floor of a rational number\n *\n * Ex: new Fraction('4.(3)').floor() => (4 / 1)\n **/\n \"floor\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.floor(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Rounds a rational numbers\n *\n * Ex: new Fraction('4.(3)').round() => (4 / 1)\n **/\n \"round\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.round(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Gets the inverse of the fraction, means numerator and denominator are exchanged\n *\n * Ex: new Fraction([-3, 4]).inverse() => -4 / 3\n **/\n \"inverse\": function() {\n\n return new Fraction(this[\"s\"] * this[\"d\"], this[\"n\"]);\n },\n\n /**\n * Calculates the fraction to some rational exponent, if possible\n *\n * Ex: new Fraction(-1,2).pow(-3) => -8\n */\n \"pow\": function(a, b) {\n\n parse(a, b);\n\n // Trivial case when exp is an integer\n\n if (P['d'] === 1) {\n\n if (P['s'] < 0) {\n return new Fraction(Math.pow(this['s'] * this[\"d\"], P['n']), Math.pow(this[\"n\"], P['n']));\n } else {\n return new Fraction(Math.pow(this['s'] * this[\"n\"], P['n']), Math.pow(this[\"d\"], P['n']));\n }\n }\n\n // Negative roots become complex\n // (-a/b)^(c/d) = x\n // <=> (-1)^(c/d) * (a/b)^(c/d) = x\n // <=> (cos(pi) + i*sin(pi))^(c/d) * (a/b)^(c/d) = x # rotate 1 by 180\u00B0\n // <=> (cos(c*pi/d) + i*sin(c*pi/d)) * (a/b)^(c/d) = x # DeMoivre's formula in Q ( https://proofwiki.org/wiki/De_Moivre%27s_Formula/Rational_Index )\n // From which follows that only for c=0 the root is non-complex. c/d is a reduced fraction, so that sin(c/dpi)=0 occurs for d=1, which is handled by our trivial case.\n if (this['s'] < 0) return null;\n\n // Now prime factor n and d\n var N = factorize(this['n']);\n var D = factorize(this['d']);\n\n // Exponentiate and take root for n and d individually\n var n = 1;\n var d = 1;\n for (var k in N) {\n if (k === '1') continue;\n if (k === '0') {\n n = 0;\n break;\n }\n N[k]*= P['n'];\n\n if (N[k] % P['d'] === 0) {\n N[k]/= P['d'];\n } else return null;\n n*= Math.pow(k, N[k]);\n }\n\n for (var k in D) {\n if (k === '1') continue;\n D[k]*= P['n'];\n\n if (D[k] % P['d'] === 0) {\n D[k]/= P['d'];\n } else return null;\n d*= Math.pow(k, D[k]);\n }\n\n if (P['s'] < 0) {\n return new Fraction(d, n);\n }\n return new Fraction(n, d);\n },\n\n /**\n * Check if two rational numbers are the same\n *\n * Ex: new Fraction(19.6).equals([98, 5]);\n **/\n \"equals\": function(a, b) {\n\n parse(a, b);\n return this[\"s\"] * this[\"n\"] * P[\"d\"] === P[\"s\"] * P[\"n\"] * this[\"d\"]; // Same as compare() === 0\n },\n\n /**\n * Check if two rational numbers are the same\n *\n * Ex: new Fraction(19.6).equals([98, 5]);\n **/\n \"compare\": function(a, b) {\n\n parse(a, b);\n var t = (this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * P[\"n\"] * this[\"d\"]);\n return (0 < t) - (t < 0);\n },\n\n \"simplify\": function(eps) {\n\n // First naive implementation, needs improvement\n\n if (isNaN(this['n']) || isNaN(this['d'])) {\n return this;\n }\n\n var cont = this['abs']()['toContinued']();\n\n eps = eps || 0.001;\n\n function rec(a) {\n if (a.length === 1)\n return new Fraction(a[0]);\n return rec(a.slice(1))['inverse']()['add'](a[0]);\n }\n\n for (var i = 0; i < cont.length; i++) {\n var tmp = rec(cont.slice(0, i + 1));\n if (tmp['sub'](this['abs']())['abs']().valueOf() < eps) {\n return tmp['mul'](this['s']);\n }\n }\n return this;\n },\n\n /**\n * Check if two rational numbers are divisible\n *\n * Ex: new Fraction(19.6).divisible(1.5);\n */\n \"divisible\": function(a, b) {\n\n parse(a, b);\n return !(!(P[\"n\"] * this[\"d\"]) || ((this[\"n\"] * P[\"d\"]) % (P[\"n\"] * this[\"d\"])));\n },\n\n /**\n * Returns a decimal representation of the fraction\n *\n * Ex: new Fraction(\"100.'91823'\").valueOf() => 100.91823918239183\n **/\n 'valueOf': function() {\n\n return this[\"s\"] * this[\"n\"] / this[\"d\"];\n },\n\n /**\n * Returns a string-fraction representation of a Fraction object\n *\n * Ex: new Fraction(\"1.'3'\").toFraction() => \"4 1/3\"\n **/\n 'toFraction': function(excludeWhole) {\n\n var whole, str = \"\";\n var n = this[\"n\"];\n var d = this[\"d\"];\n if (this[\"s\"] < 0) {\n str += '-';\n }\n\n if (d === 1) {\n str += n;\n } else {\n\n if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n str += whole;\n str += \" \";\n n %= d;\n }\n\n str += n;\n str += '/';\n str += d;\n }\n return str;\n },\n\n /**\n * Returns a latex representation of a Fraction object\n *\n * Ex: new Fraction(\"1.'3'\").toLatex() => \"\\frac{4}{3}\"\n **/\n 'toLatex': function(excludeWhole) {\n\n var whole, str = \"\";\n var n = this[\"n\"];\n var d = this[\"d\"];\n if (this[\"s\"] < 0) {\n str += '-';\n }\n\n if (d === 1) {\n str += n;\n } else {\n\n if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n str += whole;\n n %= d;\n }\n\n str += \"\\\\frac{\";\n str += n;\n str += '}{';\n str += d;\n str += '}';\n }\n return str;\n },\n\n /**\n * Returns an array of continued fraction elements\n *\n * Ex: new Fraction(\"7/8\").toContinued() => [0,1,7]\n */\n 'toContinued': function() {\n\n var t;\n var a = this['n'];\n var b = this['d'];\n var res = [];\n\n if (isNaN(a) || isNaN(b)) {\n return res;\n }\n\n do {\n res.push(Math.floor(a / b));\n t = a % b;\n a = b;\n b = t;\n } while (a !== 1);\n\n return res;\n },\n\n /**\n * Creates a string representation of a fraction with all digits\n *\n * Ex: new Fraction(\"100.'91823'\").toString() => \"100.(91823)\"\n **/\n 'toString': function(dec) {\n\n var g;\n var N = this[\"n\"];\n var D = this[\"d\"];\n\n if (isNaN(N) || isNaN(D)) {\n return \"NaN\";\n }\n\n dec = dec || 15; // 15 = decimal places when no repetation\n\n var cycLen = cycleLen(N, D); // Cycle length\n var cycOff = cycleStart(N, D, cycLen); // Cycle start\n\n var str = this['s'] === -1 ? \"-\" : \"\";\n\n str += N / D | 0;\n\n N %= D;\n N *= 10;\n\n if (N)\n str += \".\";\n\n if (cycLen) {\n\n for (var i = cycOff; i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n str += \"(\";\n for (var i = cycLen; i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n str += \")\";\n } else {\n for (var i = dec; N && i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n }\n return str;\n }\n };\n\n if (typeof define === \"function\" && define[\"amd\"]) {\n define([], function() {\n return Fraction;\n });\n } else if (typeof exports === \"object\") {\n Object.defineProperty(Fraction, \"__esModule\", { 'value': true });\n Fraction['default'] = Fraction;\n Fraction['Fraction'] = Fraction;\n module['exports'] = Fraction;\n } else {\n root['Fraction'] = Fraction;\n }\n\n})(this);\n", "import Fraction from 'fraction.js'\n\nexport function radian(angle: string): number {\n const coefficient = piCoefficient(angle)\n const fraction = new Fraction(coefficient).valueOf()\n\n return fraction * Math.PI\n}\n\nexport function angleDenominator(angle: string): number {\n const coefficient = piCoefficient(angle)\n const split = coefficient.split('/')\n\n if (split.length === 1) {\n return 1\n } else if (split.length === 2) {\n return parseInt(split[1])\n } else {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n\nexport function angleNumerator(angle: string): number {\n const coefficient = piCoefficient(angle)\n const split = coefficient.split('/')\n\n if (split.length === 1) {\n return parseInt(split[0])\n } else if (split.length === 2) {\n return parseInt(split[0])\n } else {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n\nexport function isAngleLessThan(angle: string, other: string): boolean {\n return new Fraction(piCoefficient(angle)).valueOf() < new Fraction(piCoefficient(other)).valueOf()\n}\n\nexport function isAngleGreaterThan(angle: string, other: string): boolean {\n return new Fraction(piCoefficient(angle)).valueOf() > new Fraction(piCoefficient(other)).valueOf()\n}\n\nexport function isValidAngle(angle: string): boolean {\n if (angle === '0') return true\n if (!/\u03C0/.test(angle)) return false\n\n try {\n const coefficient = piCoefficient(angle)\n new Fraction(coefficient).valueOf()\n\n return true\n } catch (e) {\n return false\n }\n}\n\nexport function piCoefficient(angle: string): string {\n return angle.replace(/(\\d+)\u03C0/g, '$1').replace(/\u03C0/g, '1')\n}\n\nexport function reduceAngle(angle: string): string {\n try {\n const coefficient = piCoefficient(angle)\n const reduced = new Fraction(coefficient).toFraction()\n const split = reduced.split('/')\n\n let numerator: string\n if (split[0] === '0') {\n numerator = '0'\n } else if (split[0] === '1') {\n numerator = `\u03C0`\n } else if (split[0] === '-1') {\n numerator = `-\u03C0`\n } else {\n numerator = `${split[0]}\u03C0`\n }\n\n if (split.length === 1) {\n return numerator\n } else {\n return `${numerator}/${split[1]}`\n }\n } catch (e) {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst COLLECTION_CUTOFF = 1000\nconst BAD_TO_STRING_RESULT = Object.prototype.toString.call({})\nconst RECURSE_LIMIT_DESCRIPTION = '!recursion-limit!'\nconst DEFAULT_RECURSION_LIMIT = 10\n\n// Attempts to give a useful and unambiguous description of the given value.\nexport function describe(value: unknown, recursionLimit = DEFAULT_RECURSION_LIMIT): string {\n return (\n tryDescribeAtomic(value) || tryDescribeCollection(value, recursionLimit) || describeFallback(value, recursionLimit)\n )\n}\n\nfunction tryDescribeAtomic(value: unknown) {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (typeof value === 'string') return `\"${value}\"`\n if (typeof value === 'number') return String(value)\n\n return undefined\n}\n\nfunction tryDescribeCollection(value: unknown, recursionLimit: number) {\n if (recursionLimit === 0) return RECURSE_LIMIT_DESCRIPTION\n if (value instanceof Map) return describeMap(value, recursionLimit)\n if (value instanceof Set) return describeSet(value, recursionLimit)\n const isIterable = (v: unknown): v is Iterable => {\n if ((v as Iterable)[Symbol.iterator] !== undefined) {\n return true\n }\n return false\n }\n if (isIterable(value)) return describeIterable(value, recursionLimit)\n\n return undefined\n}\n\nfunction describeFallback(value: unknown, recursionLimit: number) {\n const defaultString = String(value)\n if (defaultString !== BAD_TO_STRING_RESULT) return defaultString\n\n return describeObject(value, recursionLimit)\n}\n\nfunction describeMap(map: Map, limit: number) {\n const entries = []\n for (const [k, v] of map.entries()) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n const keyDesc = describe(k, limit - 1)\n const valDesc = describe(v, limit - 1)\n entries.push(`${keyDesc}: ${valDesc}`)\n }\n return `Map{${entries.join(', ')}}`\n}\n\nfunction describeSet(set: Set, limit: number) {\n const entries = []\n for (const e of set) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n entries.push(describe(e, limit - 1))\n }\n return `Set{${entries.join(', ')}}`\n}\n\nfunction describeIterable(seq: Iterable, limit: number): string {\n const entries = []\n for (const e of seq) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n entries.push(describe(e, limit - 1))\n }\n const prefix = Array.isArray(seq) ? '' : seq.constructor.name\n return `${prefix}[${entries.join(', ')}]`\n}\n\nfunction describeObject(value: unknown, limit: number) {\n const entries = []\n for (const k in value as Record) {\n if (!Object.prototype.hasOwnProperty.call(value, k)) {\n continue\n }\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n const v = (value as Record)[k]\n const keyDesc = describe(k, limit - 1)\n const valDesc = describe(v, limit - 1)\n entries.push(`${keyDesc}: ${valDesc}`)\n }\n\n const typeName = (value as Record).constructor.name\n const prefix = typeName === {}.constructor.name ? '' : `(Type: ${typeName})`\n return `${prefix}{${entries.join(', ')}}`\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {describe} from './describe'\n\nlet CONSTRUCTOR_CALLS_NESTING = 0\n\nexport class DetailedError extends Error {\n public details: string | undefined\n private detailsObj: unknown\n\n constructor(message: string, detailsObj: unknown) {\n super(message)\n\n this.detailsObj = detailsObj\n this.name = 'Error'\n this.message = message\n this.stack = new Error().stack\n if (this.stack !== undefined) {\n this.stack = this.stack.replace(/^Error\\n\\s+at new DetailedError (\\S+)\\s?\\n\\s+at /, '\\n ')\n }\n\n CONSTRUCTOR_CALLS_NESTING++\n try {\n this.details =\n CONSTRUCTOR_CALLS_NESTING === 1\n ? describe(this.detailsObj)\n : '(failed to describe detailsObj due to possibly re-entrancy)'\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.error(ex)\n this.details = '(failed to describe detailsObj, see the console for details)'\n } finally {\n CONSTRUCTOR_CALLS_NESTING--\n }\n }\n}\n", "type UnicodeFraction = {character: string; ref: string; value: number}\n\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const UNICODE_FRACTIONS = [\n {character: '\\u00BD', ref: '\u00BD', expanded: '1/2', value: 1 / 2},\n {character: '\\u00BC', ref: '\u00BC', expanded: '1/4', value: 1 / 4},\n {character: '\\u00BE', ref: '\u00BE', expanded: '3/4', value: 3 / 4},\n {character: '\\u2153', ref: '\u2153', expanded: '1/3', value: 1 / 3},\n {character: '\\u2154', ref: '\u2154', expanded: '2/3', value: 2 / 3},\n {character: '\\u2155', ref: '\u2155', expanded: '1/5', value: 1 / 5},\n {character: '\\u2156', ref: '\u2156', expanded: '2/5', value: 2 / 5},\n {character: '\\u2157', ref: '\u2157', expanded: '3/5', value: 3 / 5},\n {character: '\\u2158', ref: '\u2158', expanded: '4/5', value: 4 / 5},\n {character: '\\u2159', ref: '\u2159', expanded: '1/6', value: 1 / 6},\n {character: '\\u215A', ref: '\u215A', expanded: '5/6', value: 5 / 6},\n {character: '\\u2150', ref: '\u2150', expanded: '1/7', value: 1 / 7},\n {character: '\\u215B', ref: '\u215B', expanded: '1/8', value: 1 / 8},\n {character: '\\u215C', ref: '\u215C', expanded: '3/8', value: 3 / 8},\n {character: '\\u215D', ref: '\u215D', expanded: '5/8', value: 5 / 8},\n {character: '\\u215E', ref: '\u215E', expanded: '7/8', value: 7 / 8},\n {character: '\\u2151', ref: '\u2151', expanded: '1/9', value: 1 / 9},\n {character: '\\u2152', ref: '\u2152', expanded: '1/10', value: 1 / 10}\n]\n\n/**\n * Stores formatting options, for determining what string output should look\n * like.\n */\nexport class Format {\n /**\n * Returns an approximated result, but with the constraint that when it\n * changes slightly it should \"look the same\". (It should look good when\n * varying and animated.)\n */\n static readonly CONSISTENT = new Format(false, 0, 2, ', ')\n\n /**\n * Returns an accurate result, but favoring looking nice over being small.\n */\n static readonly EXACT = new Format(true, 0, undefined, ', ')\n\n /**\n * Returns an accurate result, favoring being small over looking nice.\n */\n static readonly MINIFIED = new Format(true, 0, undefined, ',')\n\n /**\n * Returns an approximated result, strongly favoring looking nice.\n */\n static readonly SIMPLIFIED = new Format(true, 0.0005, 3, ', ')\n\n /**\n * Parses the given text into a float. Works for text created by\n * [[formatFloat]].\n */\n static parseFloat(text: string): number {\n if (text.length === 0) {\n throw new Error(`Not a number: '${text}'`)\n }\n if (text[0] === '-') {\n return -Format.parseFloat(text.substr(1))\n }\n if (text[0] === '\\u221A') {\n return Math.sqrt(Format.parseFloat(text.substr(1)))\n }\n\n const fraction = Format.matchUnicodeFraction(e => e.character === text)\n if (fraction !== undefined) {\n return fraction.value\n }\n\n const result = parseFloat(text)\n if (isNaN(result)) {\n throw new Error(`Not a number: '${text}'`)\n }\n return result\n }\n\n /**\n * Corrects a value to a nearby simple fraction or root thereof, such as\n * sqrt(1/2), so it can be printed compactly.\n *\n * @param value The value to round.\n * @param epsilon The maximum offset error introduced by the rounding.\n */\n static simplifyByRounding(value: number, epsilon: number): number {\n if (value < 0) {\n return -Format.simplifyByRounding(-value, epsilon)\n }\n\n const r = value % 1\n if (r <= epsilon || 1 - r <= epsilon) {\n return Math.round(value)\n }\n\n const fraction = Format.matchUnicodeFraction(e => Math.abs(e.value - value) <= epsilon)\n if (fraction !== undefined) {\n return fraction.value\n }\n\n const rootFraction = Format.matchUnicodeFraction(e => Math.abs(Math.sqrt(e.value) - value) <= epsilon)\n if (rootFraction !== undefined) {\n return Math.sqrt(rootFraction.value)\n }\n\n return value\n }\n\n /**\n * Returns the first element of an array matching the given predicate, or else\n * returns undefined.\n *\n * @hidden\n */\n static matchUnicodeFraction(predicate: (arrayItem: UnicodeFraction) => boolean): UnicodeFraction | undefined {\n for (const each of UNICODE_FRACTIONS) {\n if (predicate(each)) return each\n }\n return undefined\n }\n\n public allowAbbreviation: boolean\n public maxAbbreviationError: number\n public fixedDigits: number | undefined\n public itemSeparator: string\n\n /**\n * @param allowAbbreviation Should outputs be shortened, if possible?\n * @param maxAbbreviationError How much error is abbreviating allowed to introduce?\n * @param fixedDigits Use toFixed? How many digits?\n * @param itemSeparator What should list items be separated by?\n */\n constructor(\n allowAbbreviation: boolean,\n maxAbbreviationError: number,\n fixedDigits: number | undefined,\n itemSeparator: string\n ) {\n this.allowAbbreviation = allowAbbreviation\n this.maxAbbreviationError = maxAbbreviationError\n this.fixedDigits = fixedDigits\n this.itemSeparator = itemSeparator\n }\n\n formatFloat(f: number): string {\n if (this.allowAbbreviation) {\n return this.abbreviateFloat(f, this.maxAbbreviationError, this.fixedDigits)\n }\n if (this.fixedDigits !== undefined) {\n return f.toFixed(this.fixedDigits)\n }\n return String(f)\n }\n\n /**\n * Returns a string representation of a float, taking advantage of unicode\n * fractions and square roots.\n *\n * @param value The value to represent as a string.\n * @param epsilon The maximum error introduced by using an expression.\n * @param digits digits The number of digits to use if no expression matches.\n */\n private abbreviateFloat(value: number, epsilon = 0, digits: number | undefined = undefined): string {\n if (Math.abs(value) < epsilon) return '0'\n if (value < 0) return `-${this.abbreviateFloat(-value, epsilon, digits)}`\n\n const fraction = Format.matchUnicodeFraction(e => Math.abs(e.value - value) <= epsilon)\n if (fraction !== undefined) {\n return fraction.character\n }\n\n const rootFraction = Format.matchUnicodeFraction(e => Math.abs(Math.sqrt(e.value) - value) <= epsilon)\n if (rootFraction !== undefined) {\n return `\\u221A${rootFraction.character}`\n }\n\n if (value % 1 !== 0 && digits !== undefined) {\n return value.toFixed(digits)\n }\n\n return value.toString()\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Util {\n static need(expression: boolean | unknown, message: string, args?: unknown[]): void {\n if (expression !== true) {\n const argDesc = args === undefined ? '(not provided)' : `[${Array.prototype.slice.call(args).join(', ')}]`\n const msgDesc = message === undefined ? '(not provided)' : message\n const msg = `Precondition failed\\n\\nMessage: ${msgDesc}\\n\\nArgs: ${argDesc}`\n throw new Error(msg)\n }\n }\n\n static notNull(v: T): asserts v is NonNullable {\n Util.need(v !== null && v !== undefined, 'notNull')\n }\n\n static snappedCosSin(radians: number): number[] {\n const unit = Math.PI / 4\n const i = Math.round(radians / unit)\n if (i * unit === radians) {\n const s = Math.sqrt(0.5)\n const snaps = [\n [1, 0],\n [s, s],\n [0, 1],\n [-s, s],\n [-1, 0],\n [-s, -s],\n [0, -1],\n [s, -s]\n ]\n return snaps[i & 7]\n }\n return [Math.cos(radians), Math.sin(radians)]\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DetailedError} from './detailed-error'\nimport {Format} from './format'\nimport {Util} from './util'\n\nexport class Complex {\n static readonly ZERO = new Complex(0, 0)\n static readonly ONE = new Complex(1, 0)\n static readonly I = new Complex(0, 1)\n\n public real: number\n public imag: number\n\n static from(v: number | Complex): Complex {\n if (v instanceof Complex) {\n return v\n }\n if (typeof v === 'number') {\n return new Complex(v, 0)\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n static polar(magnitude: number, phase: number): Complex {\n const [cos, sin] = Util.snappedCosSin(phase)\n return new Complex(magnitude * cos, magnitude * sin)\n }\n\n static realPartOf(v: number | Complex): number {\n if (v instanceof Complex) {\n return v.real\n }\n if (typeof v === 'number') {\n return v\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n static imagPartOf(v: number | Complex): number {\n if (v instanceof Complex) {\n return v.imag\n }\n if (typeof v === 'number') {\n return 0\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n constructor(real: number, imag: number) {\n this.real = real\n this.imag = imag\n }\n\n static rootsOfQuadratic(a: number | Complex, b: number | Complex, c: number | Complex): Complex[] {\n a = Complex.from(a)\n b = Complex.from(b)\n c = Complex.from(c)\n\n if (a.isEqualTo(0)) {\n if (!b.isEqualTo(0)) {\n return [c.times(-1).dividedBy(b)]\n }\n if (!c.isEqualTo(0)) {\n return []\n }\n throw Error('Degenerate')\n }\n\n const difs = b.times(b).minus(a.times(c).times(4)).sqrts()\n const mid = b.times(-1)\n const denom = a.times(2)\n return difs.map(d => mid.minus(d).dividedBy(denom))\n }\n\n isEqualTo(other: unknown): boolean {\n if (other instanceof Complex) {\n return this.real === other.real && this.imag === other.imag\n }\n if (typeof other === 'number') {\n return this.real === other && this.imag === 0\n }\n return false\n }\n\n isApproximatelyEqualTo(other: number | Complex | unknown, epsilon: number): boolean {\n if (other instanceof Complex || typeof other === 'number') {\n const d = this.minus(Complex.from(other))\n return Math.abs(d.real) <= epsilon && Math.abs(d.imag) <= epsilon && d.abs() <= epsilon\n }\n return false\n }\n\n norm2(): number {\n return this.real * this.real + this.imag * this.imag\n }\n\n abs(): number {\n return Math.sqrt(this.norm2())\n }\n\n unit(): Complex {\n const m = this.norm2()\n if (m < 0.00001) {\n return Complex.polar(1, this.phase())\n }\n return this.dividedBy(Math.sqrt(m))\n }\n\n plus(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real + c.real, this.imag + c.imag)\n }\n\n minus(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real - c.real, this.imag - c.imag)\n }\n\n times(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real * c.real - this.imag * c.imag, this.real * c.imag + this.imag * c.real)\n }\n\n dividedBy(v: number | Complex): Complex {\n const c = Complex.from(v)\n const d = c.norm2()\n if (d === 0) {\n throw new Error('Division by Zero')\n }\n\n const n = this.times(c.conjugate())\n return new Complex(n.real / d, n.imag / d)\n }\n\n sqrts(): [Complex] | [Complex, Complex] {\n const [r, i] = [this.real, this.imag]\n const m = Math.sqrt(Math.sqrt(r * r + i * i))\n if (m === 0) {\n return [Complex.ZERO]\n }\n if (i === 0 && r < 0) {\n return [new Complex(0, m), new Complex(0, -m)]\n }\n\n const a = this.phase() / 2\n const c = Complex.polar(m, a)\n return [c, c.times(-1)]\n }\n\n conjugate(): Complex {\n return new Complex(this.real, -this.imag)\n }\n\n toString(format?: Format): string {\n format = format || Format.EXACT\n return format.allowAbbreviation ? this.toStringAllowSingleValue(format) : this.toStringBothValues(format)\n }\n\n neg(): Complex {\n return new Complex(-this.real, -this.imag)\n }\n\n raisedTo(exponent: number | Complex): Complex {\n if (exponent === 0.5 && this.imag === 0 && this.real >= 0) {\n return new Complex(Math.sqrt(this.real), 0)\n }\n if (Complex.ZERO.isEqualTo(exponent)) {\n return Complex.ONE\n }\n if (this.isEqualTo(Complex.ZERO)) {\n return Complex.ZERO\n }\n return this.ln().times(Complex.from(exponent)).exp()\n }\n\n exp(): Complex {\n return Complex.polar(Math.exp(this.real), this.imag)\n }\n\n cos(): Complex {\n const z = this.times(Complex.I)\n return z.exp().plus(z.neg().exp()).times(0.5)\n }\n\n sin(): Complex {\n const z = this.times(Complex.I)\n return z.exp().minus(z.neg().exp()).dividedBy(new Complex(0, 2))\n }\n\n tan(): Complex {\n return this.sin().dividedBy(this.cos())\n }\n\n ln(): Complex {\n return new Complex(Math.log(this.abs()), this.phase())\n }\n\n phase(): number {\n return Math.atan2(this.imag, this.real)\n }\n\n private toStringAllowSingleValue(format: Format): string {\n if (Math.abs(this.imag) <= format.maxAbbreviationError) {\n return format.formatFloat(this.real)\n }\n if (Math.abs(this.real) <= format.maxAbbreviationError) {\n if (Math.abs(this.imag - 1) <= format.maxAbbreviationError) {\n return 'i'\n }\n if (Math.abs(this.imag + 1) <= format.maxAbbreviationError) {\n return '-i'\n }\n return `${format.formatFloat(this.imag)}i`\n }\n\n return this.toStringBothValues(format)\n }\n\n private toStringBothValues(format: Format): string {\n const separator = this.imag >= 0 ? '+' : '-'\n const imagFactor =\n format.allowAbbreviation && Math.abs(Math.abs(this.imag) - 1) <= format.maxAbbreviationError\n ? ''\n : format.formatFloat(Math.abs(this.imag))\n const prefix = format.allowAbbreviation || format.fixedDigits === undefined || this.real < 0 ? '' : '+'\n return `${prefix + format.formatFloat(this.real) + separator + imagFactor}i`\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function hasOwnProperty(obj: unknown, key: K): obj is Record {\n return obj !== null && obj !== undefined && key in (obj as Record)\n}\n\nexport type ArrayIsh =\n | unknown[]\n | Float32Array\n | Float64Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Uint8ClampedArray\n\nconst GENERIC_ARRAY_TYPES = [\n Float32Array,\n Float64Array,\n Int8Array,\n Int16Array,\n Int32Array,\n Uint8Array,\n Uint16Array,\n Uint32Array,\n Uint8ClampedArray\n]\n\nexport function equate(subject: unknown, other: unknown): boolean {\n if (subject === other || (isExactlyNaN(subject) && isExactlyNaN(other))) {\n return true\n }\n\n const customEquality = tryEquateCustom(subject, other)\n if (customEquality !== undefined) {\n return customEquality\n }\n if (isAtomic(subject) || isAtomic(other) || !eqType(subject, other)) {\n return false\n }\n\n if (subject instanceof Map && other instanceof Map) {\n return equateMaps(subject, other)\n }\n if (subject instanceof Set && other instanceof Set) {\n return equateSets(subject, other)\n }\n if (isIndexable(subject) && isIndexable(other)) {\n return equateIndexables(subject, other)\n }\n\n return equateObjects(subject, other)\n}\n\nfunction isIndexable(value: unknown): value is ArrayIsh {\n return Array.isArray(value) || !GENERIC_ARRAY_TYPES.every(t => !(value instanceof t))\n}\n\nfunction isExactlyNaN(v: unknown) {\n return typeof v === 'number' && isNaN(v)\n}\n\nfunction tryEquateCustom(subject: unknown, other: unknown): boolean | undefined {\n if (!isAtomic(subject) && hasOwnProperty(subject, 'isEqualTo') && typeof subject.isEqualTo === 'function') {\n return subject.isEqualTo(other) as boolean\n }\n if (!isAtomic(other) && hasOwnProperty(other, 'isEqualTo') && typeof other.isEqualTo === 'function') {\n return other.isEqualTo(subject) as boolean\n }\n return undefined\n}\n\ntype Atomic = null | undefined | string | number | boolean\n\nfunction isAtomic(value: unknown): value is Atomic {\n return (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n}\n\nfunction equateMaps(subject: Map, other: Map) {\n if (subject.size !== other.size) {\n return false\n }\n for (const [k, v] of subject) {\n if (!other.has(k)) {\n return false\n }\n const otherV = other.get(k)\n if (!equate(v, otherV)) {\n return false\n }\n }\n return true\n}\n\nfunction equateSets(subject: Set, other: Set) {\n if (subject.size !== other.size) {\n return false\n }\n for (const k of subject) {\n if (!other.has(k)) {\n return false\n }\n }\n return true\n}\n\nfunction eqType(subject: unknown, other: unknown): boolean {\n return typeof subject === typeof other\n}\n\nfunction equateIndexables(subject: ArrayIsh, other: ArrayIsh) {\n if (subject.length !== other.length) {\n return false\n }\n for (let i = 0; i < subject.length; i++) {\n if (!equate(subject[i], other[i])) {\n return false\n }\n }\n return true\n}\n\nfunction objectKeys(obj: unknown) {\n const result = new Set()\n for (const k in obj as Record) {\n if (hasOwnProperty(obj, k)) {\n result.add(k)\n }\n }\n return result\n}\n\nfunction equateObjects(subject: unknown, other: unknown) {\n const keys = objectKeys(subject)\n if (!equateSets(keys, objectKeys(other))) {\n return false\n }\n\n for (const k of keys) {\n if (k === Symbol.iterator) {\n continue\n }\n if (!equate((subject as Record)[k as string], (other as Record)[k as string])) {\n return false\n }\n }\n\n const hasSubjectIter = hasOwnProperty(subject, Symbol.iterator)\n const hasOtherIter = hasOwnProperty(other, Symbol.iterator)\n if (hasSubjectIter !== hasOtherIter) {\n return false\n }\n if (hasSubjectIter && hasOtherIter) {\n if (!equateIterables(subject as Iterable, other as Iterable)) {\n return false\n }\n }\n\n return true\n}\n\nfunction equateIterables(subject: Iterable, other: Iterable) {\n const otherIter = other[Symbol.iterator]()\n for (const subjectItem of subject) {\n const otherItemDone = otherIter.next()\n if (otherItemDone.done || !equate(subjectItem, otherItemDone.value)) {\n return false\n }\n }\n return otherIter.next().done\n}\n", "export const SerializedHGateType = 'H'\n\nexport type SerializedHGate = {\n type: typeof SerializedHGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedXGateType = 'X'\n\nexport type SerializedXGate = {\n type: typeof SerializedXGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedYGateType = 'Y'\n\nexport type SerializedYGate = {\n type: typeof SerializedYGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedZGateType = 'Z'\n\nexport type SerializedZGate = {\n type: typeof SerializedZGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedPhaseGateType = 'P'\n\nexport type SerializedPhaseGate = {\n type: typeof SerializedPhaseGateType\n angle?: string\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedTGateType = 'T'\n\nexport type SerializedTGate = {\n type: typeof SerializedTGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedRnotGateType = 'X^\u00BD'\n\nexport type SerializedRnotGate = {\n type: typeof SerializedRnotGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedRxGateType = 'Rx'\n\nexport type SerializedRxGate = {\n type: typeof SerializedRxGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedRyGateType = 'Ry'\n\nexport type SerializedRyGate = {\n type: typeof SerializedRyGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedRzGateType = 'Rz'\n\nexport type SerializedRzGate = {\n type: typeof SerializedRzGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedSwapGateType = 'Swap'\n\nexport type SerializedSwapGate = {\n type: typeof SerializedSwapGateType\n targets: [number, number]\n controls?: number[]\n}\n", "export const SerializedControlGateType = '\u2022'\n\nexport type SerializedControlGate = {\n type: typeof SerializedControlGateType\n targets: number[]\n}\n", "export const SerializedBlochDisplayType = 'Bloch'\n\nexport type SerializedBlochDisplay = {\n type: typeof SerializedBlochDisplayType\n targets: number[]\n}\n", "export const SerializedWrite0GateType = '|0>'\nexport const SerializedWrite1GateType = '|1>'\n\nexport type SerializedWriteGate = {\n type: typeof SerializedWrite0GateType | typeof SerializedWrite1GateType\n targets: number[]\n}\n", "export const SerializedMeasurementGateType = 'Measure'\n\nexport type SerializedMeasurementGate = {\n type: typeof SerializedMeasurementGateType\n targets: number[]\n flag?: string\n}\n", "/**\n * @license Fraction.js v4.1.2 23/05/2021\n * https://www.xarg.org/2014/03/rational-numbers-in-javascript/\n *\n * Copyright (c) 2021, Robert Eisele (robert@xarg.org)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n **/\n\n\n/**\n *\n * This class offers the possibility to calculate fractions.\n * You can pass a fraction in different formats. Either as array, as double, as string or as an integer.\n *\n * Array/Object form\n * [ 0 => , 1 => ]\n * [ n => , d => ]\n *\n * Integer form\n * - Single integer value\n *\n * Double form\n * - Single double value\n *\n * String form\n * 123.456 - a simple double\n * 123/456 - a string fraction\n * 123.'456' - a double with repeating decimal places\n * 123.(456) - synonym\n * 123.45'6' - a double with repeating last place\n * 123.45(6) - synonym\n *\n * Example:\n *\n * var f = new Fraction(\"9.4'31'\");\n * f.mul([-4, 3]).div(4.9);\n *\n */\n\n(function(root) {\n\n \"use strict\";\n\n // Maximum search depth for cyclic rational numbers. 2000 should be more than enough.\n // Example: 1/7 = 0.(142857) has 6 repeating decimal places.\n // If MAX_CYCLE_LEN gets reduced, long cycles will not be detected and toString() only gets the first 10 digits\n var MAX_CYCLE_LEN = 2000;\n\n // Parsed data to avoid calling \"new\" all the time\n var P = {\n \"s\": 1,\n \"n\": 0,\n \"d\": 1\n };\n\n function createError(name) {\n\n function errorConstructor() {\n var temp = Error.apply(this, arguments);\n temp['name'] = this['name'] = name;\n this['stack'] = temp['stack'];\n this['message'] = temp['message'];\n }\n\n /**\n * Error constructor\n *\n * @constructor\n */\n function IntermediateInheritor() { }\n IntermediateInheritor.prototype = Error.prototype;\n errorConstructor.prototype = new IntermediateInheritor();\n\n return errorConstructor;\n }\n\n var DivisionByZero = Fraction['DivisionByZero'] = createError('DivisionByZero');\n var InvalidParameter = Fraction['InvalidParameter'] = createError('InvalidParameter');\n\n function assign(n, s) {\n\n if (isNaN(n = parseInt(n, 10))) {\n throwInvalidParam();\n }\n return n * s;\n }\n\n function throwInvalidParam() {\n throw new InvalidParameter();\n }\n\n function factorize(num) {\n\n var factors = {};\n\n var n = num;\n var i = 2;\n var s = 4;\n\n while (s <= n) {\n\n while (n % i === 0) {\n n /= i;\n factors[i] = (factors[i] || 0) + 1;\n }\n s += 1 + 2 * i++;\n }\n\n if (n !== num) {\n if (n > 1)\n factors[n] = (factors[n] || 0) + 1;\n } else {\n factors[num] = (factors[num] || 0) + 1;\n }\n return factors;\n }\n\n var parse = function(p1, p2) {\n\n var n = 0, d = 1, s = 1;\n var v = 0, w = 0, x = 0, y = 1, z = 1;\n\n var A = 0, B = 1;\n var C = 1, D = 1;\n\n var N = 10000000;\n var M;\n\n if (p1 === undefined || p1 === null) {\n /* void */\n } else if (p2 !== undefined) {\n n = p1;\n d = p2;\n s = n * d;\n } else\n switch (typeof p1) {\n\n case \"object\":\n {\n if (\"d\" in p1 && \"n\" in p1) {\n n = p1[\"n\"];\n d = p1[\"d\"];\n if (\"s\" in p1)\n n *= p1[\"s\"];\n } else if (0 in p1) {\n n = p1[0];\n if (1 in p1)\n d = p1[1];\n } else {\n throwInvalidParam();\n }\n s = n * d;\n break;\n }\n case \"number\":\n {\n if (p1 < 0) {\n s = p1;\n p1 = -p1;\n }\n\n if (p1 % 1 === 0) {\n n = p1;\n } else if (p1 > 0) { // check for != 0, scale would become NaN (log(0)), which converges really slow\n\n if (p1 >= 1) {\n z = Math.pow(10, Math.floor(1 + Math.log(p1) / Math.LN10));\n p1 /= z;\n }\n\n // Using Farey Sequences\n // http://www.johndcook.com/blog/2010/10/20/best-rational-approximation/\n\n while (B <= N && D <= N) {\n M = (A + C) / (B + D);\n\n if (p1 === M) {\n if (B + D <= N) {\n n = A + C;\n d = B + D;\n } else if (D > B) {\n n = C;\n d = D;\n } else {\n n = A;\n d = B;\n }\n break;\n\n } else {\n\n if (p1 > M) {\n A += C;\n B += D;\n } else {\n C += A;\n D += B;\n }\n\n if (B > N) {\n n = C;\n d = D;\n } else {\n n = A;\n d = B;\n }\n }\n }\n n *= z;\n } else if (isNaN(p1) || isNaN(p2)) {\n d = n = NaN;\n }\n break;\n }\n case \"string\":\n {\n B = p1.match(/\\d+|./g);\n\n if (B === null)\n throwInvalidParam();\n\n if (B[A] === '-') {// Check for minus sign at the beginning\n s = -1;\n A++;\n } else if (B[A] === '+') {// Check for plus sign at the beginning\n A++;\n }\n\n if (B.length === A + 1) { // Check if it's just a simple number \"1234\"\n w = assign(B[A++], s);\n } else if (B[A + 1] === '.' || B[A] === '.') { // Check if it's a decimal number\n\n if (B[A] !== '.') { // Handle 0.5 and .5\n v = assign(B[A++], s);\n }\n A++;\n\n // Check for decimal places\n if (A + 1 === B.length || B[A + 1] === '(' && B[A + 3] === ')' || B[A + 1] === \"'\" && B[A + 3] === \"'\") {\n w = assign(B[A], s);\n y = Math.pow(10, B[A].length);\n A++;\n }\n\n // Check for repeating places\n if (B[A] === '(' && B[A + 2] === ')' || B[A] === \"'\" && B[A + 2] === \"'\") {\n x = assign(B[A + 1], s);\n z = Math.pow(10, B[A + 1].length) - 1;\n A += 3;\n }\n\n } else if (B[A + 1] === '/' || B[A + 1] === ':') { // Check for a simple fraction \"123/456\" or \"123:456\"\n w = assign(B[A], s);\n y = assign(B[A + 2], 1);\n A += 3;\n } else if (B[A + 3] === '/' && B[A + 1] === ' ') { // Check for a complex fraction \"123 1/2\"\n v = assign(B[A], s);\n w = assign(B[A + 2], s);\n y = assign(B[A + 4], 1);\n A += 5;\n }\n\n if (B.length <= A) { // Check for more tokens on the stack\n d = y * z;\n s = /* void */\n n = x + d * v + z * w;\n break;\n }\n\n /* Fall through on error */\n }\n default:\n throwInvalidParam();\n }\n\n if (d === 0) {\n throw new DivisionByZero();\n }\n\n P[\"s\"] = s < 0 ? -1 : 1;\n P[\"n\"] = Math.abs(n);\n P[\"d\"] = Math.abs(d);\n };\n\n function modpow(b, e, m) {\n\n var r = 1;\n for (; e > 0; b = (b * b) % m, e >>= 1) {\n\n if (e & 1) {\n r = (r * b) % m;\n }\n }\n return r;\n }\n\n\n function cycleLen(n, d) {\n\n for (; d % 2 === 0;\n d /= 2) {\n }\n\n for (; d % 5 === 0;\n d /= 5) {\n }\n\n if (d === 1) // Catch non-cyclic numbers\n return 0;\n\n // If we would like to compute really large numbers quicker, we could make use of Fermat's little theorem:\n // 10^(d-1) % d == 1\n // However, we don't need such large numbers and MAX_CYCLE_LEN should be the capstone,\n // as we want to translate the numbers to strings.\n\n var rem = 10 % d;\n var t = 1;\n\n for (; rem !== 1; t++) {\n rem = rem * 10 % d;\n\n if (t > MAX_CYCLE_LEN)\n return 0; // Returning 0 here means that we don't print it as a cyclic number. It's likely that the answer is `d-1`\n }\n return t;\n }\n\n\n function cycleStart(n, d, len) {\n\n var rem1 = 1;\n var rem2 = modpow(10, len, d);\n\n for (var t = 0; t < 300; t++) { // s < ~log10(Number.MAX_VALUE)\n // Solve 10^s == 10^(s+t) (mod d)\n\n if (rem1 === rem2)\n return t;\n\n rem1 = rem1 * 10 % d;\n rem2 = rem2 * 10 % d;\n }\n return 0;\n }\n\n function gcd(a, b) {\n\n if (!a)\n return b;\n if (!b)\n return a;\n\n while (1) {\n a %= b;\n if (!a)\n return b;\n b %= a;\n if (!b)\n return a;\n }\n };\n\n /**\n * Module constructor\n *\n * @constructor\n * @param {number|Fraction=} a\n * @param {number=} b\n */\n function Fraction(a, b) {\n\n if (!(this instanceof Fraction)) {\n return new Fraction(a, b);\n }\n\n parse(a, b);\n\n a = gcd(P[\"d\"], P[\"n\"]); // Abuse variable a\n\n this[\"s\"] = P[\"s\"];\n this[\"n\"] = P[\"n\"] / a;\n this[\"d\"] = P[\"d\"] / a;\n }\n\n Fraction.prototype = {\n\n \"s\": 1,\n \"n\": 0,\n \"d\": 1,\n\n /**\n * Calculates the absolute value\n *\n * Ex: new Fraction(-4).abs() => 4\n **/\n \"abs\": function() {\n\n return new Fraction(this[\"n\"], this[\"d\"]);\n },\n\n /**\n * Inverts the sign of the current fraction\n *\n * Ex: new Fraction(-4).neg() => 4\n **/\n \"neg\": function() {\n\n return new Fraction(-this[\"s\"] * this[\"n\"], this[\"d\"]);\n },\n\n /**\n * Adds two rational numbers\n *\n * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => 467 / 30\n **/\n \"add\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * this[\"n\"] * P[\"d\"] + P[\"s\"] * this[\"d\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Subtracts two rational numbers\n *\n * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => -427 / 30\n **/\n \"sub\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * this[\"d\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Multiplies two rational numbers\n *\n * Ex: new Fraction(\"-17.(345)\").mul(3) => 5776 / 111\n **/\n \"mul\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"n\"],\n this[\"d\"] * P[\"d\"]\n );\n },\n\n /**\n * Divides two rational numbers\n *\n * Ex: new Fraction(\"-17.(345)\").inverse().div(3)\n **/\n \"div\": function(a, b) {\n\n parse(a, b);\n return new Fraction(\n this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"d\"],\n this[\"d\"] * P[\"n\"]\n );\n },\n\n /**\n * Clones the actual object\n *\n * Ex: new Fraction(\"-17.(345)\").clone()\n **/\n \"clone\": function() {\n return new Fraction(this);\n },\n\n /**\n * Calculates the modulo of two rational numbers - a more precise fmod\n *\n * Ex: new Fraction('4.(3)').mod([7, 8]) => (13/3) % (7/8) = (5/6)\n **/\n \"mod\": function(a, b) {\n\n if (isNaN(this['n']) || isNaN(this['d'])) {\n return new Fraction(NaN);\n }\n\n if (a === undefined) {\n return new Fraction(this[\"s\"] * this[\"n\"] % this[\"d\"], 1);\n }\n\n parse(a, b);\n if (0 === P[\"n\"] && 0 === this[\"d\"]) {\n Fraction(0, 0); // Throw DivisionByZero\n }\n\n /*\n * First silly attempt, kinda slow\n *\n return that[\"sub\"]({\n \"n\": num[\"n\"] * Math.floor((this.n / this.d) / (num.n / num.d)),\n \"d\": num[\"d\"],\n \"s\": this[\"s\"]\n });*/\n\n /*\n * New attempt: a1 / b1 = a2 / b2 * q + r\n * => b2 * a1 = a2 * b1 * q + b1 * b2 * r\n * => (b2 * a1 % a2 * b1) / (b1 * b2)\n */\n return new Fraction(\n this[\"s\"] * (P[\"d\"] * this[\"n\"]) % (P[\"n\"] * this[\"d\"]),\n P[\"d\"] * this[\"d\"]\n );\n },\n\n /**\n * Calculates the fractional gcd of two rational numbers\n *\n * Ex: new Fraction(5,8).gcd(3,7) => 1/56\n */\n \"gcd\": function(a, b) {\n\n parse(a, b);\n\n // gcd(a / b, c / d) = gcd(a, c) / lcm(b, d)\n\n return new Fraction(gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]), P[\"d\"] * this[\"d\"]);\n },\n\n /**\n * Calculates the fractional lcm of two rational numbers\n *\n * Ex: new Fraction(5,8).lcm(3,7) => 15\n */\n \"lcm\": function(a, b) {\n\n parse(a, b);\n\n // lcm(a / b, c / d) = lcm(a, c) / gcd(b, d)\n\n if (P[\"n\"] === 0 && this[\"n\"] === 0) {\n return new Fraction;\n }\n return new Fraction(P[\"n\"] * this[\"n\"], gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]));\n },\n\n /**\n * Calculates the ceil of a rational number\n *\n * Ex: new Fraction('4.(3)').ceil() => (5 / 1)\n **/\n \"ceil\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.ceil(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Calculates the floor of a rational number\n *\n * Ex: new Fraction('4.(3)').floor() => (4 / 1)\n **/\n \"floor\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.floor(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Rounds a rational numbers\n *\n * Ex: new Fraction('4.(3)').round() => (4 / 1)\n **/\n \"round\": function(places) {\n\n places = Math.pow(10, places || 0);\n\n if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n return new Fraction(NaN);\n }\n return new Fraction(Math.round(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n },\n\n /**\n * Gets the inverse of the fraction, means numerator and denominator are exchanged\n *\n * Ex: new Fraction([-3, 4]).inverse() => -4 / 3\n **/\n \"inverse\": function() {\n\n return new Fraction(this[\"s\"] * this[\"d\"], this[\"n\"]);\n },\n\n /**\n * Calculates the fraction to some rational exponent, if possible\n *\n * Ex: new Fraction(-1,2).pow(-3) => -8\n */\n \"pow\": function(a, b) {\n\n parse(a, b);\n\n // Trivial case when exp is an integer\n\n if (P['d'] === 1) {\n\n if (P['s'] < 0) {\n return new Fraction(Math.pow(this['s'] * this[\"d\"], P['n']), Math.pow(this[\"n\"], P['n']));\n } else {\n return new Fraction(Math.pow(this['s'] * this[\"n\"], P['n']), Math.pow(this[\"d\"], P['n']));\n }\n }\n\n // Negative roots become complex\n // (-a/b)^(c/d) = x\n // <=> (-1)^(c/d) * (a/b)^(c/d) = x\n // <=> (cos(pi) + i*sin(pi))^(c/d) * (a/b)^(c/d) = x # rotate 1 by 180\u00B0\n // <=> (cos(c*pi/d) + i*sin(c*pi/d)) * (a/b)^(c/d) = x # DeMoivre's formula in Q ( https://proofwiki.org/wiki/De_Moivre%27s_Formula/Rational_Index )\n // From which follows that only for c=0 the root is non-complex. c/d is a reduced fraction, so that sin(c/dpi)=0 occurs for d=1, which is handled by our trivial case.\n if (this['s'] < 0) return null;\n\n // Now prime factor n and d\n var N = factorize(this['n']);\n var D = factorize(this['d']);\n\n // Exponentiate and take root for n and d individually\n var n = 1;\n var d = 1;\n for (var k in N) {\n if (k === '1') continue;\n if (k === '0') {\n n = 0;\n break;\n }\n N[k]*= P['n'];\n\n if (N[k] % P['d'] === 0) {\n N[k]/= P['d'];\n } else return null;\n n*= Math.pow(k, N[k]);\n }\n\n for (var k in D) {\n if (k === '1') continue;\n D[k]*= P['n'];\n\n if (D[k] % P['d'] === 0) {\n D[k]/= P['d'];\n } else return null;\n d*= Math.pow(k, D[k]);\n }\n\n if (P['s'] < 0) {\n return new Fraction(d, n);\n }\n return new Fraction(n, d);\n },\n\n /**\n * Check if two rational numbers are the same\n *\n * Ex: new Fraction(19.6).equals([98, 5]);\n **/\n \"equals\": function(a, b) {\n\n parse(a, b);\n return this[\"s\"] * this[\"n\"] * P[\"d\"] === P[\"s\"] * P[\"n\"] * this[\"d\"]; // Same as compare() === 0\n },\n\n /**\n * Check if two rational numbers are the same\n *\n * Ex: new Fraction(19.6).equals([98, 5]);\n **/\n \"compare\": function(a, b) {\n\n parse(a, b);\n var t = (this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * P[\"n\"] * this[\"d\"]);\n return (0 < t) - (t < 0);\n },\n\n \"simplify\": function(eps) {\n\n // First naive implementation, needs improvement\n\n if (isNaN(this['n']) || isNaN(this['d'])) {\n return this;\n }\n\n var cont = this['abs']()['toContinued']();\n\n eps = eps || 0.001;\n\n function rec(a) {\n if (a.length === 1)\n return new Fraction(a[0]);\n return rec(a.slice(1))['inverse']()['add'](a[0]);\n }\n\n for (var i = 0; i < cont.length; i++) {\n var tmp = rec(cont.slice(0, i + 1));\n if (tmp['sub'](this['abs']())['abs']().valueOf() < eps) {\n return tmp['mul'](this['s']);\n }\n }\n return this;\n },\n\n /**\n * Check if two rational numbers are divisible\n *\n * Ex: new Fraction(19.6).divisible(1.5);\n */\n \"divisible\": function(a, b) {\n\n parse(a, b);\n return !(!(P[\"n\"] * this[\"d\"]) || ((this[\"n\"] * P[\"d\"]) % (P[\"n\"] * this[\"d\"])));\n },\n\n /**\n * Returns a decimal representation of the fraction\n *\n * Ex: new Fraction(\"100.'91823'\").valueOf() => 100.91823918239183\n **/\n 'valueOf': function() {\n\n return this[\"s\"] * this[\"n\"] / this[\"d\"];\n },\n\n /**\n * Returns a string-fraction representation of a Fraction object\n *\n * Ex: new Fraction(\"1.'3'\").toFraction() => \"4 1/3\"\n **/\n 'toFraction': function(excludeWhole) {\n\n var whole, str = \"\";\n var n = this[\"n\"];\n var d = this[\"d\"];\n if (this[\"s\"] < 0) {\n str += '-';\n }\n\n if (d === 1) {\n str += n;\n } else {\n\n if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n str += whole;\n str += \" \";\n n %= d;\n }\n\n str += n;\n str += '/';\n str += d;\n }\n return str;\n },\n\n /**\n * Returns a latex representation of a Fraction object\n *\n * Ex: new Fraction(\"1.'3'\").toLatex() => \"\\frac{4}{3}\"\n **/\n 'toLatex': function(excludeWhole) {\n\n var whole, str = \"\";\n var n = this[\"n\"];\n var d = this[\"d\"];\n if (this[\"s\"] < 0) {\n str += '-';\n }\n\n if (d === 1) {\n str += n;\n } else {\n\n if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n str += whole;\n n %= d;\n }\n\n str += \"\\\\frac{\";\n str += n;\n str += '}{';\n str += d;\n str += '}';\n }\n return str;\n },\n\n /**\n * Returns an array of continued fraction elements\n *\n * Ex: new Fraction(\"7/8\").toContinued() => [0,1,7]\n */\n 'toContinued': function() {\n\n var t;\n var a = this['n'];\n var b = this['d'];\n var res = [];\n\n if (isNaN(a) || isNaN(b)) {\n return res;\n }\n\n do {\n res.push(Math.floor(a / b));\n t = a % b;\n a = b;\n b = t;\n } while (a !== 1);\n\n return res;\n },\n\n /**\n * Creates a string representation of a fraction with all digits\n *\n * Ex: new Fraction(\"100.'91823'\").toString() => \"100.(91823)\"\n **/\n 'toString': function(dec) {\n\n var g;\n var N = this[\"n\"];\n var D = this[\"d\"];\n\n if (isNaN(N) || isNaN(D)) {\n return \"NaN\";\n }\n\n dec = dec || 15; // 15 = decimal places when no repetation\n\n var cycLen = cycleLen(N, D); // Cycle length\n var cycOff = cycleStart(N, D, cycLen); // Cycle start\n\n var str = this['s'] === -1 ? \"-\" : \"\";\n\n str += N / D | 0;\n\n N %= D;\n N *= 10;\n\n if (N)\n str += \".\";\n\n if (cycLen) {\n\n for (var i = cycOff; i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n str += \"(\";\n for (var i = cycLen; i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n str += \")\";\n } else {\n for (var i = dec; N && i--;) {\n str += N / D | 0;\n N %= D;\n N *= 10;\n }\n }\n return str;\n }\n };\n\n if (typeof define === \"function\" && define[\"amd\"]) {\n define([], function() {\n return Fraction;\n });\n } else if (typeof exports === \"object\") {\n Object.defineProperty(Fraction, \"__esModule\", { 'value': true });\n Fraction['default'] = Fraction;\n Fraction['Fraction'] = Fraction;\n module['exports'] = Fraction;\n } else {\n root['Fraction'] = Fraction;\n }\n\n})(this);\n", "/* interact.js 1.10.11 | https://interactjs.io/license */\n", "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\n", "export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n", "import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init (window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow (node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n", "import type { Element } from '@interactjs/types/index'\n\nimport isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is Element => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n // eslint-disable-next-line import/no-named-as-default-member\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = (thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n", "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionMethod, DraggableOptions, DropzoneOptions } from '@interactjs/types/index'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport type DraggableMethod = ActionMethod\n\nfunction install (scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n } else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (\n this: Interactable,\n options?: DraggableOptions | boolean,\n): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DropzoneOptions,\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n", "const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} = {\n init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n", "import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as 'matches',\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window: any) {\n const Element = domObjects.Element\n const navigator: Partial = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = ('matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector') as 'matches'\n\n browser.pEventTypes = browser.supportsPointerEvent\n ? domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n }\n : null\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n", "import type { Rect, Target, Element } from '@interactjs/types/index'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains (parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element: Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Element[] | NodeListOf) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents (node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan (higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo (element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element: Element) {\n return (element as SVGElement).correspondingUseElement || element\n}\n\nexport function getScrollXY (relevantWindow?: Window) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element: Element): Required {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n clientRect && {\n left: clientRect.left,\n right: clientRect.right,\n top: clientRect.top,\n bottom: clientRect.bottom,\n width: clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n )\n}\n\nexport function getElementRect (element: Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n", "export default function extend (dest: U & Partial, source: T): T & U {\n for (const prop in source) {\n ;((dest as unknown) as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n", "import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult (value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: RectResolvable,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function rectToXY (rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr> (rect: T) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || rect.left + rect.width\n rect.bottom = rect.bottom || rect.top + rect.height\n }\n\n return rect as Rect & T\n}\n\nexport function tlbrToXywh (rect: Rect & Partial) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges (edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n", "import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName } from '@interactjs/core/scope'\nimport type { HasGetRect } from '@interactjs/types/index'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function (\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = (target.options as any)[actionName]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n", "import type { EventTypes, Listener, ListenersArg } from '@interactjs/types/index'\n\nimport extend from './extend'\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize (\n type: EventTypes,\n listeners?: ListenersArg | ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce((acc, t) => extend(acc, normalize(t, listeners, result)), result)\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n } else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n", "export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n", "function pointerExtend (dest: Partial, source: T) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n} as { [prefix: string]: RegExp }\n\nexport default pointerExtend\n", "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/types/index'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords (dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas (targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity (targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords (targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer (pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY (type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as keyof PointerType]\n xy.y = pointer[(type + 'Y') as keyof PointerType]\n\n return xy\n}\n\nexport function getPageXY (pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY (pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId (pointer: { pointerId?: number, identifier?: number, type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords (dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair (event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage (pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox (event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n return angle\n}\n\nexport function getPointerType (pointer: { pointerType?: string, identifier?: number, type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n : // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets (event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : ((event as unknown) as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords (): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () {\n return this.coords.page\n },\n get client () {\n return this.coords.client\n },\n get timeStamp () {\n return this.coords.timeStamp\n },\n get pageX () {\n return this.coords.page.x\n },\n get pageY () {\n return this.coords.page.y\n },\n get clientX () {\n return this.coords.client.x\n },\n get clientY () {\n return this.coords.client.y\n },\n get pointerId () {\n return this.coords.pointerId\n },\n get target () {\n return this.coords.target\n },\n get type () {\n return this.coords.type\n },\n get pointerType () {\n return this.coords.pointerType\n },\n get buttons () {\n return this.coords.buttons\n },\n preventDefault () {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/scope'\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: Node\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor (interaction: Interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent {\n interaction: InteractionProxy\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get (this: BaseEvent) {\n return this._interaction._proxy\n },\n set (this: BaseEvent) {},\n})\n", "type Filter = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = (array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = (array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = (target: Array, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = (source: ArrayLike) => merge([] as T[], source as T[])\n\nexport const findIndex = (array: T[], func: Filter) => {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport const find = (array: T[], func: Filter) => array[findIndex(array, func)]\n", "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Element } from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n this.type !== 'dropactivate' &&\n (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n } else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n", "import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { DropzoneOptions, Element, PointerEventType, Rect } from '@interactjs/types/index'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n\nimport { DropEvent } from './DropEvent'\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface ActionMap {\n drop?: typeof drop\n }\n\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n dynamicDrop: (this: InteractStatic, newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interactStatic: interact,\n /** @lends Interactable */\n Interactable,\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {object | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interactable, options?: DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = (is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : is.array(dropzone.target)\n ? dropzone.target\n : [dropzone.target]) as Element[]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop (\n { dropState, interactable: draggable, element: dragElement }: Partial,\n dragEvent,\n pointerEvent,\n) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(\n dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null,\n )\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter: null,\n leave: null,\n activate: null,\n deactivate: null,\n move: null,\n drop: null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\ntype FiredDropEvents = Partial<\nRecord<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents (interaction: Interaction, events: FiredDropEvents) {\n const { dropState } = interaction\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected =\n dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod (interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return interactable.options.drop.checker\n ? interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = page.x > rect.left && page.x < rect.right\n const vertical = page.y > rect.top && page.y < rect.bottom\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && is.number(dropOverlap)) {\n const overlapArea =\n Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n fireDropEvents(interaction, interaction.dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n interaction.dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n },\n },\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept: null,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n", "import type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Options } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionMethod, GesturableOptions, Rect, PointerType } from '@interactjs/types/index'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport type GesturableMethod = ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install (scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (\n this: InstanceType,\n options: GesturableOptions | boolean,\n ) {\n if (is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Options\n } as GesturableMethod\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps ({ interaction, iEvent, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') return\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor () {\n return ''\n },\n}\n\nexport default gesture\n", "import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionMethod,\n ResizableOptions,\n FullRect,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/types/index'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizeEvent

extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker (arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable (interactable: Interactable, options: OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n } else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n } else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n return page.x < (width >= 0 ? rect.left : rect.right) + margin\n }\n if (name === 'top') {\n return page.y < (height >= 0 ? rect.top : rect.bottom) + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\n\n return is.element(value)\n ? // the value is an element to use as a resize handle\n value === element\n : // otherwise check if element matches value as selector\n dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors (browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\n x: 'e-resize',\n y: 's-resize',\n xy: 'se-resize',\n\n top: 'n-resize',\n left: 'w-resize',\n bottom: 's-resize',\n right: 'e-resize',\n topleft: 'se-resize',\n bottomright: 'se-resize',\n topright: 'ne-resize',\n bottomleft: 'ne-resize',\n }\n : {\n x: 'ew-resize',\n y: 'ns-resize',\n xy: 'nwse-resize',\n\n top: 'ns-resize',\n left: 'ew-resize',\n bottom: 'ns-resize',\n right: 'ew-resize',\n topleft: 'nwse-resize',\n bottomright: 'nwse-resize',\n topright: 'nesw-resize',\n bottomleft: 'nesw-resize',\n }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start ({ iEvent, interaction }: { iEvent: InteractEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: InteractEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: InteractEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes ({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as ResizableOptions,\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n } else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nexport default resize\n", "import type { Scope } from '@interactjs/core/scope'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n\nexport default {\n id: 'actions',\n install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n", "let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init (global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line node/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { ActionName, Scope, Plugin } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/types/index'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install (scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled: false,\n margin: 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed: 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null as Interaction,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n } else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove ({\n interaction,\n pointer,\n }: {\n interaction: Interaction\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n } else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = right ? 1 : left ? -1 : 0\n autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll (container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta (\n {\n interaction,\n element,\n }: {\n interaction: Partial>\n element: Element\n },\n func: any,\n) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n", "import type { ActionProps } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/scope'\n\nimport { window } from './window'\n\nexport function warnOnce (this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction (dest: ActionProps, src: ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, ActionProps } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType, PointerEventType, Element } from '@interactjs/types/index'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: {\n (...args: any[]): Interactable\n (): boolean\n }\n allowFrom: {\n (...args: any[]): Interactable\n (): boolean\n }\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n /**\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n * ```\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n * ```\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker (\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable): boolean\nfunction styleCursor(this: Interactable, newValue: boolean): typeof this\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, ActionProps } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, ActionName, Plugin } from '@interactjs/core/scope'\nimport type { CursorChecker, PointerType, PointerEventType, Element } from '@interactjs/types/index'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\n\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n }\n\n interface SignalArgs {\n 'autoStart:before-start': Omit & {\n interaction: Interaction\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n actionChecker?: any\n cursorChecker?: any\n styleCursor?: any\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n cursorChecker?: CursorChecker\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n // TODO: docst\n mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16\n }\n}\n\ninterface CheckSignalArg {\n interactable: Interactable\n interaction: Interaction\n element: Element\n action: ActionProps\n buttons: number\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n}\n\nfunction install (scope: Scope) {\n const { interactStatic: interact, defaults } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = (newValue: number) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction } = arg\n\n if (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\n return\n }\n\n scope.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n const actionName = (interaction as Interaction).prepared.name\n\n if (actionName && interactable) {\n // check manualStart and interaction limit\n if (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\n } else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interaction }, scope: Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: ActionProps,\n interactable: Interactable,\n element: Element,\n eventTarget: Node,\n scope: Scope,\n) {\n if (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n matches: Interactable[],\n matchElements: Element[],\n eventTarget: Node,\n scope: Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) {\n continue\n }\n\n const action = validateAction(matchAction, match, matchElement, eventTarget, scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n eventTarget: Node,\n scope: Scope,\n) {\n let matches: Interactable[] = []\n let matchElements: Element[] = []\n\n let element = eventTarget as Element\n\n function pushMatches (interactable: Interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = domUtils.parentNode(element) as Element\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interaction,\n {\n action,\n interactable,\n element,\n }: {\n action: ActionProps\n interactable: Interactable\n element: Element\n },\n scope: Scope,\n) {\n action = action || { name: null }\n\n interaction.interactable = interactable\n interaction.element = element\n copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name ? interactable.getRect(element) : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit (\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n scope: Scope,\n) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue: any, scope: Scope) {\n if (is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Element, cursor: string, scope: Scope) {\n const { cursorElement: prevCursorElement } = scope.autoStart\n\n if (prevCursorElement && prevCursorElement !== element) {\n prevCursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interaction, scope: Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n // clear previous target element cursor\n if (scope.autoStart.cursorElement) {\n setCursor(scope.autoStart.cursorElement, '', scope)\n }\n\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n } else {\n cursor = scope.actions.map[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nconst autoStart: Plugin = {\n id: 'auto-start/base',\n before: ['actions'],\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n}\n\nexport default autoStart\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope, ActionName } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/types/index'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') return\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n interaction.prepared.axis =\n targetOptions.lockAxis === 'start'\n ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n ;(interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n ;(interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis (startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\nimport basePlugin from './base'\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration (interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n", "import type { Scope } from '@interactjs/core/scope'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nexport default {\n id: 'auto-start',\n install (scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/types/index'\nimport { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\nfunction preventDefault(this: Interactable): PreventDefaultValue\nfunction preventDefault(this: Interactable, newValue: PreventDefaultValue): typeof this\nfunction preventDefault (this: Interactable, newValue?: PreventDefaultValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interactable, scope: Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') return\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: { interaction: Interaction, event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Scope) {\n /** @lends Interactable */\n const { Interactable } = scope\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n", "export default {}\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport visualizer from '@interactjs/dev-tools/visualizer/plugin'\nimport type { Element, OptionMethod } from '@interactjs/types/index'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n visializer: typeof visualizer\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools: OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: CheckName\n text: string\n perform: (interaction: Interaction) => boolean\n getInfo: (interaction: Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = 'noListeners',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\n// eslint-disable-next-line no-undef\nconst isProduction = process.env.NODE_ENV === 'production'\n\nfunction install (scope: Scope, { logger }: { logger?: Logger } = {}) {\n const { Interactable, defaults } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n\n scope.usePlugin(visualizer)\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [element, links.touchAction]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform (interaction) {\n const { element } = interaction\n\n return (\n interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n )\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [element, links.boxSizing]\n },\n },\n\n {\n name: CheckName.noListeners,\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [interaction.prepared.name, interaction.interactable]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n const value = element.style[prop] || win.window.getComputedStyle(element)[prop]\n return styleRe.test((value || '').toString())\n}\n\nfunction parentHasStyle (element: Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n", "import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n", "import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/types/index'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './base'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport default class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n edges!: EdgeOptions\n readonly interaction: Readonly\n\n constructor (interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n }\n\n start ({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.edges = extend({}, interaction.edges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg (arg: Partial) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect = arg.rect || interaction.rect\n arg.edges = this.edges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll (arg: MethodArg & Partial) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll (arg: MethodArg & Partial): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg)\n\n rectUtils.addEdges(this.interaction.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction (arg: { phase: EventPhase, rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = this.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n setAndApply (\n arg: Partial & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd (arg: Omit & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd((arg as unknown) as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop (arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates (modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords ({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n }\n\n shouldDo (options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom (other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy () {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult (coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function getRectOffset (rect, coords) {\n return rect\n ? {\n left: coords.x - rect.left,\n top: coords.y - rect.top,\n right: rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n}\n", "import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/types/index'\n\nimport Modification from './Modification'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any,\n Result = any\n> {\n options: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set?: (arg: ModifierArg) => Result\n beforeEnd?: (arg: ModifierArg) => Point | void\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n enable: () => Modifier\n disable: () => Modifier\n}\n\nexport type ModifierState = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg {\n interaction: Interaction\n interactable: Interactable\n phase: EventPhase\n rect: FullRect\n edges: EdgeOptions\n state: State\n element: Element\n pageCoords: Point\n prevCoords: Point\n prevRect?: FullRect\n coords: Point\n startOffset: Rect\n preEnd?: boolean\n}\n\nexport interface ModifierModule<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Result = unknown\n> {\n defaults?: Defaults\n start?(arg: ModifierArg): void\n set?(arg: ModifierArg): Result\n beforeEnd?(arg: ModifierArg): Point | void\n stop?(arg: ModifierArg): void\n}\n\nexport interface ModifierFunction<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> {\n (_options?: Partial): Modifier\n _defaults: Defaults\n _methods: ModifierModule\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result\n> (module: ModifierModule, name?: Name) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n ;(options as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport function addEventModifiers ({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const modification = arg.interaction.modification!\n\n modification.start(arg, arg.interaction.coords.start.page)\n arg.interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => arg.interaction.modification.setAndApply(arg),\n\n 'interactions:before-action-end': (arg) => arg.interaction.modification.beforeEnd(arg),\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n", "import type { Point, Listeners, OrBoolean, Element } from '@interactjs/types/index'\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Node\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial &\nPartial &\n{\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean> {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n", "import type { ActionName } from '@interactjs/core/scope'\nimport type { Point, FullRect, PointerEventType, Element } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase\n> extends BaseEvent {\n target: Element\n currentTarget: Element\n relatedTarget: Element | null = null\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n } else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get () {\n return this.page.x\n },\n set (value) {\n this.page.x = value\n },\n },\n pageY: {\n get () {\n return this.page.y\n },\n set (value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get () {\n return this.client.x\n },\n set (value) {\n this.client.x = value\n },\n },\n clientY: {\n get () {\n return this.client.y\n },\n set (value) {\n this.client.y = value\n },\n },\n\n dx: {\n get () {\n return this.delta.x\n },\n set (value) {\n this.delta.x = value\n },\n },\n dy: {\n get () {\n return this.delta.y\n },\n set (value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get () {\n return this.velocity.x\n },\n set (value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get () {\n return this.velocity.y\n },\n set (value) {\n this.velocity.y = value\n },\n },\n})\n", "import type { PointerEventType, PointerType } from '@interactjs/types/index'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor (id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n", "import type { ActionDefaults } from '@interactjs/core/options'\nimport type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n} from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { Interactable } from './Interactable'\nimport { PointerInfo } from './PointerInfo'\nimport type { ActionName, Scope } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy' | null\n edges?: EdgeOptions | null\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = '',\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = '',\n}\n\nexport type PointerArgProps = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction, event: Event, type: 'blur' }\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Element = null\n rect: FullRect\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n edges: EdgeOptions\n\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name: null,\n axis: null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: PointerEventType = null\n\n downPointer: PointerType = {} as PointerType\n\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: InteractionProxy = null\n\n simulation = null\n\n /** @internal */ get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n readonly _id: number = idCounter++\n\n /** */\n constructor ({ pointerType, scopeFire }: { pointerType?: string, scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: (this as unknown) as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {Boolean} Whether the interaction was successfully started\n */\n start (action: ActionProps, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y\n\n let dx: number\n let dy: number\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: (this as unknown) as Interaction,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: (this as unknown) as Interaction,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n documentBlur (event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: (this as unknown) as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer: PointerType) {\n const pointerId = pointerUtils.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return this.pointerType === 'mouse' || this.pointerType === 'pen'\n ? this.pointers.length - 1\n : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: (this as unknown) as Interaction,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: (this as unknown) as Interaction,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n _updateLatestPointer (pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent

(\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n _fireEvent

(iEvent: InteractEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase

(\n signalArg: Omit, 'iEvent'> & { iEvent?: InteractEvent },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n _now () {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n", "import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/types/index'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal (interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction ({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd ({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end ({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending (interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy (this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords ({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending (interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install (scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n", "import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { ActionName, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport Modification from '@interactjs/modifiers/Modification'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport offset from '@interactjs/offset/plugin'\nimport type { Point, PointerEventType } from '@interactjs/types/index'\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg\n 'interactions:after-action-inertiastart': DoPhaseArg\n 'interactions:before-action-resume': Omit, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg\n 'interactions:after-action-resume': DoPhaseArg\n }\n}\n\nfunction install (scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\n\n defaults.perAction.inertia = {\n enabled: false,\n resistance: 10, // the lambda in exponential decay\n minSpeed: 100, // target speed must be above this for inertia to start\n endSpeed: 10, // the speed at which inertia is slow enough to stop\n allowResume: true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: modifiers.ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor (interaction: Interaction) {\n this.interaction = interaction\n }\n\n start (event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia () {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd () {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame (tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick () {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick () {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume ({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end () {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop () {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start ({ interaction, event }: DoPhaseArg) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume (arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop ({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions ({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint (\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n", "import type { Listener, ListenersArg, Rect } from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nfunction fireUntilImmediateStopped (event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: T) {\n let listeners: Listener[]\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) {\n continue\n }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Element): Rect {\n return null\n }\n}\n", "import type { Actions } from '@interactjs/core/scope'\n\nexport default function isNonNativeEvent (type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n", "/** @module interact */\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target, Element } from '@interactjs/types/index'\nimport browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Interactable } from './Interactable'\nimport isNonNativeEvent from './isNonNativeEvent'\nimport type { Options } from './options'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n isSet(target: Element, options?: any): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n supportsTouch(): boolean\n supportsPointerEvent(): boolean\n stop(): any\n pointerMoveTolerance(newValue?: number): any\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\ntype _InteractStatic = import('@interactjs/core/InteractStatic').InteractStatic\n\nexport function createInteractStatic (scope: Scope): _InteractStatic {\n /**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as _InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n /**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n */\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\n }\n\n /**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Target} target The Element or string being searched for\n * @param {object} options\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n /**\n * @deprecated\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\n interact.on = warnOnce(function on (type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n /**\n * @deprecated\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\n interact.off = warnOnce(function off (type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n /**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n /**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\n interact.supportsPointerEvent = function () {\n return browser.supportsPointerEvent\n }\n\n /**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\n }\n\n /**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n", "/* eslint-disable no-dupe-class-members */\nimport type { ActionMap, ActionName, Actions, Scope } from '@interactjs/core/scope'\nimport type {\n Context,\n Element,\n Target,\n Listeners,\n OrBoolean,\n EventTypes,\n ListenersArg,\n ActionMethod,\n} from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport { Eventable } from './Eventable'\nimport isNonNativeEvent from './isNonNativeEvent'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults } from './options'\nimport { Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\n/** */\nexport class Interactable implements Partial {\n /** @internal */ get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Target\n readonly events = new Eventable()\n readonly _context: Context\n readonly _win: Window\n readonly _doc: Document\n readonly _scopeEvents: Scope['events']\n\n /** @internal */ _rectChecker?: typeof Interactable.prototype.getRect\n\n /** */\n constructor (\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents (actionName: ActionName, phases: NonNullable) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners (actionName: ActionName, prev: Listeners, cur: Listeners) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName: ActionName, options: OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n ;(actionOptions[optionName] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {Rect} The object's bounding rectangle.\n */\n getRect (element: Element) {\n element = element || (is.element(this.target) ? this.target : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker (checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this._rectChecker = checker\n\n this.getRect = (element) => {\n const rect = extend({}, this._rectChecker(element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n delete this._rectChecker\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue: any) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource (newValue?: DeltaSource) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue, allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n testAllow (this: Interactable, allowFrom: IgnoreValue, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (this: Interactable, ignoreFrom: IgnoreValue, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n } else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: EventTypes, listenerArg?: ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[`${addRemove}Delegate` as 'addDelegate' | 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[addRemove](this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod)(options[actionName])\n }\n\n for (const setting in options) {\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n */\n unset () {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target as Node, 'all')\n }\n }\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target, Context } from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\ninterface InteractableScopeProp {\n context: Context\n interactable: Interactable\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: InteractableScopeProp[]\n } = {}\n\n scope: Scope\n\n constructor (scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings: InteractableScopeProp[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(targetMappings, (m) => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n },\n })\n }\n\n new (target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(mappingInfo)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings: InteractableScopeProp[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!targetMappings) {\n return null\n }\n\n const found = arr.find(\n targetMappings,\n (m) => m.context === context && (isSelector || m.interactable.inContext(target as any)),\n )\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interactable) => T) {\n for (const interactable of this.list) {\n let ret: void | T\n\n if (\n (is.string(interactable.target)\n ? // target is a selector and the element matches\n is.element(node) && domUtils.matchesSelector(node, interactable.target)\n : // target is the element\n node === interactable.target) &&\n // the element is in context\n interactable.inContext(node)\n ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n", "import type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n events: ReturnType\n }\n}\n\ntype Listener = (event: Event | FakeEvent) => any\n\nfunction install (scope: Scope) {\n const targets: Array<{\n eventTarget: EventTarget\n events: { [type: string]: Listener[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: Array<[Listener, { capture: boolean, passive: boolean }]>\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture () {\n return (eventsMethods.supportsOptions = true)\n },\n get passive () {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add (eventTarget: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (eventTarget.addEventListener && !arr.contains(target.events[type], listener)) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push(listener)\n }\n }\n\n function remove (\n eventTarget: EventTarget,\n type: string,\n listener?: 'all' | Listener,\n optionalArg?: boolean | any,\n ) {\n const options = getOptions(optionalArg)\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n remove(eventTarget, type, typeListeners[i], options)\n }\n return\n } else {\n for (let i = 0; i < typeListeners.length; i++) {\n if (typeListeners[i] === listener) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push([listener, options])\n }\n\n function removeDelegate (\n selector: string,\n context: Document | Element,\n type: string,\n listener?: Listener,\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, { capture, passive }] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener (event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\n\n fakeEvent.currentTarget = element\n\n for (const [fn, { capture, passive }] of listeners) {\n if (capture === options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n }\n\n function delegateUseCapture (this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor (originalEvent: Event) {\n this.originalEvent = originalEvent\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nfunction getOptions (param: { [index: string]: any } | boolean): { capture: boolean, passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n const options = extend({}, param) as any\n\n options.capture = !!param.capture\n options.passive = !!param.passive\n\n return options\n}\n\nexport default {\n id: 'events',\n install,\n}\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/types/index'\nimport * as dom from '@interactjs/utils/domUtils'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search (details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n continue\n }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && pointerType === interaction.pointerType) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n", "import type { Scope, ActionName, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Listener } from '@interactjs/types/index'\nimport browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport InteractionBase from './Interaction'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: Array>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string, listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n } else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n\n scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions (method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n } else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer =\n invalidPointer ||\n scope.now() - scope.prevTouchTime < 500 ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal (\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is unset\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n },\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n", "import type Interaction from '@interactjs/core/Interaction'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport { Eventable } from './Eventable'\nimport type { PhaseMap } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport { createInteractStatic } from './InteractStatic'\nimport type { Interactable } from './Interactable'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport events from './events'\nimport interactions from './interactions'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase, options: OptionsArg }\n 'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionMap {}\nexport type ActionName = keyof ActionMap\n\nexport interface Actions {\n map: ActionMap\n phases: PhaseMap\n methodDict: { [P in ActionName]?: keyof Interactable }\n phaselessTypes: { [type: string]: true }\n}\n\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {},\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\n InteractEvent = InteractEvent\n Interactable: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor () {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults () {\n return scope.defaults\n }\n\n set (this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset (this: InteractableBase) {\n super.unset()\n scope.interactables.list.splice(scope.interactables.list.indexOf(this), 1)\n\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners (map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire (name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (before[otherId] || before[pluginIdRoot(otherId)]) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return (((this.window as any).Date as typeof Date) || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot (id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n", "import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n", "export default () => {}\n", "export default () => {}\n", "import type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\nimport type { Rect, Point } from '@interactjs/types/index'\n\nexport type GridOptions = (Partial | Point) & {\n range?: number\n limits?: Rect\n offset?: Point\n}\n\nexport default (grid: GridOptions) => {\n const coordFields = ([\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (x, y) => {\n const {\n range,\n limits = {\n left: -Infinity,\n right: Infinity,\n top: -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n", "import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install (scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n", "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This module forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n * modifiers: [\n * interact.modifiers.snapSize({\n * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n * }),\n * interact.aspectRatio({ ratio: 'preserve' }),\n * ],\n * });\n * ```\n */\n\nimport type { Point, Rect, EdgeOptions } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport Modification from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './base'\nimport { makeModifier } from './base'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\nAspectRatioOptions,\n{\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: 1 | -1\n subModification: Modification\n}\n>\n\nconst aspectRatio: ModifierModule = {\n start (arg) {\n const { state, rect, edges: originalEdges, pageCoords: coords } = arg\n let { ratio } = state.options\n const { equalDelta, modifiers } = state.options\n\n if (ratio === 'preserve') {\n ratio = rect.width / rect.height\n }\n\n state.startCoords = extend({}, coords)\n state.startRect = extend({}, rect)\n state.ratio = ratio\n state.equalDelta = equalDelta\n\n const linkedEdges = (state.linkedEdges = {\n top: originalEdges.top || (originalEdges.left && !originalEdges.bottom),\n left: originalEdges.left || (originalEdges.top && !originalEdges.right),\n bottom: originalEdges.bottom || (originalEdges.right && !originalEdges.top),\n right: originalEdges.right || (originalEdges.bottom && !originalEdges.left),\n })\n\n state.xIsPrimaryAxis = !!(originalEdges.left || originalEdges.right)\n\n if (state.equalDelta) {\n state.edgeSign = ((linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)) as 1 | -1\n } else {\n const negativeSecondaryEdge = state.xIsPrimaryAxis ? linkedEdges.top : linkedEdges.left\n state.edgeSign = negativeSecondaryEdge ? -1 : 1\n }\n\n extend(arg.edges, linkedEdges)\n\n if (!modifiers || !modifiers.length) return\n\n const subModification = new Modification(arg.interaction)\n\n subModification.copyFrom(arg.interaction.modification)\n subModification.prepareStates(modifiers)\n\n state.subModification = subModification\n subModification.startAll({ ...arg })\n },\n\n set (arg) {\n const { state, rect, coords } = arg\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(state.linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: state.linkedEdges,\n pageCoords: coords,\n prevCoords: coords,\n prevRect: correctedRect,\n })\n\n const { delta } = result\n\n if (result.changed) {\n const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y)\n\n // do aspect modification again with critical edge axis as primary\n aspectMethod(state, xIsCriticalAxis, result.coords, result.rect)\n extend(coords, result.coords)\n }\n\n return result.eventProps\n },\n\n defaults: {\n ratio: 'preserve',\n equalDelta: false,\n modifiers: [],\n enabled: false,\n },\n}\n\nfunction setEqualDelta ({ startCoords, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point) {\n if (xIsPrimaryAxis) {\n coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign\n }\n}\n\nfunction setRatio (\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n", "import type { ModifierFunction } from '@interactjs/modifiers/base'\n\nconst noop = ((() => {}) as unknown) as ModifierFunction\n\nnoop._defaults = {}\n\nexport default noop\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { ModifierArg, ModifierModule, ModifierState } from '../base'\nimport { makeModifier } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\nRestrictOptions,\n{\n offset: Rect\n}\n>\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = restriction.right - restriction.left - rect.width\n const heightDiff = restriction.bottom - restriction.top - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - rect.width * elementRect.left\n offset.top += startOffset.top - rect.height * elementRect.top\n\n offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) return\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect (\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n", "// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport type { Point, Rect } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { ModifierArg, ModifierState } from '../base'\nimport { makeModifier } from '../base'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\nRestrictEdgesOptions,\n{\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n}\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, startOffset, state }: ModifierArg) {\n const { options } = state\n let offset: Point\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, edges, interaction, state }: ModifierArg) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n } else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n } else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect: Rect, defaults: Rect) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n", "import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n", "import type { Point, Rect, Size } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { ModifierArg, ModifierState } from '../base'\nimport { makeModifier } from '../base'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\nModifierState<\nRestrictSizeOptions & { inner: Rect, outer: Rect },\n{\n min: Rect\n max: Rect\n}\n>\n\nfunction set (arg: ModifierArg) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n } else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n } else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n", "import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/scope'\nimport type { Point, RectResolvable, Element } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { resolveRectLike, rectToXY } from '@interactjs/utils/rect'\n\nimport type { ModifierArg, ModifierState } from '../base'\nimport { makeModifier } from '../base'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point | null\n}\n\nexport interface SnapPosition {\n x?: number\n y?: number\n range?: number\n offset?: Offset\n [index: string]: any\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: InteractionProxy,\n offset: Offset,\n index: number,\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[] | null\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Point[] | null\n // startCoords = offset snapping from drag start page position\n offset: Point | RectResolvable<[Interaction]> | 'startCoords' | null\n offsetWithOrigin?: boolean\n origin: RectResolvable<[Element]> | Point | null\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState<\nSnapOptions,\n{\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n}\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { x: 0, y: 0 }\n\n let snapOffset: Point\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n } else {\n const offsetRect = resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const { relativePoints } = options\n\n state.offsets =\n rect && relativePoints && relativePoints.length\n ? relativePoints.map((relativePoint, index) => ({\n index,\n relativePoint,\n x: startOffset.left - rect.width * relativePoint.x + snapOffset.x,\n y: startOffset.top - rect.height * relativePoint.y + snapOffset.y,\n }))\n : [\n {\n index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = extend({}, coords)\n const targets = []\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n let target: SnapPosition\n\n if (is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n targets.push({\n x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: is.number(target.range) ? target.range : options.range,\n source: snapTarget,\n index,\n offset,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n delta: { x: 0, y: 0 },\n }\n\n for (const target of targets) {\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (\n !closest.target ||\n (inRange\n ? // is the closest target in range?\n closest.inRange && range !== Infinity\n ? // the pointer is relatively deeper in this target\n distance / range < closest.distance / closest.range\n : // this target has Infinite range and the closest doesn't\n (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance\n : // The other is not in range and the pointer is closer to this target\n !closest.inRange && distance < closest.distance)\n ) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.delta.x = dx\n closest.delta.y = dy\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n return closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snap, 'snap')\nexport { snap }\n", "// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { ModifierArg } from '../base'\nimport { makeModifier } from '../base'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick\n\nfunction start (arg: ModifierArg) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\n ],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of options.targets || []) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n", "/**\n * @module modifiers/snapEdges\n *\n * @description\n * WOW> This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport type { ModifierArg, ModifierModule } from '../base'\nimport { makeModifier } from '../base'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick\n\nfunction start (arg: ModifierArg) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: null,\n range: null,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n", "/* eslint-disable node/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n", "import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\nimport all from './all'\nimport base from './base'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install (scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n", "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/types/index'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: PointerEventType\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any;\n [key: string]: any\n\n /** */\n constructor (\n type: T,\n pointer: PointerType | PointerEvent,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(\n interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n )\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }: Point) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }: Point) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n\nexport { PointerEvent }\n", "import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire (\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n ;(pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets (\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n },\n scope: Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) => target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps ({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo ({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold ({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold (arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold (\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) return\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire(\n {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp (\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install (scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\nimport type PointerEvent from './PointerEvent'\nimport basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew ({ pointerEvent }: { pointerEvent: PointerEvent }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) return\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) return\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire(\n {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }: { interaction: Interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)\n ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n", "import type { Plugin } from '@interactjs/core/scope'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { ActionProps, DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { ActionName, Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/types/index'\nimport * as arr from '@interactjs/utils/arr'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nexport function install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable,\n } = scope\n\n scope.actions.phases.reflow = true\n\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow (\n interactable: Interactable,\n action: ActionProps,\n scope: Scope,\n): Promise {\n const elements = (is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]) as Element[]\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = tlbrToXywh(rect)\n const coords = {\n page: { x: xywh.x, y: xywh.y },\n client: { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = (scope.window as unknown) as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n", "import actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n", "// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs/index'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n", "\nreturn _$index_79;\n\n});\n", "import {Constructor} from './constructor'\n\nexport declare class Activateable {\n get active(): boolean\n set active(value: boolean)\n activate(): void\n deactivate(): void\n}\n\nexport function ActivateableMixin>(\n Base: TBase\n): Constructor & TBase {\n class ActivateableMixinClass extends Base {\n get active(): boolean {\n return this.hasAttribute('data-active')\n }\n\n set active(value: boolean) {\n if (value) {\n this.activate()\n } else {\n this.deactivate()\n }\n }\n\n activate() {\n this.setAttribute('data-active', '')\n this.dispatchEvent(new Event('operation-active', {bubbles: true}))\n }\n\n deactivate() {\n this.removeAttribute('data-active')\n }\n }\n\n return ActivateableMixinClass as Constructor & TBase\n}\n", null, null, null, null, null, null, null, null, "import {Constructor} from './constructor'\nimport {attr} from '@github/catalyst'\n\nexport declare class Angleable {\n get angle(): string\n set angle(value: string)\n get reducedAngle(): string\n set reducedAngle(value: string)\n}\n\nexport const isAngleable = (arg: unknown): arg is Angleable =>\n typeof arg === 'object' &&\n arg !== null &&\n typeof (arg as Angleable).angle === 'string' &&\n typeof (arg as Angleable).reducedAngle === 'string'\n\nexport function AngleableMixin>(Base: TBase): Constructor & TBase {\n class AngleableMixinClass extends Base {\n @attr angle = ''\n @attr reducedAngle = ''\n }\n\n return AngleableMixinClass as Constructor & TBase\n}\n", "import {Constructor} from './constructor'\n\nexport declare class Controllable {\n set controls(value: number[])\n get controls(): number[]\n get isControlled(): boolean\n}\n\nexport const isControllable = (arg: unknown): arg is Controllable =>\n typeof arg === 'object' && arg !== null && typeof (arg as Controllable).controls === 'object'\n\nexport function ControllableMixin>(\n Base: TBase\n): Constructor & TBase {\n class ControllableMixinClass extends Base {\n set controls(controls: number[]) {\n this.setAttribute('data-controls', controls.sort().join())\n }\n\n get controls(): number[] {\n const dataControls = this.getAttribute('data-controls')\n if (dataControls === null) return []\n if (dataControls === '') return []\n\n return dataControls\n .split(',')\n .map(each => parseInt(each))\n .sort()\n }\n\n get isControlled(): boolean {\n return this.controls.length > 0\n }\n }\n\n return ControllableMixinClass as Constructor & TBase\n}\n", "import {Constructor} from './constructor'\nimport {attr} from '@github/catalyst'\n\nexport declare class Disableable {\n get disabled(): boolean\n set disabled(value: boolean)\n get enabled(): boolean\n enable(): void\n disable(): void\n}\n\nexport const isDisableable = (arg: unknown): arg is Disableable =>\n typeof arg === 'object' && arg !== null && typeof (arg as Disableable).disabled === 'boolean'\n\nexport function DisableableMixin>(\n Base: TBase\n): Constructor & TBase {\n class DisableableMixinClass extends Base {\n @attr disabled = false\n\n get enabled(): boolean {\n return !this.disabled\n }\n\n enable(): void {\n this.disabled = false\n }\n\n disable(): void {\n this.disabled = true\n }\n }\n\n return DisableableMixinClass as Constructor & TBase\n}\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nexport { __assign, __read, __rest, __spreadArray, __values };\n", "var ActionTypes;\n\n(function (ActionTypes) {\n ActionTypes[\"Start\"] = \"xstate.start\";\n ActionTypes[\"Stop\"] = \"xstate.stop\";\n ActionTypes[\"Raise\"] = \"xstate.raise\";\n ActionTypes[\"Send\"] = \"xstate.send\";\n ActionTypes[\"Cancel\"] = \"xstate.cancel\";\n ActionTypes[\"NullEvent\"] = \"\";\n ActionTypes[\"Assign\"] = \"xstate.assign\";\n ActionTypes[\"After\"] = \"xstate.after\";\n ActionTypes[\"DoneState\"] = \"done.state\";\n ActionTypes[\"DoneInvoke\"] = \"done.invoke\";\n ActionTypes[\"Log\"] = \"xstate.log\";\n ActionTypes[\"Init\"] = \"xstate.init\";\n ActionTypes[\"Invoke\"] = \"xstate.invoke\";\n ActionTypes[\"ErrorExecution\"] = \"error.execution\";\n ActionTypes[\"ErrorCommunication\"] = \"error.communication\";\n ActionTypes[\"ErrorPlatform\"] = \"error.platform\";\n ActionTypes[\"ErrorCustom\"] = \"xstate.error\";\n ActionTypes[\"Update\"] = \"xstate.update\";\n ActionTypes[\"Pure\"] = \"xstate.pure\";\n ActionTypes[\"Choose\"] = \"xstate.choose\";\n})(ActionTypes || (ActionTypes = {}));\n\nvar SpecialTargets;\n\n(function (SpecialTargets) {\n SpecialTargets[\"Parent\"] = \"#_parent\";\n SpecialTargets[\"Internal\"] = \"#_internal\";\n})(SpecialTargets || (SpecialTargets = {}));\n\nexport { ActionTypes, SpecialTargets };\n", "import { ActionTypes } from './types.js';\n\nvar start = ActionTypes.Start;\nvar stop = ActionTypes.Stop;\nvar raise = ActionTypes.Raise;\nvar send = ActionTypes.Send;\nvar cancel = ActionTypes.Cancel;\nvar nullEvent = ActionTypes.NullEvent;\nvar assign = ActionTypes.Assign;\nvar after = ActionTypes.After;\nvar doneState = ActionTypes.DoneState;\nvar log = ActionTypes.Log;\nvar init = ActionTypes.Init;\nvar invoke = ActionTypes.Invoke;\nvar errorExecution = ActionTypes.ErrorExecution;\nvar errorPlatform = ActionTypes.ErrorPlatform;\nvar error = ActionTypes.ErrorCustom;\nvar update = ActionTypes.Update;\nvar choose = ActionTypes.Choose;\nvar pure = ActionTypes.Pure;\n\nexport { after, assign, cancel, choose, doneState, error, errorExecution, errorPlatform, init, invoke, log, nullEvent, pure, raise, send, start, stop, update };\n", "var STATE_DELIMITER = '.';\nvar EMPTY_ACTIVITY_MAP = {};\nvar DEFAULT_GUARD_TYPE = 'xstate.guard';\nvar TARGETLESS_KEY = '';\n\nexport { DEFAULT_GUARD_TYPE, EMPTY_ACTIVITY_MAP, STATE_DELIMITER, TARGETLESS_KEY };\n", "var IS_PRODUCTION = process.env.NODE_ENV === 'production';\n\nexport { IS_PRODUCTION };\n", "import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { DEFAULT_GUARD_TYPE, TARGETLESS_KEY, STATE_DELIMITER } from './constants.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar _a;\nfunction keys(value) {\n return Object.keys(value);\n}\nfunction matchesState(parentStateId, childStateId, delimiter) {\n if (delimiter === void 0) {\n delimiter = STATE_DELIMITER;\n }\n\n var parentStateValue = toStateValue(parentStateId, delimiter);\n var childStateValue = toStateValue(childStateId, delimiter);\n\n if (isString(childStateValue)) {\n if (isString(parentStateValue)) {\n return childStateValue === parentStateValue;\n } // Parent more specific than child\n\n\n return false;\n }\n\n if (isString(parentStateValue)) {\n return parentStateValue in childStateValue;\n }\n\n return Object.keys(parentStateValue).every(function (key) {\n if (!(key in childStateValue)) {\n return false;\n }\n\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\nfunction getEventType(event) {\n try {\n return isString(event) || typeof event === 'number' ? \"\".concat(event) : event.type;\n } catch (e) {\n throw new Error('Events must be strings or objects with a string event.type property.');\n }\n}\nfunction getActionType(action) {\n try {\n return isString(action) || typeof action === 'number' ? \"\".concat(action) : isFunction(action) ? action.name : action.type;\n } catch (e) {\n throw new Error('Actions must be strings or objects with a string action.type property.');\n }\n}\nfunction toStatePath(stateId, delimiter) {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n\n return stateId.toString().split(delimiter);\n } catch (e) {\n throw new Error(\"'\".concat(stateId, \"' is not a valid state path.\"));\n }\n}\nfunction isStateLike(state) {\n return typeof state === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;\n}\nfunction toStateValue(stateValue, delimiter) {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue;\n }\n\n var statePath = toStatePath(stateValue, delimiter);\n return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n if (statePath.length === 1) {\n return statePath[0];\n }\n\n var value = {};\n var marker = value;\n\n for (var i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n marker[statePath[i]] = {};\n marker = marker[statePath[i]];\n }\n }\n\n return value;\n}\nfunction mapValues(collection, iteratee) {\n var result = {};\n var collectionKeys = Object.keys(collection);\n\n for (var i = 0; i < collectionKeys.length; i++) {\n var key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n\n return result;\n}\nfunction mapFilterValues(collection, iteratee, predicate) {\n var e_1, _a;\n\n var result = {};\n\n try {\n for (var _b = __values(Object.keys(collection)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var item = collection[key];\n\n if (!predicate(item)) {\n continue;\n }\n\n result[key] = iteratee(item, key, collection);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return result;\n}\n/**\r\n * Retrieves a value at the given path.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nvar path = function (props) {\n return function (object) {\n var e_2, _a;\n\n var result = object;\n\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var prop = props_1_1.value;\n result = result[prop];\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n return result;\n };\n};\n/**\r\n * Retrieves a value at the given path via the nested accessor prop.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nfunction nestedPath(props, accessorProp) {\n return function (object) {\n var e_3, _a;\n\n var result = object;\n\n try {\n for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {\n var prop = props_2_1.value;\n result = result[accessorProp][prop];\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (props_2_1 && !props_2_1.done && (_a = props_2.return)) _a.call(props_2);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n return result;\n };\n}\nfunction toStatePaths(stateValue) {\n if (!stateValue) {\n return [[]];\n }\n\n if (isString(stateValue)) {\n return [[stateValue]];\n }\n\n var result = flatten(Object.keys(stateValue).map(function (key) {\n var subStateValue = stateValue[key];\n\n if (typeof subStateValue !== 'string' && (!subStateValue || !Object.keys(subStateValue).length)) {\n return [[key]];\n }\n\n return toStatePaths(stateValue[key]).map(function (subPath) {\n return [key].concat(subPath);\n });\n }));\n return result;\n}\nfunction pathsToStateValue(paths) {\n var e_4, _a;\n\n var result = {};\n\n if (paths && paths.length === 1 && paths[0].length === 1) {\n return paths[0][0];\n }\n\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var currentPath = paths_1_1.value;\n var marker = result; // tslint:disable-next-line:prefer-for-of\n\n for (var i = 0; i < currentPath.length; i++) {\n var subPath = currentPath[i];\n\n if (i === currentPath.length - 2) {\n marker[subPath] = currentPath[i + 1];\n break;\n }\n\n marker[subPath] = marker[subPath] || {};\n marker = marker[subPath];\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n return result;\n}\nfunction flatten(array) {\n var _a;\n\n return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));\n}\nfunction toArrayStrict(value) {\n if (isArray(value)) {\n return value;\n }\n\n return [value];\n}\nfunction toArray(value) {\n if (value === undefined) {\n return [];\n }\n\n return toArrayStrict(value);\n}\nfunction mapContext(mapper, context, _event) {\n var e_5, _a;\n\n if (isFunction(mapper)) {\n return mapper(context, _event.data);\n }\n\n var result = {};\n\n try {\n for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var subMapper = mapper[key];\n\n if (isFunction(subMapper)) {\n result[key] = subMapper(context, _event.data);\n } else {\n result[key] = subMapper;\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n return result;\n}\nfunction isBuiltInEvent(eventType) {\n return /^(done|error)\\./.test(eventType);\n}\nfunction isPromiseLike(value) {\n if (value instanceof Promise) {\n return true;\n } // Check if shape matches the Promise/A+ specification for a \"thenable\".\n\n\n if (value !== null && (isFunction(value) || typeof value === 'object') && isFunction(value.then)) {\n return true;\n }\n\n return false;\n}\nfunction isBehavior(value) {\n return value !== null && typeof value === 'object' && 'transition' in value && typeof value.transition === 'function';\n}\nfunction partition(items, predicate) {\n var e_6, _a;\n\n var _b = __read([[], []], 2),\n truthy = _b[0],\n falsy = _b[1];\n\n try {\n for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n var item = items_1_1.value;\n\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n return [truthy, falsy];\n}\nfunction updateHistoryStates(hist, stateValue) {\n return mapValues(hist.states, function (subHist, key) {\n if (!subHist) {\n return undefined;\n }\n\n var subStateValue = (isString(stateValue) ? undefined : stateValue[key]) || (subHist ? subHist.current : undefined);\n\n if (!subStateValue) {\n return undefined;\n }\n\n return {\n current: subStateValue,\n states: updateHistoryStates(subHist, subStateValue)\n };\n });\n}\nfunction updateHistoryValue(hist, stateValue) {\n return {\n current: stateValue,\n states: updateHistoryStates(hist, stateValue)\n };\n}\nfunction updateContext(context, _event, assignActions, state) {\n if (!IS_PRODUCTION) {\n warn(!!context, 'Attempting to update undefined context');\n }\n\n var updatedContext = context ? assignActions.reduce(function (acc, assignAction) {\n var e_7, _a;\n\n var assignment = assignAction.assignment;\n var meta = {\n state: state,\n action: assignAction,\n _event: _event\n };\n var partialUpdate = {};\n\n if (isFunction(assignment)) {\n partialUpdate = assignment(acc, _event.data, meta);\n } else {\n try {\n for (var _b = __values(Object.keys(assignment)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var propAssignment = assignment[key];\n partialUpdate[key] = isFunction(propAssignment) ? propAssignment(acc, _event.data, meta) : propAssignment;\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n\n return Object.assign({}, acc, partialUpdate);\n }, context) : context;\n return updatedContext;\n} // tslint:disable-next-line:no-empty\n\nvar warn = function () {};\n\nif (!IS_PRODUCTION) {\n warn = function (condition, message) {\n var error = condition instanceof Error ? condition : undefined;\n\n if (!error && condition) {\n return;\n }\n\n if (console !== undefined) {\n var args = [\"Warning: \".concat(message)];\n\n if (error) {\n args.push(error);\n } // tslint:disable-next-line:no-console\n\n\n console.warn.apply(console, args);\n }\n };\n}\nfunction isArray(value) {\n return Array.isArray(value);\n} // tslint:disable-next-line:ban-types\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction toGuard(condition, guardMap) {\n if (!condition) {\n return undefined;\n }\n\n if (isString(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition,\n predicate: guardMap ? guardMap[condition] : undefined\n };\n }\n\n if (isFunction(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition.name,\n predicate: condition\n };\n }\n\n return condition;\n}\nfunction isObservable(value) {\n try {\n return 'subscribe' in value && isFunction(value.subscribe);\n } catch (e) {\n return false;\n }\n}\nvar symbolObservable = /*#__PURE__*/function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}(); // TODO: to be removed in v5, left it out just to minimize the scope of the change and maintain compatibility with older versions of integration paackages\n\nvar interopSymbols = (_a = {}, _a[symbolObservable] = function () {\n return this;\n}, _a[Symbol.observable] = function () {\n return this;\n}, _a);\nfunction isMachine(value) {\n return !!value && '__xstatenode' in value;\n}\nfunction isActor(value) {\n return !!value && typeof value.send === 'function';\n}\nvar uniqueId = /*#__PURE__*/function () {\n var currentId = 0;\n return function () {\n currentId++;\n return currentId.toString(16);\n };\n}();\nfunction toEventObject(event, payload // id?: TEvent['type']\n) {\n if (isString(event) || typeof event === 'number') {\n return __assign({\n type: event\n }, payload);\n }\n\n return event;\n}\nfunction toSCXMLEvent(event, scxmlEvent) {\n if (!isString(event) && '$$type' in event && event.$$type === 'scxml') {\n return event;\n }\n\n var eventObject = toEventObject(event);\n return __assign({\n name: eventObject.type,\n data: eventObject,\n $$type: 'scxml',\n type: 'external'\n }, scxmlEvent);\n}\nfunction toTransitionConfigArray(event, configLike) {\n var transitions = toArrayStrict(configLike).map(function (transitionLike) {\n if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {\n return {\n target: transitionLike,\n event: event\n };\n }\n\n return __assign(__assign({}, transitionLike), {\n event: event\n });\n });\n return transitions;\n}\nfunction normalizeTarget(target) {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n\n return toArray(target);\n}\nfunction reportUnhandledExceptionOnInvocation(originalError, currentError, id) {\n if (!IS_PRODUCTION) {\n var originalStackTrace = originalError.stack ? \" Stacktrace was '\".concat(originalError.stack, \"'\") : '';\n\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\"Missing onError handler for invocation '\".concat(id, \"', error was '\").concat(originalError, \"'.\").concat(originalStackTrace));\n } else {\n var stackTrace = currentError.stack ? \" Stacktrace was '\".concat(currentError.stack, \"'\") : ''; // tslint:disable-next-line:no-console\n\n console.error(\"Missing onError handler and/or unhandled exception/promise rejection for invocation '\".concat(id, \"'. \") + \"Original error: '\".concat(originalError, \"'. \").concat(originalStackTrace, \" Current error is '\").concat(currentError, \"'.\").concat(stackTrace));\n }\n }\n}\nfunction evaluateGuard(machine, guard, context, _event, state) {\n var guards = machine.options.guards;\n var guardMeta = {\n state: state,\n cond: guard,\n _event: _event\n }; // TODO: do not hardcode!\n\n if (guard.type === DEFAULT_GUARD_TYPE) {\n return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);\n }\n\n var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];\n\n if (!condFn) {\n throw new Error(\"Guard '\".concat(guard.type, \"' is not implemented on machine '\").concat(machine.id, \"'.\"));\n }\n\n return condFn(context, _event.data, guardMeta);\n}\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n return {\n type: src\n };\n }\n\n return src;\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n if (typeof nextHandler === 'object') {\n return nextHandler;\n }\n\n var noop = function () {\n return void 0;\n };\n\n return {\n next: nextHandler,\n error: errorHandler || noop,\n complete: completionHandler || noop\n };\n}\nfunction createInvokeId(stateNodeId, index) {\n return \"\".concat(stateNodeId, \":invocation[\").concat(index, \"]\");\n}\n\nexport { createInvokeId, evaluateGuard, flatten, getActionType, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, pathsToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };\n", "import { __assign, __read, __spreadArray } from './_virtual/_tslib.js';\nimport { SpecialTargets, ActionTypes } from './types.js';\nimport { init, send as send$1, raise as raise$1, update, log as log$1, cancel as cancel$1, assign as assign$1, error as error$1, stop as stop$1, pure as pure$1, choose as choose$1 } from './actionTypes.js';\nimport * as actionTypes from './actionTypes.js';\nexport { actionTypes };\nimport { toSCXMLEvent, isString, isFunction, toEventObject, getEventType, partition, updateContext, flatten, toArray, toGuard, evaluateGuard, warn, isArray } from './utils.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar initEvent = /*#__PURE__*/toSCXMLEvent({\n type: init\n});\nfunction getActionFunction(actionType, actionFunctionMap) {\n return actionFunctionMap ? actionFunctionMap[actionType] || undefined : undefined;\n}\nfunction toActionObject(action, actionFunctionMap) {\n var actionObject;\n\n if (isString(action) || typeof action === 'number') {\n var exec = getActionFunction(action, actionFunctionMap);\n\n if (isFunction(exec)) {\n actionObject = {\n type: action,\n exec: exec\n };\n } else if (exec) {\n actionObject = exec;\n } else {\n actionObject = {\n type: action,\n exec: undefined\n };\n }\n } else if (isFunction(action)) {\n actionObject = {\n // Convert action to string if unnamed\n type: action.name || action.toString(),\n exec: action\n };\n } else {\n var exec = getActionFunction(action.type, actionFunctionMap);\n\n if (isFunction(exec)) {\n actionObject = __assign(__assign({}, action), {\n exec: exec\n });\n } else if (exec) {\n var actionType = exec.type || action.type;\n actionObject = __assign(__assign(__assign({}, exec), action), {\n type: actionType\n });\n } else {\n actionObject = action;\n }\n }\n\n return actionObject;\n}\nvar toActionObjects = function (action, actionFunctionMap) {\n if (!action) {\n return [];\n }\n\n var actions = isArray(action) ? action : [action];\n return actions.map(function (subAction) {\n return toActionObject(subAction, actionFunctionMap);\n });\n};\nfunction toActivityDefinition(action) {\n var actionObject = toActionObject(action);\n return __assign(__assign({\n id: isString(action) ? action : actionObject.id\n }, actionObject), {\n type: actionObject.type\n });\n}\n/**\r\n * Raises an event. This places the event in the internal event queue, so that\r\n * the event is immediately consumed by the machine in the current step.\r\n *\r\n * @param eventType The event to raise.\r\n */\n\nfunction raise(event) {\n if (!isString(event)) {\n return send(event, {\n to: SpecialTargets.Internal\n });\n }\n\n return {\n type: raise$1,\n event: event\n };\n}\nfunction resolveRaise(action) {\n return {\n type: raise$1,\n _event: toSCXMLEvent(action.event)\n };\n}\n/**\r\n * Sends an event. This returns an action that will be read by an interpreter to\r\n * send the event in the next step, after the current step is finished executing.\r\n *\r\n * @param event The event to send.\r\n * @param options Options to pass into the send event:\r\n * - `id` - The unique send event identifier (used with `cancel()`).\r\n * - `delay` - The number of milliseconds to delay the sending of the event.\r\n * - `to` - The target of this event (by default, the machine the event was sent from).\r\n */\n\nfunction send(event, options) {\n return {\n to: options ? options.to : undefined,\n type: send$1,\n event: isFunction(event) ? event : toEventObject(event),\n delay: options ? options.delay : undefined,\n id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : getEventType(event)\n };\n}\nfunction resolveSend(action, ctx, _event, delaysMap) {\n var meta = {\n _event: _event\n }; // TODO: helper function for resolving Expr\n\n var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n var resolvedDelay;\n\n if (isString(action.delay)) {\n var configDelay = delaysMap && delaysMap[action.delay];\n resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n } else {\n resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n }\n\n var resolvedTarget = isFunction(action.to) ? action.to(ctx, _event.data, meta) : action.to;\n return __assign(__assign({}, action), {\n to: resolvedTarget,\n _event: resolvedEvent,\n event: resolvedEvent.data,\n delay: resolvedDelay\n });\n}\n/**\r\n * Sends an event to this machine's parent.\r\n *\r\n * @param event The event to send to the parent machine.\r\n * @param options Options to pass into the send event.\r\n */\n\nfunction sendParent(event, options) {\n return send(event, __assign(__assign({}, options), {\n to: SpecialTargets.Parent\n }));\n}\n/**\r\n * Sends an event to an actor.\r\n *\r\n * @param actor The `ActorRef` to send the event to.\r\n * @param event The event to send, or an expression that evaluates to the event to send\r\n * @param options Send action options\r\n * @returns An XState send action object\r\n */\n\nfunction sendTo(actor, event, options) {\n return send(event, __assign(__assign({}, options), {\n to: actor\n }));\n}\n/**\r\n * Sends an update event to this machine's parent.\r\n */\n\nfunction sendUpdate() {\n return sendParent(update);\n}\n/**\r\n * Sends an event back to the sender of the original event.\r\n *\r\n * @param event The event to send back to the sender\r\n * @param options Options to pass into the send event\r\n */\n\nfunction respond(event, options) {\n return send(event, __assign(__assign({}, options), {\n to: function (_, __, _a) {\n var _event = _a._event;\n return _event.origin; // TODO: handle when _event.origin is undefined\n }\n }));\n}\n\nvar defaultLogExpr = function (context, event) {\n return {\n context: context,\n event: event\n };\n};\n/**\r\n *\r\n * @param expr The expression function to evaluate which will be logged.\r\n * Takes in 2 arguments:\r\n * - `ctx` - the current state context\r\n * - `event` - the event that caused this action to be executed.\r\n * @param label The label to give to the logged expression.\r\n */\n\n\nfunction log(expr, label) {\n if (expr === void 0) {\n expr = defaultLogExpr;\n }\n\n return {\n type: log$1,\n label: label,\n expr: expr\n };\n}\nvar resolveLog = function (action, ctx, _event) {\n return __assign(__assign({}, action), {\n value: isString(action.expr) ? action.expr : action.expr(ctx, _event.data, {\n _event: _event\n })\n });\n};\n/**\r\n * Cancels an in-flight `send(...)` action. A canceled sent action will not\r\n * be executed, nor will its event be sent, unless it has already been sent\r\n * (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).\r\n *\r\n * @param sendId The `id` of the `send(...)` action to cancel.\r\n */\n\nvar cancel = function (sendId) {\n return {\n type: cancel$1,\n sendId: sendId\n };\n};\n/**\r\n * Starts an activity.\r\n *\r\n * @param activity The activity to start.\r\n */\n\nfunction start(activity) {\n var activityDef = toActivityDefinition(activity);\n return {\n type: ActionTypes.Start,\n activity: activityDef,\n exec: undefined\n };\n}\n/**\r\n * Stops an activity.\r\n *\r\n * @param actorRef The activity to stop.\r\n */\n\nfunction stop(actorRef) {\n var activity = isFunction(actorRef) ? actorRef : toActivityDefinition(actorRef);\n return {\n type: ActionTypes.Stop,\n activity: activity,\n exec: undefined\n };\n}\nfunction resolveStop(action, context, _event) {\n var actorRefOrString = isFunction(action.activity) ? action.activity(context, _event.data) : action.activity;\n var resolvedActorRef = typeof actorRefOrString === 'string' ? {\n id: actorRefOrString\n } : actorRefOrString;\n var actionObject = {\n type: ActionTypes.Stop,\n activity: resolvedActorRef\n };\n return actionObject;\n}\n/**\r\n * Updates the current context of the machine.\r\n *\r\n * @param assignment An object that represents the partial context to update.\r\n */\n\nvar assign = function (assignment) {\n return {\n type: assign$1,\n assignment: assignment\n };\n};\nfunction isActionObject(action) {\n return typeof action === 'object' && 'type' in action;\n}\n/**\r\n * Returns an event type that represents an implicit event that\r\n * is sent after the specified `delay`.\r\n *\r\n * @param delayRef The delay in milliseconds\r\n * @param id The state node ID where this event is handled\r\n */\n\nfunction after(delayRef, id) {\n var idSuffix = id ? \"#\".concat(id) : '';\n return \"\".concat(ActionTypes.After, \"(\").concat(delayRef, \")\").concat(idSuffix);\n}\n/**\r\n * Returns an event that represents that a final state node\r\n * has been reached in the parent state node.\r\n *\r\n * @param id The final state node's parent state node `id`\r\n * @param data The data to pass into the event\r\n */\n\nfunction done(id, data) {\n var type = \"\".concat(ActionTypes.DoneState, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\n/**\r\n * Returns an event that represents that an invoked service has terminated.\r\n *\r\n * An invoked service is terminated when it has reached a top-level final state node,\r\n * but not when it is canceled.\r\n *\r\n * @param id The final state node ID\r\n * @param data The data to pass into the event\r\n */\n\nfunction doneInvoke(id, data) {\n var type = \"\".concat(ActionTypes.DoneInvoke, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\nfunction error(id, data) {\n var type = \"\".concat(ActionTypes.ErrorPlatform, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\nfunction pure(getActions) {\n return {\n type: ActionTypes.Pure,\n get: getActions\n };\n}\n/**\r\n * Forwards (sends) an event to a specified service.\r\n *\r\n * @param target The target service to forward the event to.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction forwardTo(target, options) {\n return send(function (_, event) {\n return event;\n }, __assign(__assign({}, options), {\n to: target\n }));\n}\n/**\r\n * Escalates an error by sending it as an event to this machine's parent.\r\n *\r\n * @param errorData The error data to send, or the expression function that\r\n * takes in the `context`, `event`, and `meta`, and returns the error data to send.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction escalate(errorData, options) {\n return sendParent(function (context, event, meta) {\n return {\n type: error$1,\n data: isFunction(errorData) ? errorData(context, event, meta) : errorData\n };\n }, __assign(__assign({}, options), {\n to: SpecialTargets.Parent\n }));\n}\nfunction choose(conds) {\n return {\n type: ActionTypes.Choose,\n conds: conds\n };\n}\nfunction resolveActions(machine, currentState, currentContext, _event, actions, preserveActionOrder) {\n if (preserveActionOrder === void 0) {\n preserveActionOrder = false;\n }\n\n var _a = __read(preserveActionOrder ? [[], actions] : partition(actions, function (action) {\n return action.type === assign$1;\n }), 2),\n assignActions = _a[0],\n otherActions = _a[1];\n\n var updatedContext = assignActions.length ? updateContext(currentContext, _event, assignActions, currentState) : currentContext;\n var preservedContexts = preserveActionOrder ? [currentContext] : undefined;\n var resolvedActions = flatten(otherActions.map(function (actionObject) {\n var _a;\n\n switch (actionObject.type) {\n case raise$1:\n return resolveRaise(actionObject);\n\n case send$1:\n var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init\n\n if (!IS_PRODUCTION) {\n // warn after resolving as we can create better contextual message here\n warn(!isString(actionObject.delay) || typeof sendAction.delay === 'number', // tslint:disable-next-line:max-line-length\n \"No delay reference for delay expression '\".concat(actionObject.delay, \"' was found on machine '\").concat(machine.id, \"'\"));\n }\n\n return sendAction;\n\n case log$1:\n return resolveLog(actionObject, updatedContext, _event);\n\n case choose$1:\n {\n var chooseAction = actionObject;\n var matchedActions = (_a = chooseAction.conds.find(function (condition) {\n var guard = toGuard(condition.cond, machine.options.guards);\n return !guard || evaluateGuard(machine, guard, updatedContext, _event, currentState);\n })) === null || _a === void 0 ? void 0 : _a.actions;\n\n if (!matchedActions) {\n return [];\n }\n\n var _b = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),\n resolvedActionsFromChoose = _b[0],\n resolvedContextFromChoose = _b[1];\n\n updatedContext = resolvedContextFromChoose;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromChoose;\n }\n\n case pure$1:\n {\n var matchedActions = actionObject.get(updatedContext, _event.data);\n\n if (!matchedActions) {\n return [];\n }\n\n var _c = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),\n resolvedActionsFromPure = _c[0],\n resolvedContext = _c[1];\n\n updatedContext = resolvedContext;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromPure;\n }\n\n case stop$1:\n {\n return resolveStop(actionObject, updatedContext, _event);\n }\n\n case assign$1:\n {\n updatedContext = updateContext(updatedContext, _event, [actionObject], currentState);\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n break;\n }\n\n default:\n var resolvedActionObject = toActionObject(actionObject, machine.options.actions);\n var exec_1 = resolvedActionObject.exec;\n\n if (exec_1 && preservedContexts) {\n var contextIndex_1 = preservedContexts.length - 1;\n resolvedActionObject = __assign(__assign({}, resolvedActionObject), {\n exec: function (_ctx) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n exec_1.apply(void 0, __spreadArray([preservedContexts[contextIndex_1]], __read(args), false));\n }\n });\n }\n\n return resolvedActionObject;\n }\n }).filter(function (a) {\n return !!a;\n }));\n return [resolvedActions, updatedContext];\n}\n\nexport { after, assign, cancel, choose, done, doneInvoke, error, escalate, forwardTo, getActionFunction, initEvent, isActionObject, log, pure, raise, resolveActions, resolveLog, resolveRaise, resolveSend, resolveStop, respond, send, sendParent, sendTo, sendUpdate, start, stop, toActionObject, toActionObjects, toActivityDefinition };\n", "/**\r\n * Maintains a stack of the current service in scope.\r\n * This is used to provide the correct service to spawn().\r\n */\nvar serviceStack = [];\nvar provide = function (service, fn) {\n serviceStack.push(service);\n var result = fn(service);\n serviceStack.pop();\n return result;\n};\nvar consume = function (fn) {\n return fn(serviceStack[serviceStack.length - 1]);\n};\n\nexport { consume, provide };\n", "import { __assign } from './_virtual/_tslib.js';\nimport { symbolObservable, toInvokeSource, mapContext, isMachine } from './utils.js';\nimport { provide } from './serviceScope.js';\n\nfunction createNullActor(id) {\n var _a;\n\n return _a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n getSnapshot: function () {\n return undefined;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a;\n}\n/**\r\n * Creates a deferred actor that is able to be invoked given the provided\r\n * invocation information in its `.meta` value.\r\n *\r\n * @param invokeDefinition The meta information needed to invoke the actor.\r\n */\n\nfunction createInvocableActor(invokeDefinition, machine, context, _event) {\n var _a;\n\n var invokeSrc = toInvokeSource(invokeDefinition.src);\n var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];\n var resolvedData = invokeDefinition.data ? mapContext(invokeDefinition.data, context, _event) : undefined;\n var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore\n\n tempActor.meta = invokeDefinition;\n return tempActor;\n}\nfunction createDeferredActor(entity, id, data) {\n var tempActor = createNullActor(id); // @ts-ignore\n\n tempActor.deferred = true;\n\n if (isMachine(entity)) {\n // \"mute\" the existing service scope so potential spawned actors within the `.initialState` stay deferred here\n var initialState_1 = tempActor.state = provide(undefined, function () {\n return (data ? entity.withContext(data) : entity).initialState;\n });\n\n tempActor.getSnapshot = function () {\n return initialState_1;\n };\n }\n\n return tempActor;\n}\nfunction isActor(item) {\n try {\n return typeof item.send === 'function';\n } catch (e) {\n return false;\n }\n}\nfunction isSpawnedActor(item) {\n return isActor(item) && 'id' in item;\n} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now\n\nfunction toActorRef(actorRefLike) {\n var _a;\n\n return __assign((_a = {\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n id: 'anonymous',\n getSnapshot: function () {\n return undefined;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a), actorRefLike);\n}\n\nexport { createDeferredActor, createInvocableActor, createNullActor, isActor, isSpawnedActor, toActorRef };\n", "import { __values, __spreadArray, __read } from './_virtual/_tslib.js';\nimport { flatten } from './utils.js';\n\nvar isLeafNode = function (stateNode) {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n};\nfunction getChildren(stateNode) {\n return Object.keys(stateNode.states).map(function (key) {\n return stateNode.states[key];\n });\n}\nfunction getAllStateNodes(stateNode) {\n var stateNodes = [stateNode];\n\n if (isLeafNode(stateNode)) {\n return stateNodes;\n }\n\n return stateNodes.concat(flatten(getChildren(stateNode).map(getAllStateNodes)));\n}\nfunction getConfiguration(prevStateNodes, stateNodes) {\n var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n\n var prevConfiguration = new Set(prevStateNodes);\n var prevAdjList = getAdjList(prevConfiguration);\n var configuration = new Set(stateNodes);\n\n try {\n // add all ancestors\n for (var configuration_1 = __values(configuration), configuration_1_1 = configuration_1.next(); !configuration_1_1.done; configuration_1_1 = configuration_1.next()) {\n var s = configuration_1_1.value;\n var m = s.parent;\n\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (configuration_1_1 && !configuration_1_1.done && (_a = configuration_1.return)) _a.call(configuration_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n var adjList = getAdjList(configuration);\n\n try {\n // add descendants\n for (var configuration_2 = __values(configuration), configuration_2_1 = configuration_2.next(); !configuration_2_1.done; configuration_2_1 = configuration_2.next()) {\n var s = configuration_2_1.value; // if previously active, add existing child nodes\n\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n if (prevAdjList.get(s)) {\n prevAdjList.get(s).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n s.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n } else {\n if (s.type === 'parallel') {\n try {\n for (var _e = (e_3 = void 0, __values(getChildren(s))), _f = _e.next(); !_f.done; _f = _e.next()) {\n var child = _f.value;\n\n if (child.type === 'history') {\n continue;\n }\n\n if (!configuration.has(child)) {\n configuration.add(child);\n\n if (prevAdjList.get(child)) {\n prevAdjList.get(child).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n child.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n }\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (configuration_2_1 && !configuration_2_1.done && (_b = configuration_2.return)) _b.call(configuration_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n try {\n // add all ancestors\n for (var configuration_3 = __values(configuration), configuration_3_1 = configuration_3.next(); !configuration_3_1.done; configuration_3_1 = configuration_3.next()) {\n var s = configuration_3_1.value;\n var m = s.parent;\n\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (configuration_3_1 && !configuration_3_1.done && (_d = configuration_3.return)) _d.call(configuration_3);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n return configuration;\n}\n\nfunction getValueFromAdj(baseNode, adjList) {\n var childStateNodes = adjList.get(baseNode);\n\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n var childStateNode = childStateNodes[0];\n\n if (childStateNode) {\n if (isLeafNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n\n var stateValue = {};\n childStateNodes.forEach(function (csn) {\n stateValue[csn.key] = getValueFromAdj(csn, adjList);\n });\n return stateValue;\n}\n\nfunction getAdjList(configuration) {\n var e_5, _a;\n\n var adjList = new Map();\n\n try {\n for (var configuration_4 = __values(configuration), configuration_4_1 = configuration_4.next(); !configuration_4_1.done; configuration_4_1 = configuration_4.next()) {\n var s = configuration_4_1.value;\n\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n\n adjList.get(s.parent).push(s);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (configuration_4_1 && !configuration_4_1.done && (_a = configuration_4.return)) _a.call(configuration_4);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n return adjList;\n}\nfunction getValue(rootNode, configuration) {\n var config = getConfiguration([rootNode], configuration);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction has(iterable, item) {\n if (Array.isArray(iterable)) {\n return iterable.some(function (member) {\n return member === item;\n });\n }\n\n if (iterable instanceof Set) {\n return iterable.has(item);\n }\n\n return false; // TODO: fix\n}\nfunction nextEvents(configuration) {\n return __spreadArray([], __read(new Set(flatten(__spreadArray([], __read(configuration.map(function (sn) {\n return sn.ownEvents;\n })), false)))), false);\n}\nfunction isInFinalState(configuration, stateNode) {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(function (s) {\n return s.type === 'final' && has(configuration, s);\n });\n }\n\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every(function (sn) {\n return isInFinalState(configuration, sn);\n });\n }\n\n return false;\n}\nfunction getMeta(configuration) {\n if (configuration === void 0) {\n configuration = [];\n }\n\n return configuration.reduce(function (acc, stateNode) {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n\n return acc;\n }, {});\n}\nfunction getTagsFromConfiguration(configuration) {\n return new Set(flatten(configuration.map(function (sn) {\n return sn.tags;\n })));\n}\n\nexport { getAdjList, getAllStateNodes, getChildren, getConfiguration, getMeta, getTagsFromConfiguration, getValue, has, isInFinalState, isLeafNode, nextEvents };\n", "import { __assign, __spreadArray, __read, __rest } from './_virtual/_tslib.js';\nimport { EMPTY_ACTIVITY_MAP } from './constants.js';\nimport { isString, matchesState, warn } from './utils.js';\nimport { getMeta, nextEvents } from './stateUtils.js';\nimport { initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nfunction stateValuesEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a === undefined || b === undefined) {\n return false;\n }\n\n if (isString(a) || isString(b)) {\n return a === b;\n }\n\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys.every(function (key) {\n return stateValuesEqual(a[key], b[key]);\n });\n}\nfunction isStateConfig(state) {\n if (typeof state !== 'object' || state === null) {\n return false;\n }\n\n return 'value' in state && '_event' in state;\n}\n/**\r\n * @deprecated Use `isStateConfig(object)` or `state instanceof State` instead.\r\n */\n\nvar isState = isStateConfig;\nfunction bindActionToState(action, state) {\n var exec = action.exec;\n\n var boundAction = __assign(__assign({}, action), {\n exec: exec !== undefined ? function () {\n return exec(state.context, state.event, {\n action: action,\n state: state,\n _event: state._event\n });\n } : undefined\n });\n\n return boundAction;\n}\n\nvar State =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new State instance.\r\n * @param value The state value\r\n * @param context The extended state\r\n * @param historyValue The tree representing historical values of the state nodes\r\n * @param history The previous state\r\n * @param actions An array of action objects to execute as side-effects\r\n * @param activities A mapping of activities and whether they are started (`true`) or stopped (`false`).\r\n * @param meta\r\n * @param events Internal event queue. Should be empty with run-to-completion semantics.\r\n * @param configuration\r\n */\n function State(config) {\n var _this = this;\n\n var _a;\n\n this.actions = [];\n this.activities = EMPTY_ACTIVITY_MAP;\n this.meta = {};\n this.events = [];\n this.value = config.value;\n this.context = config.context;\n this._event = config._event;\n this._sessionid = config._sessionid;\n this.event = this._event.data;\n this.historyValue = config.historyValue;\n this.history = config.history;\n this.actions = config.actions || [];\n this.activities = config.activities || EMPTY_ACTIVITY_MAP;\n this.meta = getMeta(config.configuration);\n this.events = config.events || [];\n this.matches = this.matches.bind(this);\n this.toStrings = this.toStrings.bind(this);\n this.configuration = config.configuration;\n this.transitions = config.transitions;\n this.children = config.children;\n this.done = !!config.done;\n this.tags = (_a = Array.isArray(config.tags) ? new Set(config.tags) : config.tags) !== null && _a !== void 0 ? _a : new Set();\n this.machine = config.machine;\n Object.defineProperty(this, 'nextEvents', {\n get: function () {\n return nextEvents(_this.configuration);\n }\n });\n }\n /**\r\n * Creates a new State instance for the given `stateValue` and `context`.\r\n * @param stateValue\r\n * @param context\r\n */\n\n\n State.from = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (stateValue.context !== context) {\n return new State({\n value: stateValue.value,\n context: context,\n _event: stateValue._event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n actions: [],\n activities: stateValue.activities,\n meta: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n }\n\n return stateValue;\n }\n\n var _event = initEvent;\n return new State({\n value: stateValue,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: undefined,\n history: undefined,\n actions: [],\n activities: undefined,\n meta: undefined,\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n };\n /**\r\n * Creates a new State instance for the given `config`.\r\n * @param config The state config\r\n */\n\n\n State.create = function (config) {\n return new State(config);\n };\n /**\r\n * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).\r\n * @param stateValue\r\n * @param context\r\n */\n\n\n State.inert = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (!stateValue.actions.length) {\n return stateValue;\n }\n\n var _event = initEvent;\n return new State({\n value: stateValue.value,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n activities: stateValue.activities,\n configuration: stateValue.configuration,\n transitions: [],\n children: {}\n });\n }\n\n return State.from(stateValue, context);\n };\n /**\r\n * Returns an array of all the string leaf state node paths.\r\n * @param stateValue\r\n * @param delimiter The character(s) that separate each subpath in the string state node path.\r\n */\n\n\n State.prototype.toStrings = function (stateValue, delimiter) {\n var _this = this;\n\n if (stateValue === void 0) {\n stateValue = this.value;\n }\n\n if (delimiter === void 0) {\n delimiter = '.';\n }\n\n if (isString(stateValue)) {\n return [stateValue];\n }\n\n var valueKeys = Object.keys(stateValue);\n return valueKeys.concat.apply(valueKeys, __spreadArray([], __read(valueKeys.map(function (key) {\n return _this.toStrings(stateValue[key], delimiter).map(function (s) {\n return key + delimiter + s;\n });\n })), false));\n };\n\n State.prototype.toJSON = function () {\n var _a = this;\n _a.configuration;\n _a.transitions;\n var tags = _a.tags;\n _a.machine;\n var jsonValues = __rest(_a, [\"configuration\", \"transitions\", \"tags\", \"machine\"]);\n\n return __assign(__assign({}, jsonValues), {\n tags: Array.from(tags)\n });\n };\n\n State.prototype.matches = function (parentStateValue) {\n return matchesState(parentStateValue, this.value);\n };\n /**\r\n * Whether the current state configuration has a state node with the specified `tag`.\r\n * @param tag\r\n */\n\n\n State.prototype.hasTag = function (tag) {\n return this.tags.has(tag);\n };\n /**\r\n * Determines whether sending the `event` will cause a non-forbidden transition\r\n * to be selected, even if the transitions have no actions nor\r\n * change the state value.\r\n *\r\n * @param event The event to test\r\n * @returns Whether the event will cause a transition\r\n */\n\n\n State.prototype.can = function (event) {\n var _a;\n\n if (IS_PRODUCTION) {\n warn(!!this.machine, \"state.can(...) used outside of a machine-created State object; this will always return false.\");\n }\n\n var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);\n return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) && // Check that at least one transition is not forbidden\n transitionData.transitions.some(function (t) {\n return t.target !== undefined || t.actions.length;\n });\n };\n\n return State;\n}();\n\nexport { State, bindActionToState, isState, isStateConfig, stateValuesEqual };\n", "import { __assign } from './_virtual/_tslib.js';\n\nvar defaultOptions = {\n deferEvents: false\n};\n\nvar Scheduler =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n function Scheduler(options) {\n this.processingEvent = false;\n this.queue = [];\n this.initialized = false;\n this.options = __assign(__assign({}, defaultOptions), options);\n }\n\n Scheduler.prototype.initialize = function (callback) {\n this.initialized = true;\n\n if (callback) {\n if (!this.options.deferEvents) {\n this.schedule(callback);\n return;\n }\n\n this.process(callback);\n }\n\n this.flushEvents();\n };\n\n Scheduler.prototype.schedule = function (task) {\n if (!this.initialized || this.processingEvent) {\n this.queue.push(task);\n return;\n }\n\n if (this.queue.length !== 0) {\n throw new Error('Event queue should be empty when it is not processing events');\n }\n\n this.process(task);\n this.flushEvents();\n };\n\n Scheduler.prototype.clear = function () {\n this.queue = [];\n };\n\n Scheduler.prototype.flushEvents = function () {\n var nextCallback = this.queue.shift();\n\n while (nextCallback) {\n this.process(nextCallback);\n nextCallback = this.queue.shift();\n }\n };\n\n Scheduler.prototype.process = function (callback) {\n this.processingEvent = true;\n\n try {\n callback();\n } catch (e) {\n // there is no use to keep the future events\n // as the situation is not anymore the same\n this.clear();\n throw e;\n } finally {\n this.processingEvent = false;\n }\n };\n\n return Scheduler;\n}();\n\nexport { Scheduler };\n", "var children = /*#__PURE__*/new Map();\nvar sessionIdIndex = 0;\nvar registry = {\n bookId: function () {\n return \"x:\".concat(sessionIdIndex++);\n },\n register: function (id, actor) {\n children.set(id, actor);\n return id;\n },\n get: function (id) {\n return children.get(id);\n },\n free: function (id) {\n children.delete(id);\n }\n};\n\nexport { registry };\n", "import { IS_PRODUCTION } from './environment.js';\n\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n if (!IS_PRODUCTION) {\n console.warn('XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues');\n }\n}\n\nfunction getDevTools() {\n var global = getGlobal();\n\n if (global && '__xstate__' in global) {\n return global.__xstate__;\n }\n\n return undefined;\n}\n\nfunction registerService(service) {\n if (!getGlobal()) {\n return;\n }\n\n var devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n}\n\nexport { getGlobal, registerService };\n", "import { error, doneInvoke } from './actions.js';\nimport { toActorRef } from './Actor.js';\nimport { toObserver } from './utils.js';\n\n/**\r\n * Returns an actor behavior from a reducer and its initial state.\r\n *\r\n * @param transition The pure reducer that returns the next state given the current state and event.\r\n * @param initialState The initial state of the reducer.\r\n * @returns An actor behavior\r\n */\n\nfunction fromReducer(transition, initialState) {\n return {\n transition: transition,\n initialState: initialState\n };\n}\nfunction fromPromise(promiseFn) {\n var initialState = {\n error: undefined,\n data: undefined,\n status: 'pending'\n };\n return {\n transition: function (state, event, _a) {\n var parent = _a.parent,\n id = _a.id,\n observers = _a.observers;\n\n switch (event.type) {\n case 'fulfill':\n parent === null || parent === void 0 ? void 0 : parent.send(doneInvoke(id, event.data));\n return {\n error: undefined,\n data: event.data,\n status: 'fulfilled'\n };\n\n case 'reject':\n parent === null || parent === void 0 ? void 0 : parent.send(error(id, event.error));\n observers.forEach(function (observer) {\n observer.error(event.error);\n });\n return {\n error: event.error,\n data: undefined,\n status: 'rejected'\n };\n\n default:\n return state;\n }\n },\n initialState: initialState,\n start: function (_a) {\n var self = _a.self;\n promiseFn().then(function (data) {\n self.send({\n type: 'fulfill',\n data: data\n });\n }, function (reason) {\n self.send({\n type: 'reject',\n error: reason\n });\n });\n return initialState;\n }\n };\n}\nfunction spawnBehavior(behavior, options) {\n if (options === void 0) {\n options = {};\n }\n\n var state = behavior.initialState;\n var observers = new Set();\n var mailbox = [];\n var flushing = false;\n\n var flush = function () {\n if (flushing) {\n return;\n }\n\n flushing = true;\n\n while (mailbox.length > 0) {\n var event_1 = mailbox.shift();\n state = behavior.transition(state, event_1, actorCtx);\n observers.forEach(function (observer) {\n return observer.next(state);\n });\n }\n\n flushing = false;\n };\n\n var actor = toActorRef({\n id: options.id,\n send: function (event) {\n mailbox.push(event);\n flush();\n },\n getSnapshot: function () {\n return state;\n },\n subscribe: function (next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n observers.add(observer);\n observer.next(state);\n return {\n unsubscribe: function () {\n observers.delete(observer);\n }\n };\n }\n });\n var actorCtx = {\n parent: options.parent,\n self: actor,\n id: options.id || 'anonymous',\n observers: observers\n };\n state = behavior.start ? behavior.start(actorCtx) : state;\n return actor;\n}\n\nexport { fromPromise, fromReducer, spawnBehavior };\n", "import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { ActionTypes, SpecialTargets } from './types.js';\nimport { isStateConfig, State, bindActionToState } from './State.js';\nimport { errorPlatform, log, stop, start, cancel, send, update, error as error$1 } from './actionTypes.js';\nimport { doneInvoke, initEvent, getActionFunction, error } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { warn, mapContext, isFunction, toSCXMLEvent, toInvokeSource, isMachine, isPromiseLike, isObservable, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, uniqueId, toObserver } from './utils.js';\nimport { Scheduler } from './scheduler.js';\nimport { isSpawnedActor, createDeferredActor } from './Actor.js';\nimport { isInFinalState } from './stateUtils.js';\nimport { registry } from './registry.js';\nimport { getGlobal, registerService } from './devTools.js';\nimport { provide, consume } from './serviceScope.js';\nimport { spawnBehavior } from './behaviors.js';\n\nvar DEFAULT_SPAWN_OPTIONS = {\n sync: false,\n autoForward: false\n};\nvar InterpreterStatus;\n\n(function (InterpreterStatus) {\n InterpreterStatus[InterpreterStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n InterpreterStatus[InterpreterStatus[\"Running\"] = 1] = \"Running\";\n InterpreterStatus[InterpreterStatus[\"Stopped\"] = 2] = \"Stopped\";\n})(InterpreterStatus || (InterpreterStatus = {}));\n\nvar Interpreter =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to be interpreted\r\n * @param options Interpreter options\r\n */\n function Interpreter(machine, options) {\n var _this = this;\n\n if (options === void 0) {\n options = Interpreter.defaultOptions;\n }\n\n this.machine = machine;\n this.scheduler = new Scheduler();\n this.delayedEventsMap = {};\n this.listeners = new Set();\n this.contextListeners = new Set();\n this.stopListeners = new Set();\n this.doneListeners = new Set();\n this.eventListeners = new Set();\n this.sendListeners = new Set();\n /**\r\n * Whether the service is started.\r\n */\n\n this.initialized = false;\n this.status = InterpreterStatus.NotStarted;\n this.children = new Map();\n this.forwardTo = new Set();\n /**\r\n * Alias for Interpreter.prototype.start\r\n */\n\n this.init = this.start;\n /**\r\n * Sends an event to the running interpreter to trigger a transition.\r\n *\r\n * An array of events (batched) can be sent as well, which will send all\r\n * batched events to the running interpreter. The listeners will be\r\n * notified only **once** when all events are processed.\r\n *\r\n * @param event The event(s) to send\r\n */\n\n this.send = function (event, payload) {\n if (isArray(event)) {\n _this.batch(event);\n\n return _this.state;\n }\n\n var _event = toSCXMLEvent(toEventObject(event, payload));\n\n if (_this.status === InterpreterStatus.Stopped) {\n // do nothing\n if (!IS_PRODUCTION) {\n warn(false, \"Event \\\"\".concat(_event.name, \"\\\" was sent to stopped service \\\"\").concat(_this.machine.id, \"\\\". This service has already reached its final state, and will not transition.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n\n return _this.state;\n }\n\n if (_this.status !== InterpreterStatus.Running && !_this.options.deferEvents) {\n throw new Error(\"Event \\\"\".concat(_event.name, \"\\\" was sent to uninitialized service \\\"\").concat(_this.machine.id // tslint:disable-next-line:max-line-length\n , \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n\n _this.scheduler.schedule(function () {\n // Forward copy of event to child actors\n _this.forward(_event);\n\n var nextState = _this.nextState(_event);\n\n _this.update(nextState, _event);\n });\n\n return _this._state; // TODO: deprecate (should return void)\n // tslint:disable-next-line:semicolon\n };\n\n this.sendTo = function (event, to) {\n var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);\n var target = isParent ? _this.parent : isString(to) ? _this.children.get(to) || registry.get(to) : isActor(to) ? to : undefined;\n\n if (!target) {\n if (!isParent) {\n throw new Error(\"Unable to send event to child '\".concat(to, \"' from service '\").concat(_this.id, \"'.\"));\n } // tslint:disable-next-line:no-console\n\n\n if (!IS_PRODUCTION) {\n warn(false, \"Service '\".concat(_this.id, \"' has no parent: unable to send event \").concat(event.type));\n }\n\n return;\n }\n\n if ('machine' in target) {\n // Send SCXML events to machines\n target.send(__assign(__assign({}, event), {\n name: event.name === error$1 ? \"\".concat(error(_this.id)) : event.name,\n origin: _this.sessionId\n }));\n } else {\n // Send normal events to other targets\n target.send(event.data);\n }\n };\n\n var resolvedOptions = __assign(__assign({}, Interpreter.defaultOptions), options);\n\n var clock = resolvedOptions.clock,\n logger = resolvedOptions.logger,\n parent = resolvedOptions.parent,\n id = resolvedOptions.id;\n var resolvedId = id !== undefined ? id : machine.id;\n this.id = resolvedId;\n this.logger = logger;\n this.clock = clock;\n this.parent = parent;\n this.options = resolvedOptions;\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n this.sessionId = registry.bookId();\n }\n\n Object.defineProperty(Interpreter.prototype, \"initialState\", {\n get: function () {\n var _this = this;\n\n if (this._initialState) {\n return this._initialState;\n }\n\n return provide(this, function () {\n _this._initialState = _this.machine.initialState;\n return _this._initialState;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Interpreter.prototype, \"state\", {\n get: function () {\n if (!IS_PRODUCTION) {\n warn(this.status !== InterpreterStatus.NotStarted, \"Attempted to read state from uninitialized service '\".concat(this.id, \"'. Make sure the service is started first.\"));\n }\n\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Executes the actions of the given state, with that state's `context` and `event`.\r\n *\r\n * @param state The state whose actions will be executed\r\n * @param actionsConfig The action implementations to use\r\n */\n\n Interpreter.prototype.execute = function (state, actionsConfig) {\n var e_1, _a;\n\n try {\n for (var _b = __values(state.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n this.exec(action, state, actionsConfig);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n\n Interpreter.prototype.update = function (state, _event) {\n var e_2, _a, e_3, _b, e_4, _c, e_5, _d;\n\n var _this = this; // Attach session ID to state\n\n\n state._sessionid = this.sessionId; // Update state\n\n this._state = state; // Execute actions\n\n if (this.options.execute) {\n this.execute(this.state);\n } // Update children\n\n\n this.children.forEach(function (child) {\n _this.state.children[child.id] = child;\n }); // Dev tools\n\n if (this.devTools) {\n this.devTools.send(_event.data, state);\n } // Execute listeners\n\n\n if (state.event) {\n try {\n for (var _e = __values(this.eventListeners), _f = _e.next(); !_f.done; _f = _e.next()) {\n var listener = _f.value;\n listener(state.event);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n\n try {\n for (var _g = __values(this.listeners), _h = _g.next(); !_h.done; _h = _g.next()) {\n var listener = _h.value;\n listener(state, state.event);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n try {\n for (var _j = __values(this.contextListeners), _k = _j.next(); !_k.done; _k = _j.next()) {\n var contextListener = _k.value;\n contextListener(this.state.context, this.state.history ? this.state.history.context : undefined);\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n var isDone = isInFinalState(state.configuration || [], this.machine);\n\n if (this.state.configuration && isDone) {\n // get final child state node\n var finalChildStateNode = state.configuration.find(function (sn) {\n return sn.type === 'final' && sn.parent === _this.machine;\n });\n var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;\n\n try {\n for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {\n var listener = _m.value;\n listener(doneInvoke(this.id, doneData));\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n this.stop();\n }\n };\n /*\r\n * Adds a listener that is notified whenever a state transition happens. The listener is called with\r\n * the next state and the event object that caused the state transition.\r\n *\r\n * @param listener The state listener\r\n */\n\n\n Interpreter.prototype.onTransition = function (listener) {\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status === InterpreterStatus.Running) {\n listener(this.state, this.state.event);\n }\n\n return this;\n };\n\n Interpreter.prototype.subscribe = function (nextListenerOrObserver, _, // TODO: error listener\n completeListener) {\n var _this = this;\n\n if (!nextListenerOrObserver) {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n }\n\n var listener;\n var resolvedCompleteListener = completeListener;\n\n if (typeof nextListenerOrObserver === 'function') {\n listener = nextListenerOrObserver;\n } else {\n listener = nextListenerOrObserver.next.bind(nextListenerOrObserver);\n resolvedCompleteListener = nextListenerOrObserver.complete.bind(nextListenerOrObserver);\n }\n\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status === InterpreterStatus.Running) {\n listener(this.state);\n }\n\n if (resolvedCompleteListener) {\n this.onDone(resolvedCompleteListener);\n }\n\n return {\n unsubscribe: function () {\n listener && _this.listeners.delete(listener);\n resolvedCompleteListener && _this.doneListeners.delete(resolvedCompleteListener);\n }\n };\n };\n /**\r\n * Adds an event listener that is notified whenever an event is sent to the running interpreter.\r\n * @param listener The event listener\r\n */\n\n\n Interpreter.prototype.onEvent = function (listener) {\n this.eventListeners.add(listener);\n return this;\n };\n /**\r\n * Adds an event listener that is notified whenever a `send` event occurs.\r\n * @param listener The event listener\r\n */\n\n\n Interpreter.prototype.onSend = function (listener) {\n this.sendListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a context listener that is notified whenever the state context changes.\r\n * @param listener The context listener\r\n */\n\n\n Interpreter.prototype.onChange = function (listener) {\n this.contextListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a listener that is notified when the machine is stopped.\r\n * @param listener The listener\r\n */\n\n\n Interpreter.prototype.onStop = function (listener) {\n this.stopListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a state listener that is notified when the statechart has reached its final state.\r\n * @param listener The state listener\r\n */\n\n\n Interpreter.prototype.onDone = function (listener) {\n this.doneListeners.add(listener);\n return this;\n };\n /**\r\n * Removes a listener.\r\n * @param listener The listener to remove\r\n */\n\n\n Interpreter.prototype.off = function (listener) {\n this.listeners.delete(listener);\n this.eventListeners.delete(listener);\n this.sendListeners.delete(listener);\n this.stopListeners.delete(listener);\n this.doneListeners.delete(listener);\n this.contextListeners.delete(listener);\n return this;\n };\n /**\r\n * Starts the interpreter from the given state, or the initial state.\r\n * @param initialState The state to start the statechart from\r\n */\n\n\n Interpreter.prototype.start = function (initialState) {\n var _this = this;\n\n if (this.status === InterpreterStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n } // yes, it's a hack but we need the related cache to be populated for some things to work (like delayed transitions)\n // this is usually called by `machine.getInitialState` but if we rehydrate from a state we might bypass this call\n // we also don't want to call this method here as it resolves the full initial state which might involve calling assign actions\n // and that could potentially lead to some unwanted side-effects (even such as creating some rogue actors)\n\n\n this.machine._init();\n\n registry.register(this.sessionId, this);\n this.initialized = true;\n this.status = InterpreterStatus.Running;\n var resolvedState = initialState === undefined ? this.initialState : provide(this, function () {\n return isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.from(initialState, _this.machine.context));\n });\n\n if (this.options.devTools) {\n this.attachDev();\n }\n\n this.scheduler.initialize(function () {\n _this.update(resolvedState, initEvent);\n });\n return this;\n };\n /**\r\n * Stops the interpreter and unsubscribe all listeners.\r\n *\r\n * This will also notify the `onStop` listeners.\r\n */\n\n\n Interpreter.prototype.stop = function () {\n var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n\n var _this = this;\n\n try {\n for (var _f = __values(this.listeners), _g = _f.next(); !_g.done; _g = _f.next()) {\n var listener = _g.value;\n this.listeners.delete(listener);\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n try {\n for (var _h = __values(this.stopListeners), _j = _h.next(); !_j.done; _j = _h.next()) {\n var listener = _j.value; // call listener, then remove\n\n listener();\n this.stopListeners.delete(listener);\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n\n try {\n for (var _k = __values(this.contextListeners), _l = _k.next(); !_l.done; _l = _k.next()) {\n var listener = _l.value;\n this.contextListeners.delete(listener);\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n\n try {\n for (var _m = __values(this.doneListeners), _o = _m.next(); !_o.done; _o = _m.next()) {\n var listener = _o.value;\n this.doneListeners.delete(listener);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n\n if (!this.initialized) {\n // Interpreter already stopped; do nothing\n return this;\n }\n\n __spreadArray([], __read(this.state.configuration), false).sort(function (a, b) {\n return b.order - a.order;\n }).forEach(function (stateNode) {\n var e_11, _a;\n\n try {\n for (var _b = __values(stateNode.definition.exit), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n\n _this.exec(action, _this.state);\n }\n } catch (e_11_1) {\n e_11 = {\n error: e_11_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_11) throw e_11.error;\n }\n }\n }); // Stop all children\n\n\n this.children.forEach(function (child) {\n if (isFunction(child.stop)) {\n child.stop();\n }\n });\n\n try {\n // Cancel all delayed events\n for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {\n var key = _q.value;\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n } catch (e_10_1) {\n e_10 = {\n error: e_10_1\n };\n } finally {\n try {\n if (_q && !_q.done && (_e = _p.return)) _e.call(_p);\n } finally {\n if (e_10) throw e_10.error;\n }\n }\n\n this.scheduler.clear();\n this.initialized = false;\n this.status = InterpreterStatus.Stopped;\n registry.free(this.sessionId);\n return this;\n };\n\n Interpreter.prototype.batch = function (events) {\n var _this = this;\n\n if (this.status === InterpreterStatus.NotStarted && this.options.deferEvents) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\" and are deferred. Make sure .start() is called for this service.\\nEvent: \").concat(JSON.stringify(event)));\n }\n } else if (this.status !== InterpreterStatus.Running) {\n throw new Error( // tslint:disable-next-line:max-line-length\n \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\"));\n }\n\n this.scheduler.schedule(function () {\n var e_12, _a;\n\n var nextState = _this.state;\n var batchChanged = false;\n var batchedActions = [];\n\n var _loop_1 = function (event_1) {\n var _event = toSCXMLEvent(event_1);\n\n _this.forward(_event);\n\n nextState = provide(_this, function () {\n return _this.machine.transition(nextState, _event);\n });\n batchedActions.push.apply(batchedActions, __spreadArray([], __read(nextState.actions.map(function (a) {\n return bindActionToState(a, nextState);\n })), false));\n batchChanged = batchChanged || !!nextState.changed;\n };\n\n try {\n for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\n var event_1 = events_1_1.value;\n\n _loop_1(event_1);\n }\n } catch (e_12_1) {\n e_12 = {\n error: e_12_1\n };\n } finally {\n try {\n if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\n } finally {\n if (e_12) throw e_12.error;\n }\n }\n\n nextState.changed = batchChanged;\n nextState.actions = batchedActions;\n\n _this.update(nextState, toSCXMLEvent(events[events.length - 1]));\n });\n };\n /**\r\n * Returns a send function bound to this interpreter instance.\r\n *\r\n * @param event The event to be sent by the sender.\r\n */\n\n\n Interpreter.prototype.sender = function (event) {\n return this.send.bind(this, event);\n };\n /**\r\n * Returns the next state given the interpreter's current state and the event.\r\n *\r\n * This is a pure method that does _not_ update the interpreter's state.\r\n *\r\n * @param event The event to determine the next state\r\n */\n\n\n Interpreter.prototype.nextState = function (event) {\n var _this = this;\n\n var _event = toSCXMLEvent(event);\n\n if (_event.name.indexOf(errorPlatform) === 0 && !this.state.nextEvents.some(function (nextEvent) {\n return nextEvent.indexOf(errorPlatform) === 0;\n })) {\n throw _event.data.data;\n }\n\n var nextState = provide(this, function () {\n return _this.machine.transition(_this.state, _event);\n });\n return nextState;\n };\n\n Interpreter.prototype.forward = function (event) {\n var e_13, _a;\n\n try {\n for (var _b = __values(this.forwardTo), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n var child = this.children.get(id);\n\n if (!child) {\n throw new Error(\"Unable to forward event '\".concat(event, \"' from interpreter '\").concat(this.id, \"' to nonexistant child '\").concat(id, \"'.\"));\n }\n\n child.send(event);\n }\n } catch (e_13_1) {\n e_13 = {\n error: e_13_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_13) throw e_13.error;\n }\n }\n };\n\n Interpreter.prototype.defer = function (sendAction) {\n var _this = this;\n\n this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }, sendAction.delay);\n };\n\n Interpreter.prototype.cancel = function (sendId) {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n };\n\n Interpreter.prototype.exec = function (action, state, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = this.machine.options.actions;\n }\n\n var context = state.context,\n _event = state._event;\n var actionOrExec = action.exec || getActionFunction(action.type, actionFunctionMap);\n var exec = isFunction(actionOrExec) ? actionOrExec : actionOrExec ? actionOrExec.exec : action.exec;\n\n if (exec) {\n try {\n return exec(context, _event.data, {\n action: action,\n state: this.state,\n _event: _event\n });\n } catch (err) {\n if (this.parent) {\n this.parent.send({\n type: 'xstate.error',\n data: err\n });\n }\n\n throw err;\n }\n }\n\n switch (action.type) {\n case send:\n var sendAction = action;\n\n if (typeof sendAction.delay === 'number') {\n this.defer(sendAction);\n return;\n } else {\n if (sendAction.to) {\n this.sendTo(sendAction._event, sendAction.to);\n } else {\n this.send(sendAction._event);\n }\n }\n\n break;\n\n case cancel:\n this.cancel(action.sendId);\n break;\n\n case start:\n {\n if (this.status !== InterpreterStatus.Running) {\n return;\n }\n\n var activity = action.activity; // If the activity will be stopped right after it's started\n // (such as in transient states)\n // don't bother starting the activity.\n\n if (!this.state.activities[activity.id || activity.type]) {\n break;\n } // Invoked services\n\n\n if (activity.type === ActionTypes.Invoke) {\n var invokeSource = toInvokeSource(activity.src);\n var serviceCreator = this.machine.options.services ? this.machine.options.services[invokeSource.type] : undefined;\n var id = activity.id,\n data = activity.data;\n\n if (!IS_PRODUCTION) {\n warn(!('forward' in activity), // tslint:disable-next-line:max-line-length\n \"`forward` property is deprecated (found in invocation of '\".concat(activity.src, \"' in in machine '\").concat(this.machine.id, \"'). \") + \"Please use `autoForward` instead.\");\n }\n\n var autoForward = 'autoForward' in activity ? activity.autoForward : !!activity.forward;\n\n if (!serviceCreator) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"No service found for invocation '\".concat(activity.src, \"' in machine '\").concat(this.machine.id, \"'.\"));\n }\n\n return;\n }\n\n var resolvedData = data ? mapContext(data, context, _event) : undefined;\n\n if (typeof serviceCreator === 'string') {\n // TODO: warn\n return;\n }\n\n var source = isFunction(serviceCreator) ? serviceCreator(context, _event.data, {\n data: resolvedData,\n src: invokeSource,\n meta: activity.meta\n }) : serviceCreator;\n\n if (!source) {\n // TODO: warn?\n return;\n }\n\n var options = void 0;\n\n if (isMachine(source)) {\n source = resolvedData ? source.withContext(resolvedData) : source;\n options = {\n autoForward: autoForward\n };\n }\n\n this.spawn(source, id, options);\n } else {\n this.spawnActivity(activity);\n }\n\n break;\n }\n\n case stop:\n {\n this.stopChild(action.activity.id);\n break;\n }\n\n case log:\n var label = action.label,\n value = action.value;\n\n if (label) {\n this.logger(label, value);\n } else {\n this.logger(value);\n }\n\n break;\n\n default:\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for action type '\".concat(action.type, \"'\"));\n }\n\n break;\n }\n\n return undefined;\n };\n\n Interpreter.prototype.removeChild = function (childId) {\n var _a;\n\n this.children.delete(childId);\n this.forwardTo.delete(childId); // this.state might not exist at the time this is called,\n // such as when a child is added then removed while initializing the state\n\n (_a = this.state) === null || _a === void 0 ? true : delete _a.children[childId];\n };\n\n Interpreter.prototype.stopChild = function (childId) {\n var child = this.children.get(childId);\n\n if (!child) {\n return;\n }\n\n this.removeChild(childId);\n\n if (isFunction(child.stop)) {\n child.stop();\n }\n };\n\n Interpreter.prototype.spawn = function (entity, name, options) {\n if (isPromiseLike(entity)) {\n return this.spawnPromise(Promise.resolve(entity), name);\n } else if (isFunction(entity)) {\n return this.spawnCallback(entity, name);\n } else if (isSpawnedActor(entity)) {\n return this.spawnActor(entity, name);\n } else if (isObservable(entity)) {\n return this.spawnObservable(entity, name);\n } else if (isMachine(entity)) {\n return this.spawnMachine(entity, __assign(__assign({}, options), {\n id: name\n }));\n } else if (isBehavior(entity)) {\n return this.spawnBehavior(entity, name);\n } else {\n throw new Error(\"Unable to spawn entity \\\"\".concat(name, \"\\\" of type \\\"\").concat(typeof entity, \"\\\".\"));\n }\n };\n\n Interpreter.prototype.spawnMachine = function (machine, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n var childService = new Interpreter(machine, __assign(__assign({}, this.options), {\n parent: this,\n id: options.id || machine.id\n }));\n\n var resolvedOptions = __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), options);\n\n if (resolvedOptions.sync) {\n childService.onTransition(function (state) {\n _this.send(update, {\n state: state,\n id: childService.id\n });\n });\n }\n\n var actor = childService;\n this.children.set(childService.id, actor);\n\n if (resolvedOptions.autoForward) {\n this.forwardTo.add(childService.id);\n }\n\n childService.onDone(function (doneEvent) {\n _this.removeChild(childService.id);\n\n _this.send(toSCXMLEvent(doneEvent, {\n origin: childService.id\n }));\n }).start();\n return actor;\n };\n\n Interpreter.prototype.spawnBehavior = function (behavior, id) {\n var actorRef = spawnBehavior(behavior, {\n id: id,\n parent: this\n });\n this.children.set(id, actorRef);\n return actorRef;\n };\n\n Interpreter.prototype.spawnPromise = function (promise, id) {\n var _a;\n\n var _this = this;\n\n var canceled = false;\n var resolvedData;\n promise.then(function (response) {\n if (!canceled) {\n resolvedData = response;\n\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(doneInvoke(id, response), {\n origin: id\n }));\n }\n }, function (errorData) {\n if (!canceled) {\n _this.removeChild(id);\n\n var errorEvent = error(id, errorData);\n\n try {\n // Send \"error.platform.id\" to this (parent).\n _this.send(toSCXMLEvent(errorEvent, {\n origin: id\n }));\n } catch (error) {\n reportUnhandledExceptionOnInvocation(errorData, error, id);\n\n if (_this.devTools) {\n _this.devTools.send(errorEvent, _this.state);\n }\n\n if (_this.machine.strict) {\n // it would be better to always stop the state machine if unhandled\n // exception/promise rejection happens but because we don't want to\n // break existing code so enforce it on strict mode only especially so\n // because documentation says that onError is optional\n _this.stop();\n }\n }\n }\n });\n var actor = (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function (next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n var unsubscribed = false;\n promise.then(function (response) {\n if (unsubscribed) {\n return;\n }\n\n observer.next(response);\n\n if (unsubscribed) {\n return;\n }\n\n observer.complete();\n }, function (err) {\n if (unsubscribed) {\n return;\n }\n\n observer.error(err);\n });\n return {\n unsubscribe: function () {\n return unsubscribed = true;\n }\n };\n },\n stop: function () {\n canceled = true;\n },\n toJSON: function () {\n return {\n id: id\n };\n },\n getSnapshot: function () {\n return resolvedData;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnCallback = function (callback, id) {\n var _a;\n\n var _this = this;\n\n var canceled = false;\n var receivers = new Set();\n var listeners = new Set();\n var emitted;\n\n var receive = function (e) {\n emitted = e;\n listeners.forEach(function (listener) {\n return listener(e);\n });\n\n if (canceled) {\n return;\n }\n\n _this.send(toSCXMLEvent(e, {\n origin: id\n }));\n };\n\n var callbackStop;\n\n try {\n callbackStop = callback(receive, function (newListener) {\n receivers.add(newListener);\n });\n } catch (err) {\n this.send(error(id, err));\n }\n\n if (isPromiseLike(callbackStop)) {\n // it turned out to be an async function, can't reliably check this before calling `callback`\n // because transpiled async functions are not recognizable\n return this.spawnPromise(callbackStop, id);\n }\n\n var actor = (_a = {\n id: id,\n send: function (event) {\n return receivers.forEach(function (receiver) {\n return receiver(event);\n });\n },\n subscribe: function (next) {\n var observer = toObserver(next);\n listeners.add(observer.next);\n return {\n unsubscribe: function () {\n listeners.delete(observer.next);\n }\n };\n },\n stop: function () {\n canceled = true;\n\n if (isFunction(callbackStop)) {\n callbackStop();\n }\n },\n toJSON: function () {\n return {\n id: id\n };\n },\n getSnapshot: function () {\n return emitted;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnObservable = function (source, id) {\n var _a;\n\n var _this = this;\n\n var emitted;\n var subscription = source.subscribe(function (value) {\n emitted = value;\n\n _this.send(toSCXMLEvent(value, {\n origin: id\n }));\n }, function (err) {\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(error(id, err), {\n origin: id\n }));\n }, function () {\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(doneInvoke(id), {\n origin: id\n }));\n });\n var actor = (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function (next, handleError, complete) {\n return source.subscribe(next, handleError, complete);\n },\n stop: function () {\n return subscription.unsubscribe();\n },\n getSnapshot: function () {\n return emitted;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnActor = function (actor, name) {\n this.children.set(name, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnActivity = function (activity) {\n var implementation = this.machine.options && this.machine.options.activities ? this.machine.options.activities[activity.type] : undefined;\n\n if (!implementation) {\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for activity '\".concat(activity.type, \"'\"));\n } // tslint:disable-next-line:no-console\n\n\n return;\n } // Start implementation\n\n\n var dispose = implementation(this.state.context, activity);\n this.spawnEffect(activity.id, dispose);\n };\n\n Interpreter.prototype.spawnEffect = function (id, dispose) {\n var _a;\n\n this.children.set(id, (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n stop: dispose || undefined,\n getSnapshot: function () {\n return undefined;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a));\n };\n\n Interpreter.prototype.attachDev = function () {\n var global = getGlobal();\n\n if (this.options.devTools && global) {\n if (global.__REDUX_DEVTOOLS_EXTENSION__) {\n var devToolsOptions = typeof this.options.devTools === 'object' ? this.options.devTools : undefined;\n this.devTools = global.__REDUX_DEVTOOLS_EXTENSION__.connect(__assign(__assign({\n name: this.id,\n autoPause: true,\n stateSanitizer: function (state) {\n return {\n value: state.value,\n context: state.context,\n actions: state.actions\n };\n }\n }, devToolsOptions), {\n features: __assign({\n jump: false,\n skip: false\n }, devToolsOptions ? devToolsOptions.features : undefined)\n }), this.machine);\n this.devTools.init(this.state);\n } // add XState-specific dev tooling hook\n\n\n registerService(this);\n }\n };\n\n Interpreter.prototype.toJSON = function () {\n return {\n id: this.id\n };\n };\n\n Interpreter.prototype[symbolObservable] = function () {\n return this;\n };\n\n Interpreter.prototype.getSnapshot = function () {\n if (this.status === InterpreterStatus.NotStarted) {\n return this.initialState;\n }\n\n return this._state;\n };\n /**\r\n * The default interpreter options:\r\n *\r\n * - `clock` uses the global `setTimeout` and `clearTimeout` functions\r\n * - `logger` uses the global `console.log()` method\r\n */\n\n\n Interpreter.defaultOptions = {\n execute: true,\n deferEvents: true,\n clock: {\n setTimeout: function (fn, ms) {\n return setTimeout(fn, ms);\n },\n clearTimeout: function (id) {\n return clearTimeout(id);\n }\n },\n logger: /*#__PURE__*/console.log.bind(console),\n devTools: false\n };\n Interpreter.interpret = interpret;\n return Interpreter;\n}();\n\nvar resolveSpawnOptions = function (nameOrOptions) {\n if (isString(nameOrOptions)) {\n return __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n name: nameOrOptions\n });\n }\n\n return __assign(__assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n name: uniqueId()\n }), nameOrOptions);\n};\n\nfunction spawn(entity, nameOrOptions) {\n var resolvedOptions = resolveSpawnOptions(nameOrOptions);\n return consume(function (service) {\n if (!IS_PRODUCTION) {\n var isLazyEntity = isMachine(entity) || isFunction(entity);\n warn(!!service || isLazyEntity, \"Attempted to spawn an Actor (ID: \\\"\".concat(isMachine(entity) ? entity.id : 'undefined', \"\\\") outside of a service. This will have no effect.\"));\n }\n\n if (service) {\n return service.spawn(entity, resolvedOptions.name, resolvedOptions);\n } else {\n return createDeferredActor(entity, resolvedOptions.name);\n }\n });\n}\n/**\r\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to interpret\r\n * @param options Interpreter options\r\n */\n\nfunction interpret(machine, options) {\n var interpreter = new Interpreter(machine, options);\n return interpreter;\n}\n\nexport { Interpreter, InterpreterStatus, interpret, spawn };\n", "import { __assign, __rest } from './_virtual/_tslib.js';\nimport './types.js';\nimport { invoke } from './actionTypes.js';\nimport './utils.js';\nimport './environment.js';\n\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n var simpleSrc = {\n type: src\n };\n\n simpleSrc.toString = function () {\n return src;\n }; // v4 compat - TODO: remove in v5\n\n\n return simpleSrc;\n }\n\n return src;\n}\nfunction toInvokeDefinition(invokeConfig) {\n return __assign(__assign({\n type: invoke\n }, invokeConfig), {\n toJSON: function () {\n invokeConfig.onDone;\n invokeConfig.onError;\n var invokeDef = __rest(invokeConfig, [\"onDone\", \"onError\"]);\n\n return __assign(__assign({}, invokeDef), {\n type: invoke,\n src: toInvokeSource(invokeConfig.src)\n });\n }\n });\n}\n\nexport { toInvokeDefinition, toInvokeSource };\n", "import { __assign, __spreadArray, __read, __values, __rest } from './_virtual/_tslib.js';\nimport { isFunction, mapValues, isArray, flatten, toArray, toStateValue, isString, getEventType, toSCXMLEvent, matchesState, path, evaluateGuard, mapContext, pathToStateValue, isBuiltInEvent, partition, updateHistoryValue, toStatePath, mapFilterValues, warn, toStatePaths, nestedPath, normalizeTarget, toGuard, toTransitionConfigArray, isMachine, createInvokeId } from './utils.js';\nimport { SpecialTargets } from './types.js';\nimport { State, stateValuesEqual } from './State.js';\nimport { start as start$1, stop as stop$1, raise as raise$1, send, invoke, update, nullEvent } from './actionTypes.js';\nimport { done, start, raise, stop, toActionObjects, resolveActions, doneInvoke, error, toActionObject, toActivityDefinition, after, send as send$1, cancel, initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { STATE_DELIMITER } from './constants.js';\nimport { getAllStateNodes, getConfiguration, isInFinalState, getTagsFromConfiguration, has, getChildren, getValue, isLeafNode } from './stateUtils.js';\nimport { createInvocableActor } from './Actor.js';\nimport { toInvokeDefinition } from './invokeUtils.js';\n\nvar NULL_EVENT = '';\nvar STATE_IDENTIFIER = '#';\nvar WILDCARD = '*';\nvar EMPTY_OBJECT = {};\n\nvar isStateId = function (str) {\n return str[0] === STATE_IDENTIFIER;\n};\n\nvar createDefaultOptions = function () {\n return {\n actions: {},\n guards: {},\n services: {},\n activities: {},\n delays: {}\n };\n};\n\nvar validateArrayifiedTransitions = function (stateNode, event, transitions) {\n var hasNonLastUnguardedTarget = transitions.slice(0, -1).some(function (transition) {\n return !('cond' in transition) && !('in' in transition) && (isString(transition.target) || isMachine(transition.target));\n });\n var eventText = event === NULL_EVENT ? 'the transient event' : \"event '\".concat(event, \"'\");\n warn(!hasNonLastUnguardedTarget, \"One or more transitions for \".concat(eventText, \" on state '\").concat(stateNode.id, \"' are unreachable. \") + \"Make sure that the default transition is the last one defined.\");\n};\n\nvar StateNode =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n function StateNode(\n /**\r\n * The raw config used to create the machine.\r\n */\n config, options,\n /**\r\n * The initial extended state\r\n */\n _context, // TODO: this is unsafe, but we're removing it in v5 anyway\n _stateInfo) {\n var _this = this;\n\n if (_context === void 0) {\n _context = 'context' in config ? config.context : undefined;\n }\n\n var _a;\n\n this.config = config;\n this._context = _context;\n /**\r\n * The order this state node appears. Corresponds to the implicit SCXML document order.\r\n */\n\n this.order = -1;\n this.__xstatenode = true;\n this.__cache = {\n events: undefined,\n relativeValue: new Map(),\n initialStateValue: undefined,\n initialState: undefined,\n on: undefined,\n transitions: undefined,\n candidates: {},\n delayedTransitions: undefined\n };\n this.idMap = {};\n this.tags = [];\n this.options = Object.assign(createDefaultOptions(), options);\n this.parent = _stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.parent;\n this.key = this.config.key || (_stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.key) || this.config.id || '(machine)';\n this.machine = this.parent ? this.parent.machine : this;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.delimiter = this.config.delimiter || (this.parent ? this.parent.delimiter : STATE_DELIMITER);\n this.id = this.config.id || __spreadArray([this.machine.key], __read(this.path), false).join(this.delimiter);\n this.version = this.parent ? this.parent.version : this.config.version;\n this.type = this.config.type || (this.config.parallel ? 'parallel' : this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n this.schema = this.parent ? this.machine.schema : (_a = this.config.schema) !== null && _a !== void 0 ? _a : {};\n this.description = this.config.description;\n\n if (!IS_PRODUCTION) {\n warn(!('parallel' in this.config), \"The \\\"parallel\\\" property is deprecated and will be removed in version 4.1. \".concat(this.config.parallel ? \"Replace with `type: 'parallel'`\" : \"Use `type: '\".concat(this.type, \"'`\"), \" in the config for state node '\").concat(this.id, \"' instead.\"));\n }\n\n this.initial = this.config.initial;\n this.states = this.config.states ? mapValues(this.config.states, function (stateConfig, key) {\n var _a;\n\n var stateNode = new StateNode(stateConfig, {}, undefined, {\n parent: _this,\n key: key\n });\n Object.assign(_this.idMap, __assign((_a = {}, _a[stateNode.id] = stateNode, _a), stateNode.idMap));\n return stateNode;\n }) : EMPTY_OBJECT; // Document order\n\n var order = 0;\n\n function dfs(stateNode) {\n var e_1, _a;\n\n stateNode.order = order++;\n\n try {\n for (var _b = __values(getChildren(stateNode)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n dfs(child);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n\n dfs(this); // History config\n\n this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n this._transient = !!this.config.always || (!this.config.on ? false : Array.isArray(this.config.on) ? this.config.on.some(function (_a) {\n var event = _a.event;\n return event === NULL_EVENT;\n }) : NULL_EVENT in this.config.on);\n this.strict = !!this.config.strict; // TODO: deprecate (entry)\n\n this.onEntry = toArray(this.config.entry || this.config.onEntry).map(function (action) {\n return toActionObject(action);\n }); // TODO: deprecate (exit)\n\n this.onExit = toArray(this.config.exit || this.config.onExit).map(function (action) {\n return toActionObject(action);\n });\n this.meta = this.config.meta;\n this.doneData = this.type === 'final' ? this.config.data : undefined;\n this.invoke = toArray(this.config.invoke).map(function (invokeConfig, i) {\n var _a, _b;\n\n if (isMachine(invokeConfig)) {\n var invokeId = createInvokeId(_this.id, i);\n _this.machine.options.services = __assign((_a = {}, _a[invokeId] = invokeConfig, _a), _this.machine.options.services);\n return toInvokeDefinition({\n src: invokeId,\n id: invokeId\n });\n } else if (isString(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n return toInvokeDefinition(__assign(__assign({}, invokeConfig), {\n id: invokeId,\n src: invokeConfig.src\n }));\n } else if (isMachine(invokeConfig.src) || isFunction(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n _this.machine.options.services = __assign((_b = {}, _b[invokeId] = invokeConfig.src, _b), _this.machine.options.services);\n return toInvokeDefinition(__assign(__assign({\n id: invokeId\n }, invokeConfig), {\n src: invokeId\n }));\n } else {\n var invokeSource = invokeConfig.src;\n return toInvokeDefinition(__assign(__assign({\n id: createInvokeId(_this.id, i)\n }, invokeConfig), {\n src: invokeSource\n }));\n }\n });\n this.activities = toArray(this.config.activities).concat(this.invoke).map(function (activity) {\n return toActivityDefinition(activity);\n });\n this.transition = this.transition.bind(this);\n this.tags = toArray(this.config.tags); // TODO: this is the real fix for initialization once\n // state node getters are deprecated\n // if (!this.parent) {\n // this._init();\n // }\n }\n\n StateNode.prototype._init = function () {\n if (this.__cache.transitions) {\n return;\n }\n\n getAllStateNodes(this).forEach(function (stateNode) {\n return stateNode.on;\n });\n };\n /**\r\n * Clones this state machine with custom options and context.\r\n *\r\n * @param options Options (actions, guards, activities, services) to recursively merge with the existing options.\r\n * @param context Custom context (will override predefined context)\r\n */\n\n\n StateNode.prototype.withConfig = function (options, context) {\n var _a = this.options,\n actions = _a.actions,\n activities = _a.activities,\n guards = _a.guards,\n services = _a.services,\n delays = _a.delays;\n return new StateNode(this.config, {\n actions: __assign(__assign({}, actions), options.actions),\n activities: __assign(__assign({}, activities), options.activities),\n guards: __assign(__assign({}, guards), options.guards),\n services: __assign(__assign({}, services), options.services),\n delays: __assign(__assign({}, delays), options.delays)\n }, context !== null && context !== void 0 ? context : this.context);\n };\n /**\r\n * Clones this state machine with custom context.\r\n *\r\n * @param context Custom context (will override predefined context, not recursive)\r\n */\n\n\n StateNode.prototype.withContext = function (context) {\n return new StateNode(this.config, this.options, context);\n };\n\n Object.defineProperty(StateNode.prototype, \"context\", {\n get: function () {\n return isFunction(this._context) ? this._context() : this._context;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"definition\", {\n /**\r\n * The well-structured state node definition.\r\n */\n get: function () {\n return {\n id: this.id,\n key: this.key,\n version: this.version,\n context: this.context,\n type: this.type,\n initial: this.initial,\n history: this.history,\n states: mapValues(this.states, function (state) {\n return state.definition;\n }),\n on: this.on,\n transitions: this.transitions,\n entry: this.onEntry,\n exit: this.onExit,\n activities: this.activities || [],\n meta: this.meta,\n order: this.order || -1,\n data: this.doneData,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.toJSON = function () {\n return this.definition;\n };\n\n Object.defineProperty(StateNode.prototype, \"on\", {\n /**\r\n * The mapping of events to transitions.\r\n */\n get: function () {\n if (this.__cache.on) {\n return this.__cache.on;\n }\n\n var transitions = this.transitions;\n return this.__cache.on = transitions.reduce(function (map, transition) {\n map[transition.eventType] = map[transition.eventType] || [];\n map[transition.eventType].push(transition);\n return map;\n }, {});\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"after\", {\n get: function () {\n return this.__cache.delayedTransitions || (this.__cache.delayedTransitions = this.getDelayedTransitions(), this.__cache.delayedTransitions);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"transitions\", {\n /**\r\n * All the transitions that can be taken from this state node.\r\n */\n get: function () {\n return this.__cache.transitions || (this.__cache.transitions = this.formatTransitions(), this.__cache.transitions);\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.getCandidates = function (eventName) {\n if (this.__cache.candidates[eventName]) {\n return this.__cache.candidates[eventName];\n }\n\n var transient = eventName === NULL_EVENT;\n var candidates = this.transitions.filter(function (transition) {\n var sameEventType = transition.eventType === eventName; // null events should only match against eventless transitions\n\n return transient ? sameEventType : sameEventType || transition.eventType === WILDCARD;\n });\n this.__cache.candidates[eventName] = candidates;\n return candidates;\n };\n /**\r\n * All delayed transitions from the config.\r\n */\n\n\n StateNode.prototype.getDelayedTransitions = function () {\n var _this = this;\n\n var afterConfig = this.config.after;\n\n if (!afterConfig) {\n return [];\n }\n\n var mutateEntryExit = function (delay, i) {\n var delayRef = isFunction(delay) ? \"\".concat(_this.id, \":delay[\").concat(i, \"]\") : delay;\n var eventType = after(delayRef, _this.id);\n\n _this.onEntry.push(send$1(eventType, {\n delay: delay\n }));\n\n _this.onExit.push(cancel(eventType));\n\n return eventType;\n };\n\n var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {\n var eventType = mutateEntryExit(transition.delay, i);\n return __assign(__assign({}, transition), {\n event: eventType\n });\n }) : flatten(Object.keys(afterConfig).map(function (delay, i) {\n var configTransition = afterConfig[delay];\n var resolvedTransition = isString(configTransition) ? {\n target: configTransition\n } : configTransition;\n var resolvedDelay = !isNaN(+delay) ? +delay : delay;\n var eventType = mutateEntryExit(resolvedDelay, i);\n return toArray(resolvedTransition).map(function (transition) {\n return __assign(__assign({}, transition), {\n event: eventType,\n delay: resolvedDelay\n });\n });\n }));\n return delayedTransitions.map(function (delayedTransition) {\n var delay = delayedTransition.delay;\n return __assign(__assign({}, _this.formatTransition(delayedTransition)), {\n delay: delay\n });\n });\n };\n /**\r\n * Returns the state nodes represented by the current state value.\r\n *\r\n * @param state The state value or State instance\r\n */\n\n\n StateNode.prototype.getStateNodes = function (state) {\n var _a;\n\n var _this = this;\n\n if (!state) {\n return [];\n }\n\n var stateValue = state instanceof State ? state.value : toStateValue(state, this.delimiter);\n\n if (isString(stateValue)) {\n var initialStateValue = this.getStateNode(stateValue).initial;\n return initialStateValue !== undefined ? this.getStateNodes((_a = {}, _a[stateValue] = initialStateValue, _a)) : [this, this.states[stateValue]];\n }\n\n var subStateKeys = Object.keys(stateValue);\n var subStateNodes = [this];\n subStateNodes.push.apply(subStateNodes, __spreadArray([], __read(flatten(subStateKeys.map(function (subStateKey) {\n return _this.getStateNode(subStateKey).getStateNodes(stateValue[subStateKey]);\n }))), false));\n return subStateNodes;\n };\n /**\r\n * Returns `true` if this state node explicitly handles the given event.\r\n *\r\n * @param event The event in question\r\n */\n\n\n StateNode.prototype.handles = function (event) {\n var eventType = getEventType(event);\n return this.events.includes(eventType);\n };\n /**\r\n * Resolves the given `state` to a new `State` instance relative to this machine.\r\n *\r\n * This ensures that `.events` and `.nextEvents` represent the correct values.\r\n *\r\n * @param state The state to resolve\r\n */\n\n\n StateNode.prototype.resolveState = function (state) {\n var stateFromConfig = state instanceof State ? state : State.create(state);\n var configuration = Array.from(getConfiguration([], this.getStateNodes(stateFromConfig.value)));\n return new State(__assign(__assign({}, stateFromConfig), {\n value: this.resolve(stateFromConfig.value),\n configuration: configuration,\n done: isInFinalState(configuration, this),\n tags: getTagsFromConfiguration(configuration),\n machine: this.machine\n }));\n };\n\n StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {\n var stateNode = this.getStateNode(stateValue);\n var next = stateNode.next(state, _event);\n\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n\n return next;\n };\n\n StateNode.prototype.transitionCompoundNode = function (stateValue, state, _event) {\n var subStateKeys = Object.keys(stateValue);\n var stateNode = this.getStateNode(subStateKeys[0]);\n\n var next = stateNode._transition(stateValue[subStateKeys[0]], state, _event);\n\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n\n return next;\n };\n\n StateNode.prototype.transitionParallelNode = function (stateValue, state, _event) {\n var e_2, _a;\n\n var transitionMap = {};\n\n try {\n for (var _b = __values(Object.keys(stateValue)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var subStateKey = _c.value;\n var subStateValue = stateValue[subStateKey];\n\n if (!subStateValue) {\n continue;\n }\n\n var subStateNode = this.getStateNode(subStateKey);\n\n var next = subStateNode._transition(subStateValue, state, _event);\n\n if (next) {\n transitionMap[subStateKey] = next;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n var stateTransitions = Object.keys(transitionMap).map(function (key) {\n return transitionMap[key];\n });\n var enabledTransitions = flatten(stateTransitions.map(function (st) {\n return st.transitions;\n }));\n var willTransition = stateTransitions.some(function (st) {\n return st.transitions.length > 0;\n });\n\n if (!willTransition) {\n return this.next(state, _event);\n }\n\n var entryNodes = flatten(stateTransitions.map(function (t) {\n return t.entrySet;\n }));\n var configuration = flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].configuration;\n }));\n return {\n transitions: enabledTransitions,\n entrySet: entryNodes,\n exitSet: flatten(stateTransitions.map(function (t) {\n return t.exitSet;\n })),\n configuration: configuration,\n source: state,\n actions: flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].actions;\n }))\n };\n };\n\n StateNode.prototype._transition = function (stateValue, state, _event) {\n // leaf node\n if (isString(stateValue)) {\n return this.transitionLeafNode(stateValue, state, _event);\n } // hierarchical node\n\n\n if (Object.keys(stateValue).length === 1) {\n return this.transitionCompoundNode(stateValue, state, _event);\n } // orthogonal node\n\n\n return this.transitionParallelNode(stateValue, state, _event);\n };\n\n StateNode.prototype.getTransitionData = function (state, event) {\n return this._transition(state.value, state, toSCXMLEvent(event));\n };\n\n StateNode.prototype.next = function (state, _event) {\n var e_3, _a;\n\n var _this = this;\n\n var eventName = _event.name;\n var actions = [];\n var nextStateNodes = [];\n var selectedTransition;\n\n try {\n for (var _b = __values(this.getCandidates(eventName)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var candidate = _c.value;\n var cond = candidate.cond,\n stateIn = candidate.in;\n var resolvedContext = state.context;\n var isInState = stateIn ? isString(stateIn) && isStateId(stateIn) ? // Check if in state by ID\n state.matches(toStateValue(this.getStateNodeById(stateIn).path, this.delimiter)) : // Check if in state by relative grandparent\n matchesState(toStateValue(stateIn, this.delimiter), path(this.path.slice(0, -2))(state.value)) : true;\n var guardPassed = false;\n\n try {\n guardPassed = !cond || evaluateGuard(this.machine, cond, resolvedContext, _event, state);\n } catch (err) {\n throw new Error(\"Unable to evaluate guard '\".concat(cond.name || cond.type, \"' in transition for event '\").concat(eventName, \"' in state node '\").concat(this.id, \"':\\n\").concat(err.message));\n }\n\n if (guardPassed && isInState) {\n if (candidate.target !== undefined) {\n nextStateNodes = candidate.target;\n }\n\n actions.push.apply(actions, __spreadArray([], __read(candidate.actions), false));\n selectedTransition = candidate;\n break;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n if (!selectedTransition) {\n return undefined;\n }\n\n if (!nextStateNodes.length) {\n return {\n transitions: [selectedTransition],\n entrySet: [],\n exitSet: [],\n configuration: state.value ? [this] : [],\n source: state,\n actions: actions\n };\n }\n\n var allNextStateNodes = flatten(nextStateNodes.map(function (stateNode) {\n return _this.getRelativeStateNodes(stateNode, state.historyValue);\n }));\n var isInternal = !!selectedTransition.internal;\n var reentryNodes = isInternal ? [] : flatten(allNextStateNodes.map(function (n) {\n return _this.nodesFromChild(n);\n }));\n return {\n transitions: [selectedTransition],\n entrySet: reentryNodes,\n exitSet: isInternal ? [] : [this],\n configuration: allNextStateNodes,\n source: state,\n actions: actions\n };\n };\n\n StateNode.prototype.nodesFromChild = function (childStateNode) {\n if (childStateNode.escapes(this)) {\n return [];\n }\n\n var nodes = [];\n var marker = childStateNode;\n\n while (marker && marker !== this) {\n nodes.push(marker);\n marker = marker.parent;\n }\n\n nodes.push(this); // inclusive\n\n return nodes;\n };\n /**\r\n * Whether the given state node \"escapes\" this state node. If the `stateNode` is equal to or the parent of\r\n * this state node, it does not escape.\r\n */\n\n\n StateNode.prototype.escapes = function (stateNode) {\n if (this === stateNode) {\n return false;\n }\n\n var parent = this.parent;\n\n while (parent) {\n if (parent === stateNode) {\n return false;\n }\n\n parent = parent.parent;\n }\n\n return true;\n };\n\n StateNode.prototype.getActions = function (transition, currentContext, _event, prevState) {\n var e_4, _a, e_5, _b;\n\n var prevConfig = getConfiguration([], prevState ? this.getStateNodes(prevState.value) : [this]);\n var resolvedConfig = transition.configuration.length ? getConfiguration(prevConfig, transition.configuration) : prevConfig;\n\n try {\n for (var resolvedConfig_1 = __values(resolvedConfig), resolvedConfig_1_1 = resolvedConfig_1.next(); !resolvedConfig_1_1.done; resolvedConfig_1_1 = resolvedConfig_1.next()) {\n var sn = resolvedConfig_1_1.value;\n\n if (!has(prevConfig, sn)) {\n transition.entrySet.push(sn);\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (resolvedConfig_1_1 && !resolvedConfig_1_1.done && (_a = resolvedConfig_1.return)) _a.call(resolvedConfig_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n try {\n for (var prevConfig_1 = __values(prevConfig), prevConfig_1_1 = prevConfig_1.next(); !prevConfig_1_1.done; prevConfig_1_1 = prevConfig_1.next()) {\n var sn = prevConfig_1_1.value;\n\n if (!has(resolvedConfig, sn) || has(transition.exitSet, sn.parent)) {\n transition.exitSet.push(sn);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (prevConfig_1_1 && !prevConfig_1_1.done && (_b = prevConfig_1.return)) _b.call(prevConfig_1);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n var doneEvents = flatten(transition.entrySet.map(function (sn) {\n var events = [];\n\n if (sn.type !== 'final') {\n return events;\n }\n\n var parent = sn.parent;\n\n if (!parent.parent) {\n return events;\n }\n\n events.push(done(sn.id, sn.doneData), // TODO: deprecate - final states should not emit done events for their own state.\n done(parent.id, sn.doneData ? mapContext(sn.doneData, currentContext, _event) : undefined));\n var grandparent = parent.parent;\n\n if (grandparent.type === 'parallel') {\n if (getChildren(grandparent).every(function (parentNode) {\n return isInFinalState(transition.configuration, parentNode);\n })) {\n events.push(done(grandparent.id));\n }\n }\n\n return events;\n }));\n transition.exitSet.sort(function (a, b) {\n return b.order - a.order;\n });\n transition.entrySet.sort(function (a, b) {\n return a.order - b.order;\n });\n var entryStates = new Set(transition.entrySet);\n var exitStates = new Set(transition.exitSet);\n\n var _c = __read([flatten(Array.from(entryStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.activities.map(function (activity) {\n return start(activity);\n })), false), __read(stateNode.onEntry), false);\n })).concat(doneEvents.map(raise)), flatten(Array.from(exitStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.onExit), false), __read(stateNode.activities.map(function (activity) {\n return stop(activity);\n })), false);\n }))], 2),\n entryActions = _c[0],\n exitActions = _c[1];\n\n var actions = toActionObjects(exitActions.concat(transition.actions).concat(entryActions), this.machine.options.actions);\n return actions;\n };\n /**\r\n * Determines the next state given the current `state` and sent `event`.\r\n *\r\n * @param state The current State instance or state value\r\n * @param event The event that was sent at the current state\r\n * @param context The current context (extended state) of the current state\r\n */\n\n\n StateNode.prototype.transition = function (state, event, context) {\n if (state === void 0) {\n state = this.initialState;\n }\n\n var _event = toSCXMLEvent(event);\n\n var currentState;\n\n if (state instanceof State) {\n currentState = context === undefined ? state : this.resolveState(State.from(state, context));\n } else {\n var resolvedStateValue = isString(state) ? this.resolve(pathToStateValue(this.getResolvedPath(state))) : this.resolve(state);\n var resolvedContext = context !== null && context !== void 0 ? context : this.machine.context;\n currentState = this.resolveState(State.from(resolvedStateValue, resolvedContext));\n }\n\n if (!IS_PRODUCTION && _event.name === WILDCARD) {\n throw new Error(\"An event cannot have the wildcard type ('\".concat(WILDCARD, \"')\"));\n }\n\n if (this.strict) {\n if (!this.events.includes(_event.name) && !isBuiltInEvent(_event.name)) {\n throw new Error(\"Machine '\".concat(this.id, \"' does not accept event '\").concat(_event.name, \"'\"));\n }\n }\n\n var stateTransition = this._transition(currentState.value, currentState, _event) || {\n transitions: [],\n configuration: [],\n entrySet: [],\n exitSet: [],\n source: currentState,\n actions: []\n };\n var prevConfig = getConfiguration([], this.getStateNodes(currentState.value));\n var resolvedConfig = stateTransition.configuration.length ? getConfiguration(prevConfig, stateTransition.configuration) : prevConfig;\n stateTransition.configuration = __spreadArray([], __read(resolvedConfig), false);\n return this.resolveTransition(stateTransition, currentState, currentState.context, _event);\n };\n\n StateNode.prototype.resolveRaisedTransition = function (state, _event, originalEvent) {\n var _a;\n\n var currentActions = state.actions;\n state = this.transition(state, _event); // Save original event to state\n // TODO: this should be the raised event! Delete in V5 (breaking)\n\n state._event = originalEvent;\n state.event = originalEvent.data;\n\n (_a = state.actions).unshift.apply(_a, __spreadArray([], __read(currentActions), false));\n\n return state;\n };\n\n StateNode.prototype.resolveTransition = function (stateTransition, currentState, context, _event) {\n var e_6, _a;\n\n var _this = this;\n\n if (_event === void 0) {\n _event = initEvent;\n }\n\n var configuration = stateTransition.configuration; // Transition will \"apply\" if:\n // - this is the initial state (there is no current state)\n // - OR there are transitions\n\n var willTransition = !currentState || stateTransition.transitions.length > 0;\n var resolvedStateValue = willTransition ? getValue(this.machine, configuration) : undefined;\n var historyValue = currentState ? currentState.historyValue ? currentState.historyValue : stateTransition.source ? this.machine.historyValue(currentState.value) : undefined : undefined;\n var actions = this.getActions(stateTransition, context, _event, currentState);\n var activities = currentState ? __assign({}, currentState.activities) : {};\n\n try {\n for (var actions_1 = __values(actions), actions_1_1 = actions_1.next(); !actions_1_1.done; actions_1_1 = actions_1.next()) {\n var action = actions_1_1.value;\n\n if (action.type === start$1) {\n activities[action.activity.id || action.activity.type] = action;\n } else if (action.type === stop$1) {\n activities[action.activity.id || action.activity.type] = false;\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (actions_1_1 && !actions_1_1.done && (_a = actions_1.return)) _a.call(actions_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n var _b = __read(resolveActions(this, currentState, context, _event, actions, this.machine.config.preserveActionOrder), 2),\n resolvedActions = _b[0],\n updatedContext = _b[1];\n\n var _c = __read(partition(resolvedActions, function (action) {\n return action.type === raise$1 || action.type === send && action.to === SpecialTargets.Internal;\n }), 2),\n raisedEvents = _c[0],\n nonRaisedActions = _c[1];\n\n var invokeActions = resolvedActions.filter(function (action) {\n var _a;\n\n return action.type === start$1 && ((_a = action.activity) === null || _a === void 0 ? void 0 : _a.type) === invoke;\n });\n var children = invokeActions.reduce(function (acc, action) {\n acc[action.activity.id] = createInvocableActor(action.activity, _this.machine, updatedContext, _event);\n return acc;\n }, currentState ? __assign({}, currentState.children) : {});\n var resolvedConfiguration = willTransition ? stateTransition.configuration : currentState ? currentState.configuration : [];\n var isDone = isInFinalState(resolvedConfiguration, this);\n var nextState = new State({\n value: resolvedStateValue || currentState.value,\n context: updatedContext,\n _event: _event,\n // Persist _sessionid between states\n _sessionid: currentState ? currentState._sessionid : null,\n historyValue: resolvedStateValue ? historyValue ? updateHistoryValue(historyValue, resolvedStateValue) : undefined : currentState ? currentState.historyValue : undefined,\n history: !resolvedStateValue || stateTransition.source ? currentState : undefined,\n actions: resolvedStateValue ? nonRaisedActions : [],\n activities: resolvedStateValue ? activities : currentState ? currentState.activities : {},\n events: [],\n configuration: resolvedConfiguration,\n transitions: stateTransition.transitions,\n children: children,\n done: isDone,\n tags: currentState === null || currentState === void 0 ? void 0 : currentState.tags,\n machine: this\n });\n var didUpdateContext = context !== updatedContext;\n nextState.changed = _event.name === update || didUpdateContext; // Dispose of penultimate histories to prevent memory leaks\n\n var history = nextState.history;\n\n if (history) {\n delete history.history;\n } // There are transient transitions if the machine is not in a final state\n // and if some of the state nodes have transient (\"always\") transitions.\n\n\n var isTransient = !isDone && (this._transient || configuration.some(function (stateNode) {\n return stateNode._transient;\n })); // If there are no enabled transitions, check if there are transient transitions.\n // If there are transient transitions, continue checking for more transitions\n // because an transient transition should be triggered even if there are no\n // enabled transitions.\n //\n // If we're already working on an transient transition (by checking\n // if the event is a NULL_EVENT), then stop to prevent an infinite loop.\n //\n // Otherwise, if there are no enabled nor transient transitions, we are done.\n\n if (!willTransition && (!isTransient || _event.name === NULL_EVENT)) {\n return nextState;\n }\n\n var maybeNextState = nextState;\n\n if (!isDone) {\n if (isTransient) {\n maybeNextState = this.resolveRaisedTransition(maybeNextState, {\n type: nullEvent\n }, _event);\n }\n\n while (raisedEvents.length) {\n var raisedEvent = raisedEvents.shift();\n maybeNextState = this.resolveRaisedTransition(maybeNextState, raisedEvent._event, _event);\n }\n } // Detect if state changed\n\n\n var changed = maybeNextState.changed || (history ? !!maybeNextState.actions.length || didUpdateContext || typeof history.value !== typeof maybeNextState.value || !stateValuesEqual(maybeNextState.value, history.value) : undefined);\n maybeNextState.changed = changed; // Preserve original history after raised events\n\n maybeNextState.history = history;\n maybeNextState.tags = getTagsFromConfiguration(maybeNextState.configuration);\n return maybeNextState;\n };\n /**\r\n * Returns the child state node from its relative `stateKey`, or throws.\r\n */\n\n\n StateNode.prototype.getStateNode = function (stateKey) {\n if (isStateId(stateKey)) {\n return this.machine.getStateNodeById(stateKey);\n }\n\n if (!this.states) {\n throw new Error(\"Unable to retrieve child state '\".concat(stateKey, \"' from '\").concat(this.id, \"'; no child states exist.\"));\n }\n\n var result = this.states[stateKey];\n\n if (!result) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n\n return result;\n };\n /**\r\n * Returns the state node with the given `stateId`, or throws.\r\n *\r\n * @param stateId The state ID. The prefix \"#\" is removed.\r\n */\n\n\n StateNode.prototype.getStateNodeById = function (stateId) {\n var resolvedStateId = isStateId(stateId) ? stateId.slice(STATE_IDENTIFIER.length) : stateId;\n\n if (resolvedStateId === this.id) {\n return this;\n }\n\n var stateNode = this.machine.idMap[resolvedStateId];\n\n if (!stateNode) {\n throw new Error(\"Child state node '#\".concat(resolvedStateId, \"' does not exist on machine '\").concat(this.id, \"'\"));\n }\n\n return stateNode;\n };\n /**\r\n * Returns the relative state node from the given `statePath`, or throws.\r\n *\r\n * @param statePath The string or string array relative path to the state node.\r\n */\n\n\n StateNode.prototype.getStateNodeByPath = function (statePath) {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return this.getStateNodeById(statePath.slice(1));\n } catch (e) {// try individual paths\n // throw e;\n }\n }\n\n var arrayStatePath = toStatePath(statePath, this.delimiter).slice();\n var currentStateNode = this;\n\n while (arrayStatePath.length) {\n var key = arrayStatePath.shift();\n\n if (!key.length) {\n break;\n }\n\n currentStateNode = currentStateNode.getStateNode(key);\n }\n\n return currentStateNode;\n };\n /**\r\n * Resolves a partial state value with its full representation in this machine.\r\n *\r\n * @param stateValue The partial state value to resolve.\r\n */\n\n\n StateNode.prototype.resolve = function (stateValue) {\n var _a;\n\n var _this = this;\n\n if (!stateValue) {\n return this.initialStateValue || EMPTY_OBJECT; // TODO: type-specific properties\n }\n\n switch (this.type) {\n case 'parallel':\n return mapValues(this.initialStateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(stateValue[subStateKey] || subStateValue) : EMPTY_OBJECT;\n });\n\n case 'compound':\n if (isString(stateValue)) {\n var subStateNode = this.getStateNode(stateValue);\n\n if (subStateNode.type === 'parallel' || subStateNode.type === 'compound') {\n return _a = {}, _a[stateValue] = subStateNode.initialStateValue, _a;\n }\n\n return stateValue;\n }\n\n if (!Object.keys(stateValue).length) {\n return this.initialStateValue || {};\n }\n\n return mapValues(stateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(subStateValue) : EMPTY_OBJECT;\n });\n\n default:\n return stateValue || EMPTY_OBJECT;\n }\n };\n\n StateNode.prototype.getResolvedPath = function (stateIdentifier) {\n if (isStateId(stateIdentifier)) {\n var stateNode = this.machine.idMap[stateIdentifier.slice(STATE_IDENTIFIER.length)];\n\n if (!stateNode) {\n throw new Error(\"Unable to find state node '\".concat(stateIdentifier, \"'\"));\n }\n\n return stateNode.path;\n }\n\n return toStatePath(stateIdentifier, this.delimiter);\n };\n\n Object.defineProperty(StateNode.prototype, \"initialStateValue\", {\n get: function () {\n var _a;\n\n if (this.__cache.initialStateValue) {\n return this.__cache.initialStateValue;\n }\n\n var initialStateValue;\n\n if (this.type === 'parallel') {\n initialStateValue = mapFilterValues(this.states, function (state) {\n return state.initialStateValue || EMPTY_OBJECT;\n }, function (stateNode) {\n return !(stateNode.type === 'history');\n });\n } else if (this.initial !== undefined) {\n if (!this.states[this.initial]) {\n throw new Error(\"Initial state '\".concat(this.initial, \"' not found on '\").concat(this.key, \"'\"));\n }\n\n initialStateValue = isLeafNode(this.states[this.initial]) ? this.initial : (_a = {}, _a[this.initial] = this.states[this.initial].initialStateValue, _a);\n } else {\n // The finite state value of a machine without child states is just an empty object\n initialStateValue = {};\n }\n\n this.__cache.initialStateValue = initialStateValue;\n return this.__cache.initialStateValue;\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.getInitialState = function (stateValue, context) {\n this._init(); // TODO: this should be in the constructor (see note in constructor)\n\n\n var configuration = this.getStateNodes(stateValue);\n return this.resolveTransition({\n configuration: configuration,\n entrySet: configuration,\n exitSet: [],\n transitions: [],\n source: undefined,\n actions: []\n }, undefined, context !== null && context !== void 0 ? context : this.machine.context, undefined);\n };\n\n Object.defineProperty(StateNode.prototype, \"initialState\", {\n /**\r\n * The initial State instance, which includes all actions to be executed from\r\n * entering the initial state.\r\n */\n get: function () {\n var initialStateValue = this.initialStateValue;\n\n if (!initialStateValue) {\n throw new Error(\"Cannot retrieve initial state from simple state '\".concat(this.id, \"'.\"));\n }\n\n return this.getInitialState(initialStateValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"target\", {\n /**\r\n * The target state value of the history state node, if it exists. This represents the\r\n * default state value to transition to if no history value exists yet.\r\n */\n get: function () {\n var target;\n\n if (this.type === 'history') {\n var historyConfig = this.config;\n\n if (isString(historyConfig.target)) {\n target = isStateId(historyConfig.target) ? pathToStateValue(this.machine.getStateNodeById(historyConfig.target).path.slice(this.path.length - 1)) : historyConfig.target;\n } else {\n target = historyConfig.target;\n }\n }\n\n return target;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Returns the leaf nodes from a state path relative to this state node.\r\n *\r\n * @param relativeStateId The relative state path to retrieve the state nodes\r\n * @param history The previous state to retrieve history\r\n * @param resolve Whether state nodes should resolve to initial child state nodes\r\n */\n\n StateNode.prototype.getRelativeStateNodes = function (relativeStateId, historyValue, resolve) {\n if (resolve === void 0) {\n resolve = true;\n }\n\n return resolve ? relativeStateId.type === 'history' ? relativeStateId.resolveHistory(historyValue) : relativeStateId.initialStateNodes : [relativeStateId];\n };\n\n Object.defineProperty(StateNode.prototype, \"initialStateNodes\", {\n get: function () {\n var _this = this;\n\n if (isLeafNode(this)) {\n return [this];\n } // Case when state node is compound but no initial state is defined\n\n\n if (this.type === 'compound' && !this.initial) {\n if (!IS_PRODUCTION) {\n warn(false, \"Compound state node '\".concat(this.id, \"' has no initial state.\"));\n }\n\n return [this];\n }\n\n var initialStateNodePaths = toStatePaths(this.initialStateValue);\n return flatten(initialStateNodePaths.map(function (initialPath) {\n return _this.getFromRelativePath(initialPath);\n }));\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Retrieves state nodes from a relative path to this state node.\r\n *\r\n * @param relativePath The relative path from this state node\r\n * @param historyValue\r\n */\n\n StateNode.prototype.getFromRelativePath = function (relativePath) {\n if (!relativePath.length) {\n return [this];\n }\n\n var _a = __read(relativePath),\n stateKey = _a[0],\n childStatePath = _a.slice(1);\n\n if (!this.states) {\n throw new Error(\"Cannot retrieve subPath '\".concat(stateKey, \"' from node with no states\"));\n }\n\n var childStateNode = this.getStateNode(stateKey);\n\n if (childStateNode.type === 'history') {\n return childStateNode.resolveHistory();\n }\n\n if (!this.states[stateKey]) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n\n return this.states[stateKey].getFromRelativePath(childStatePath);\n };\n\n StateNode.prototype.historyValue = function (relativeStateValue) {\n if (!Object.keys(this.states).length) {\n return undefined;\n }\n\n return {\n current: relativeStateValue || this.initialStateValue,\n states: mapFilterValues(this.states, function (stateNode, key) {\n if (!relativeStateValue) {\n return stateNode.historyValue();\n }\n\n var subStateValue = isString(relativeStateValue) ? undefined : relativeStateValue[key];\n return stateNode.historyValue(subStateValue || stateNode.initialStateValue);\n }, function (stateNode) {\n return !stateNode.history;\n })\n };\n };\n /**\r\n * Resolves to the historical value(s) of the parent state node,\r\n * represented by state nodes.\r\n *\r\n * @param historyValue\r\n */\n\n\n StateNode.prototype.resolveHistory = function (historyValue) {\n var _this = this;\n\n if (this.type !== 'history') {\n return [this];\n }\n\n var parent = this.parent;\n\n if (!historyValue) {\n var historyTarget = this.target;\n return historyTarget ? flatten(toStatePaths(historyTarget).map(function (relativeChildPath) {\n return parent.getFromRelativePath(relativeChildPath);\n })) : parent.initialStateNodes;\n }\n\n var subHistoryValue = nestedPath(parent.path, 'states')(historyValue).current;\n\n if (isString(subHistoryValue)) {\n return [parent.getStateNode(subHistoryValue)];\n }\n\n return flatten(toStatePaths(subHistoryValue).map(function (subStatePath) {\n return _this.history === 'deep' ? parent.getFromRelativePath(subStatePath) : [parent.states[subStatePath[0]]];\n }));\n };\n\n Object.defineProperty(StateNode.prototype, \"stateIds\", {\n /**\r\n * All the state node IDs of this state node and its descendant state nodes.\r\n */\n get: function () {\n var _this = this;\n\n var childStateIds = flatten(Object.keys(this.states).map(function (stateKey) {\n return _this.states[stateKey].stateIds;\n }));\n return [this.id].concat(childStateIds);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"events\", {\n /**\r\n * All the event types accepted by this state node and its descendants.\r\n */\n get: function () {\n var e_7, _a, e_8, _b;\n\n if (this.__cache.events) {\n return this.__cache.events;\n }\n\n var states = this.states;\n var events = new Set(this.ownEvents);\n\n if (states) {\n try {\n for (var _c = __values(Object.keys(states)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var stateId = _d.value;\n var state = states[stateId];\n\n if (state.states) {\n try {\n for (var _e = (e_8 = void 0, __values(state.events)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var event_1 = _f.value;\n events.add(\"\".concat(event_1));\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n }\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n\n return this.__cache.events = Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"ownEvents\", {\n /**\r\n * All the events that have transitions directly from this state node.\r\n *\r\n * Excludes any inert events.\r\n */\n get: function () {\n var events = new Set(this.transitions.filter(function (transition) {\n return !(!transition.target && !transition.actions.length && transition.internal);\n }).map(function (transition) {\n return transition.eventType;\n }));\n return Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.resolveTarget = function (_target) {\n var _this = this;\n\n if (_target === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n\n return _target.map(function (target) {\n if (!isString(target)) {\n return target;\n }\n\n var isInternalTarget = target[0] === _this.delimiter; // If internal target is defined on machine,\n // do not include machine key on target\n\n if (isInternalTarget && !_this.parent) {\n return _this.getStateNodeByPath(target.slice(1));\n }\n\n var resolvedTarget = isInternalTarget ? _this.key + target : target;\n\n if (_this.parent) {\n try {\n var targetStateNode = _this.parent.getStateNodeByPath(resolvedTarget);\n\n return targetStateNode;\n } catch (err) {\n throw new Error(\"Invalid transition definition for state node '\".concat(_this.id, \"':\\n\").concat(err.message));\n }\n } else {\n return _this.getStateNodeByPath(resolvedTarget);\n }\n });\n };\n\n StateNode.prototype.formatTransition = function (transitionConfig) {\n var _this = this;\n\n var normalizedTarget = normalizeTarget(transitionConfig.target);\n var internal = 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {\n return isString(_target) && _target[0] === _this.delimiter;\n }) : true;\n var guards = this.machine.options.guards;\n var target = this.resolveTarget(normalizedTarget);\n\n var transition = __assign(__assign({}, transitionConfig), {\n actions: toActionObjects(toArray(transitionConfig.actions)),\n cond: toGuard(transitionConfig.cond, guards),\n target: target,\n source: this,\n internal: internal,\n eventType: transitionConfig.event,\n toJSON: function () {\n return __assign(__assign({}, transition), {\n target: transition.target ? transition.target.map(function (t) {\n return \"#\".concat(t.id);\n }) : undefined,\n source: \"#\".concat(_this.id)\n });\n }\n });\n\n return transition;\n };\n\n StateNode.prototype.formatTransitions = function () {\n var e_9, _a;\n\n var _this = this;\n\n var onConfig;\n\n if (!this.config.on) {\n onConfig = [];\n } else if (Array.isArray(this.config.on)) {\n onConfig = this.config.on;\n } else {\n var _b = this.config.on,\n _c = WILDCARD,\n _d = _b[_c],\n wildcardConfigs = _d === void 0 ? [] : _d,\n strictTransitionConfigs_1 = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n\n onConfig = flatten(Object.keys(strictTransitionConfigs_1).map(function (key) {\n if (!IS_PRODUCTION && key === NULL_EVENT) {\n warn(false, \"Empty string transition configs (e.g., `{ on: { '': ... }}`) for transient transitions are deprecated. Specify the transition in the `{ always: ... }` property instead. \" + \"Please check the `on` configuration for \\\"#\".concat(_this.id, \"\\\".\"));\n }\n\n var transitionConfigArray = toTransitionConfigArray(key, strictTransitionConfigs_1[key]);\n\n if (!IS_PRODUCTION) {\n validateArrayifiedTransitions(_this, key, transitionConfigArray);\n }\n\n return transitionConfigArray;\n }).concat(toTransitionConfigArray(WILDCARD, wildcardConfigs)));\n }\n\n var eventlessConfig = this.config.always ? toTransitionConfigArray('', this.config.always) : [];\n var doneConfig = this.config.onDone ? toTransitionConfigArray(String(done(this.id)), this.config.onDone) : [];\n\n if (!IS_PRODUCTION) {\n warn(!(this.config.onDone && !this.parent), \"Root nodes cannot have an \\\".onDone\\\" transition. Please check the config of \\\"\".concat(this.id, \"\\\".\"));\n }\n\n var invokeConfig = flatten(this.invoke.map(function (invokeDef) {\n var settleTransitions = [];\n\n if (invokeDef.onDone) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(doneInvoke(invokeDef.id)), invokeDef.onDone)), false));\n }\n\n if (invokeDef.onError) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(error(invokeDef.id)), invokeDef.onError)), false));\n }\n\n return settleTransitions;\n }));\n var delayedTransitions = this.after;\n var formattedTransitions = flatten(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(doneConfig), false), __read(invokeConfig), false), __read(onConfig), false), __read(eventlessConfig), false).map(function (transitionConfig) {\n return toArray(transitionConfig).map(function (transition) {\n return _this.formatTransition(transition);\n });\n }));\n\n try {\n for (var delayedTransitions_1 = __values(delayedTransitions), delayedTransitions_1_1 = delayedTransitions_1.next(); !delayedTransitions_1_1.done; delayedTransitions_1_1 = delayedTransitions_1.next()) {\n var delayedTransition = delayedTransitions_1_1.value;\n formattedTransitions.push(delayedTransition);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (delayedTransitions_1_1 && !delayedTransitions_1_1.done && (_a = delayedTransitions_1.return)) _a.call(delayedTransitions_1);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n\n return formattedTransitions;\n };\n\n return StateNode;\n}();\n\nexport { StateNode };\n", "import { StateNode } from './StateNode.js';\n\nfunction Machine(config, options, initialContext) {\n if (initialContext === void 0) {\n initialContext = config.context;\n }\n\n return new StateNode(config, options, initialContext);\n}\nfunction createMachine(config, options) {\n return new StateNode(config, options);\n}\n\nexport { Machine, createMachine };\n", "import Fraction from 'fraction.js'\n\nexport function radian(angle: string): number {\n const coefficient = piCoefficient(angle)\n const fraction = new Fraction(coefficient).valueOf()\n\n return fraction * Math.PI\n}\n\nexport function angleDenominator(angle: string): number {\n const coefficient = piCoefficient(angle)\n const split = coefficient.split('/')\n\n if (split.length === 1) {\n return 1\n } else if (split.length === 2) {\n return parseInt(split[1])\n } else {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n\nexport function angleNumerator(angle: string): number {\n const coefficient = piCoefficient(angle)\n const split = coefficient.split('/')\n\n if (split.length === 1) {\n return parseInt(split[0])\n } else if (split.length === 2) {\n return parseInt(split[0])\n } else {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n\nexport function isAngleLessThan(angle: string, other: string): boolean {\n return new Fraction(piCoefficient(angle)).valueOf() < new Fraction(piCoefficient(other)).valueOf()\n}\n\nexport function isAngleGreaterThan(angle: string, other: string): boolean {\n return new Fraction(piCoefficient(angle)).valueOf() > new Fraction(piCoefficient(other)).valueOf()\n}\n\nexport function isValidAngle(angle: string): boolean {\n if (angle === '0') return true\n if (!/\u03C0/.test(angle)) return false\n\n try {\n const coefficient = piCoefficient(angle)\n new Fraction(coefficient).valueOf()\n\n return true\n } catch (e) {\n return false\n }\n}\n\nexport function piCoefficient(angle: string): string {\n return angle.replace(/(\\d+)\u03C0/g, '$1').replace(/\u03C0/g, '1')\n}\n\nexport function reduceAngle(angle: string): string {\n try {\n const coefficient = piCoefficient(angle)\n const reduced = new Fraction(coefficient).toFraction()\n const split = reduced.split('/')\n\n let numerator: string\n if (split[0] === '0') {\n numerator = '0'\n } else if (split[0] === '1') {\n numerator = `\u03C0`\n } else if (split[0] === '-1') {\n numerator = `-\u03C0`\n } else {\n numerator = `${split[0]}\u03C0`\n }\n\n if (split.length === 1) {\n return numerator\n } else {\n return `${numerator}/${split[1]}`\n }\n } catch (e) {\n throw new Error(`Failed to parse angle '${angle}'`)\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst COLLECTION_CUTOFF = 1000\nconst BAD_TO_STRING_RESULT = Object.prototype.toString.call({})\nconst RECURSE_LIMIT_DESCRIPTION = '!recursion-limit!'\nconst DEFAULT_RECURSION_LIMIT = 10\n\n// Attempts to give a useful and unambiguous description of the given value.\nexport function describe(value: unknown, recursionLimit = DEFAULT_RECURSION_LIMIT): string {\n return (\n tryDescribeAtomic(value) || tryDescribeCollection(value, recursionLimit) || describeFallback(value, recursionLimit)\n )\n}\n\nfunction tryDescribeAtomic(value: unknown) {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (typeof value === 'string') return `\"${value}\"`\n if (typeof value === 'number') return String(value)\n\n return undefined\n}\n\nfunction tryDescribeCollection(value: unknown, recursionLimit: number) {\n if (recursionLimit === 0) return RECURSE_LIMIT_DESCRIPTION\n if (value instanceof Map) return describeMap(value, recursionLimit)\n if (value instanceof Set) return describeSet(value, recursionLimit)\n const isIterable = (v: unknown): v is Iterable => {\n if ((v as Iterable)[Symbol.iterator] !== undefined) {\n return true\n }\n return false\n }\n if (isIterable(value)) return describeIterable(value, recursionLimit)\n\n return undefined\n}\n\nfunction describeFallback(value: unknown, recursionLimit: number) {\n const defaultString = String(value)\n if (defaultString !== BAD_TO_STRING_RESULT) return defaultString\n\n return describeObject(value, recursionLimit)\n}\n\nfunction describeMap(map: Map, limit: number) {\n const entries = []\n for (const [k, v] of map.entries()) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n const keyDesc = describe(k, limit - 1)\n const valDesc = describe(v, limit - 1)\n entries.push(`${keyDesc}: ${valDesc}`)\n }\n return `Map{${entries.join(', ')}}`\n}\n\nfunction describeSet(set: Set, limit: number) {\n const entries = []\n for (const e of set) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n entries.push(describe(e, limit - 1))\n }\n return `Set{${entries.join(', ')}}`\n}\n\nfunction describeIterable(seq: Iterable, limit: number): string {\n const entries = []\n for (const e of seq) {\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n entries.push(describe(e, limit - 1))\n }\n const prefix = Array.isArray(seq) ? '' : seq.constructor.name\n return `${prefix}[${entries.join(', ')}]`\n}\n\nfunction describeObject(value: unknown, limit: number) {\n const entries = []\n for (const k in value as Record) {\n if (!Object.prototype.hasOwnProperty.call(value, k)) {\n continue\n }\n if (entries.length > COLLECTION_CUTOFF) {\n entries.push('[...]')\n break\n }\n const v = (value as Record)[k]\n const keyDesc = describe(k, limit - 1)\n const valDesc = describe(v, limit - 1)\n entries.push(`${keyDesc}: ${valDesc}`)\n }\n\n const typeName = (value as Record).constructor.name\n const prefix = typeName === {}.constructor.name ? '' : `(Type: ${typeName})`\n return `${prefix}{${entries.join(', ')}}`\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {describe} from './describe'\n\nlet CONSTRUCTOR_CALLS_NESTING = 0\n\nexport class DetailedError extends Error {\n public details: string | undefined\n private detailsObj: unknown\n\n constructor(message: string, detailsObj: unknown) {\n super(message)\n\n this.detailsObj = detailsObj\n this.name = 'Error'\n this.message = message\n this.stack = new Error().stack\n if (this.stack !== undefined) {\n this.stack = this.stack.replace(/^Error\\n\\s+at new DetailedError (\\S+)\\s?\\n\\s+at /, '\\n ')\n }\n\n CONSTRUCTOR_CALLS_NESTING++\n try {\n this.details =\n CONSTRUCTOR_CALLS_NESTING === 1\n ? describe(this.detailsObj)\n : '(failed to describe detailsObj due to possibly re-entrancy)'\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.error(ex)\n this.details = '(failed to describe detailsObj, see the console for details)'\n } finally {\n CONSTRUCTOR_CALLS_NESTING--\n }\n }\n}\n", "type UnicodeFraction = {character: string; ref: string; value: number}\n\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const UNICODE_FRACTIONS = [\n {character: '\\u00BD', ref: '\u00BD', expanded: '1/2', value: 1 / 2},\n {character: '\\u00BC', ref: '\u00BC', expanded: '1/4', value: 1 / 4},\n {character: '\\u00BE', ref: '\u00BE', expanded: '3/4', value: 3 / 4},\n {character: '\\u2153', ref: '\u2153', expanded: '1/3', value: 1 / 3},\n {character: '\\u2154', ref: '\u2154', expanded: '2/3', value: 2 / 3},\n {character: '\\u2155', ref: '\u2155', expanded: '1/5', value: 1 / 5},\n {character: '\\u2156', ref: '\u2156', expanded: '2/5', value: 2 / 5},\n {character: '\\u2157', ref: '\u2157', expanded: '3/5', value: 3 / 5},\n {character: '\\u2158', ref: '\u2158', expanded: '4/5', value: 4 / 5},\n {character: '\\u2159', ref: '\u2159', expanded: '1/6', value: 1 / 6},\n {character: '\\u215A', ref: '\u215A', expanded: '5/6', value: 5 / 6},\n {character: '\\u2150', ref: '\u2150', expanded: '1/7', value: 1 / 7},\n {character: '\\u215B', ref: '\u215B', expanded: '1/8', value: 1 / 8},\n {character: '\\u215C', ref: '\u215C', expanded: '3/8', value: 3 / 8},\n {character: '\\u215D', ref: '\u215D', expanded: '5/8', value: 5 / 8},\n {character: '\\u215E', ref: '\u215E', expanded: '7/8', value: 7 / 8},\n {character: '\\u2151', ref: '\u2151', expanded: '1/9', value: 1 / 9},\n {character: '\\u2152', ref: '\u2152', expanded: '1/10', value: 1 / 10}\n]\n\n/**\n * Stores formatting options, for determining what string output should look\n * like.\n */\nexport class Format {\n /**\n * Returns an approximated result, but with the constraint that when it\n * changes slightly it should \"look the same\". (It should look good when\n * varying and animated.)\n */\n static readonly CONSISTENT = new Format(false, 0, 2, ', ')\n\n /**\n * Returns an accurate result, but favoring looking nice over being small.\n */\n static readonly EXACT = new Format(true, 0, undefined, ', ')\n\n /**\n * Returns an accurate result, favoring being small over looking nice.\n */\n static readonly MINIFIED = new Format(true, 0, undefined, ',')\n\n /**\n * Returns an approximated result, strongly favoring looking nice.\n */\n static readonly SIMPLIFIED = new Format(true, 0.0005, 3, ', ')\n\n /**\n * Parses the given text into a float. Works for text created by\n * [[formatFloat]].\n */\n static parseFloat(text: string): number {\n if (text.length === 0) {\n throw new Error(`Not a number: '${text}'`)\n }\n if (text[0] === '-') {\n return -Format.parseFloat(text.substr(1))\n }\n if (text[0] === '\\u221A') {\n return Math.sqrt(Format.parseFloat(text.substr(1)))\n }\n\n const fraction = Format.matchUnicodeFraction(e => e.character === text)\n if (fraction !== undefined) {\n return fraction.value\n }\n\n const result = parseFloat(text)\n if (isNaN(result)) {\n throw new Error(`Not a number: '${text}'`)\n }\n return result\n }\n\n /**\n * Corrects a value to a nearby simple fraction or root thereof, such as\n * sqrt(1/2), so it can be printed compactly.\n *\n * @param value The value to round.\n * @param epsilon The maximum offset error introduced by the rounding.\n */\n static simplifyByRounding(value: number, epsilon: number): number {\n if (value < 0) {\n return -Format.simplifyByRounding(-value, epsilon)\n }\n\n const r = value % 1\n if (r <= epsilon || 1 - r <= epsilon) {\n return Math.round(value)\n }\n\n const fraction = Format.matchUnicodeFraction(e => Math.abs(e.value - value) <= epsilon)\n if (fraction !== undefined) {\n return fraction.value\n }\n\n const rootFraction = Format.matchUnicodeFraction(e => Math.abs(Math.sqrt(e.value) - value) <= epsilon)\n if (rootFraction !== undefined) {\n return Math.sqrt(rootFraction.value)\n }\n\n return value\n }\n\n /**\n * Returns the first element of an array matching the given predicate, or else\n * returns undefined.\n *\n * @hidden\n */\n static matchUnicodeFraction(predicate: (arrayItem: UnicodeFraction) => boolean): UnicodeFraction | undefined {\n for (const each of UNICODE_FRACTIONS) {\n if (predicate(each)) return each\n }\n return undefined\n }\n\n public allowAbbreviation: boolean\n public maxAbbreviationError: number\n public fixedDigits: number | undefined\n public itemSeparator: string\n\n /**\n * @param allowAbbreviation Should outputs be shortened, if possible?\n * @param maxAbbreviationError How much error is abbreviating allowed to introduce?\n * @param fixedDigits Use toFixed? How many digits?\n * @param itemSeparator What should list items be separated by?\n */\n constructor(\n allowAbbreviation: boolean,\n maxAbbreviationError: number,\n fixedDigits: number | undefined,\n itemSeparator: string\n ) {\n this.allowAbbreviation = allowAbbreviation\n this.maxAbbreviationError = maxAbbreviationError\n this.fixedDigits = fixedDigits\n this.itemSeparator = itemSeparator\n }\n\n formatFloat(f: number): string {\n if (this.allowAbbreviation) {\n return this.abbreviateFloat(f, this.maxAbbreviationError, this.fixedDigits)\n }\n if (this.fixedDigits !== undefined) {\n return f.toFixed(this.fixedDigits)\n }\n return String(f)\n }\n\n /**\n * Returns a string representation of a float, taking advantage of unicode\n * fractions and square roots.\n *\n * @param value The value to represent as a string.\n * @param epsilon The maximum error introduced by using an expression.\n * @param digits digits The number of digits to use if no expression matches.\n */\n private abbreviateFloat(value: number, epsilon = 0, digits: number | undefined = undefined): string {\n if (Math.abs(value) < epsilon) return '0'\n if (value < 0) return `-${this.abbreviateFloat(-value, epsilon, digits)}`\n\n const fraction = Format.matchUnicodeFraction(e => Math.abs(e.value - value) <= epsilon)\n if (fraction !== undefined) {\n return fraction.character\n }\n\n const rootFraction = Format.matchUnicodeFraction(e => Math.abs(Math.sqrt(e.value) - value) <= epsilon)\n if (rootFraction !== undefined) {\n return `\\u221A${rootFraction.character}`\n }\n\n if (value % 1 !== 0 && digits !== undefined) {\n return value.toFixed(digits)\n }\n\n return value.toString()\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Util {\n static need(expression: boolean | unknown, message: string, args?: unknown[]): void {\n if (expression !== true) {\n const argDesc = args === undefined ? '(not provided)' : `[${Array.prototype.slice.call(args).join(', ')}]`\n const msgDesc = message === undefined ? '(not provided)' : message\n const msg = `Precondition failed\\n\\nMessage: ${msgDesc}\\n\\nArgs: ${argDesc}`\n throw new Error(msg)\n }\n }\n\n static notNull(v: T): asserts v is NonNullable {\n Util.need(v !== null && v !== undefined, 'notNull')\n }\n\n static snappedCosSin(radians: number): number[] {\n const unit = Math.PI / 4\n const i = Math.round(radians / unit)\n if (i * unit === radians) {\n const s = Math.sqrt(0.5)\n const snaps = [\n [1, 0],\n [s, s],\n [0, 1],\n [-s, s],\n [-1, 0],\n [-s, -s],\n [0, -1],\n [s, -s]\n ]\n return snaps[i & 7]\n }\n return [Math.cos(radians), Math.sin(radians)]\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DetailedError} from './detailed-error'\nimport {Format} from './format'\nimport {Util} from './util'\n\nexport class Complex {\n static readonly ZERO = new Complex(0, 0)\n static readonly ONE = new Complex(1, 0)\n static readonly I = new Complex(0, 1)\n\n public real: number\n public imag: number\n\n static from(v: number | Complex): Complex {\n if (v instanceof Complex) {\n return v\n }\n if (typeof v === 'number') {\n return new Complex(v, 0)\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n static polar(magnitude: number, phase: number): Complex {\n const [cos, sin] = Util.snappedCosSin(phase)\n return new Complex(magnitude * cos, magnitude * sin)\n }\n\n static realPartOf(v: number | Complex): number {\n if (v instanceof Complex) {\n return v.real\n }\n if (typeof v === 'number') {\n return v\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n static imagPartOf(v: number | Complex): number {\n if (v instanceof Complex) {\n return v.imag\n }\n if (typeof v === 'number') {\n return 0\n }\n throw new DetailedError('Unrecognized value type.', {v})\n }\n\n constructor(real: number, imag: number) {\n this.real = real\n this.imag = imag\n }\n\n static rootsOfQuadratic(a: number | Complex, b: number | Complex, c: number | Complex): Complex[] {\n a = Complex.from(a)\n b = Complex.from(b)\n c = Complex.from(c)\n\n if (a.isEqualTo(0)) {\n if (!b.isEqualTo(0)) {\n return [c.times(-1).dividedBy(b)]\n }\n if (!c.isEqualTo(0)) {\n return []\n }\n throw Error('Degenerate')\n }\n\n const difs = b.times(b).minus(a.times(c).times(4)).sqrts()\n const mid = b.times(-1)\n const denom = a.times(2)\n return difs.map(d => mid.minus(d).dividedBy(denom))\n }\n\n isEqualTo(other: unknown): boolean {\n if (other instanceof Complex) {\n return this.real === other.real && this.imag === other.imag\n }\n if (typeof other === 'number') {\n return this.real === other && this.imag === 0\n }\n return false\n }\n\n isApproximatelyEqualTo(other: number | Complex | unknown, epsilon: number): boolean {\n if (other instanceof Complex || typeof other === 'number') {\n const d = this.minus(Complex.from(other))\n return Math.abs(d.real) <= epsilon && Math.abs(d.imag) <= epsilon && d.abs() <= epsilon\n }\n return false\n }\n\n norm2(): number {\n return this.real * this.real + this.imag * this.imag\n }\n\n abs(): number {\n return Math.sqrt(this.norm2())\n }\n\n unit(): Complex {\n const m = this.norm2()\n if (m < 0.00001) {\n return Complex.polar(1, this.phase())\n }\n return this.dividedBy(Math.sqrt(m))\n }\n\n plus(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real + c.real, this.imag + c.imag)\n }\n\n minus(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real - c.real, this.imag - c.imag)\n }\n\n times(v: number | Complex): Complex {\n const c = Complex.from(v)\n return new Complex(this.real * c.real - this.imag * c.imag, this.real * c.imag + this.imag * c.real)\n }\n\n dividedBy(v: number | Complex): Complex {\n const c = Complex.from(v)\n const d = c.norm2()\n if (d === 0) {\n throw new Error('Division by Zero')\n }\n\n const n = this.times(c.conjugate())\n return new Complex(n.real / d, n.imag / d)\n }\n\n sqrts(): [Complex] | [Complex, Complex] {\n const [r, i] = [this.real, this.imag]\n const m = Math.sqrt(Math.sqrt(r * r + i * i))\n if (m === 0) {\n return [Complex.ZERO]\n }\n if (i === 0 && r < 0) {\n return [new Complex(0, m), new Complex(0, -m)]\n }\n\n const a = this.phase() / 2\n const c = Complex.polar(m, a)\n return [c, c.times(-1)]\n }\n\n conjugate(): Complex {\n return new Complex(this.real, -this.imag)\n }\n\n toString(format?: Format): string {\n format = format || Format.EXACT\n return format.allowAbbreviation ? this.toStringAllowSingleValue(format) : this.toStringBothValues(format)\n }\n\n neg(): Complex {\n return new Complex(-this.real, -this.imag)\n }\n\n raisedTo(exponent: number | Complex): Complex {\n if (exponent === 0.5 && this.imag === 0 && this.real >= 0) {\n return new Complex(Math.sqrt(this.real), 0)\n }\n if (Complex.ZERO.isEqualTo(exponent)) {\n return Complex.ONE\n }\n if (this.isEqualTo(Complex.ZERO)) {\n return Complex.ZERO\n }\n return this.ln().times(Complex.from(exponent)).exp()\n }\n\n exp(): Complex {\n return Complex.polar(Math.exp(this.real), this.imag)\n }\n\n cos(): Complex {\n const z = this.times(Complex.I)\n return z.exp().plus(z.neg().exp()).times(0.5)\n }\n\n sin(): Complex {\n const z = this.times(Complex.I)\n return z.exp().minus(z.neg().exp()).dividedBy(new Complex(0, 2))\n }\n\n tan(): Complex {\n return this.sin().dividedBy(this.cos())\n }\n\n ln(): Complex {\n return new Complex(Math.log(this.abs()), this.phase())\n }\n\n phase(): number {\n return Math.atan2(this.imag, this.real)\n }\n\n private toStringAllowSingleValue(format: Format): string {\n if (Math.abs(this.imag) <= format.maxAbbreviationError) {\n return format.formatFloat(this.real)\n }\n if (Math.abs(this.real) <= format.maxAbbreviationError) {\n if (Math.abs(this.imag - 1) <= format.maxAbbreviationError) {\n return 'i'\n }\n if (Math.abs(this.imag + 1) <= format.maxAbbreviationError) {\n return '-i'\n }\n return `${format.formatFloat(this.imag)}i`\n }\n\n return this.toStringBothValues(format)\n }\n\n private toStringBothValues(format: Format): string {\n const separator = this.imag >= 0 ? '+' : '-'\n const imagFactor =\n format.allowAbbreviation && Math.abs(Math.abs(this.imag) - 1) <= format.maxAbbreviationError\n ? ''\n : format.formatFloat(Math.abs(this.imag))\n const prefix = format.allowAbbreviation || format.fixedDigits === undefined || this.real < 0 ? '' : '+'\n return `${prefix + format.formatFloat(this.real) + separator + imagFactor}i`\n }\n}\n", "/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function hasOwnProperty(obj: unknown, key: K): obj is Record {\n return obj !== null && obj !== undefined && key in (obj as Record)\n}\n\nexport type ArrayIsh =\n | unknown[]\n | Float32Array\n | Float64Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Uint8ClampedArray\n\nconst GENERIC_ARRAY_TYPES = [\n Float32Array,\n Float64Array,\n Int8Array,\n Int16Array,\n Int32Array,\n Uint8Array,\n Uint16Array,\n Uint32Array,\n Uint8ClampedArray\n]\n\nexport function equate(subject: unknown, other: unknown): boolean {\n if (subject === other || (isExactlyNaN(subject) && isExactlyNaN(other))) {\n return true\n }\n\n const customEquality = tryEquateCustom(subject, other)\n if (customEquality !== undefined) {\n return customEquality\n }\n if (isAtomic(subject) || isAtomic(other) || !eqType(subject, other)) {\n return false\n }\n\n if (subject instanceof Map && other instanceof Map) {\n return equateMaps(subject, other)\n }\n if (subject instanceof Set && other instanceof Set) {\n return equateSets(subject, other)\n }\n if (isIndexable(subject) && isIndexable(other)) {\n return equateIndexables(subject, other)\n }\n\n return equateObjects(subject, other)\n}\n\nfunction isIndexable(value: unknown): value is ArrayIsh {\n return Array.isArray(value) || !GENERIC_ARRAY_TYPES.every(t => !(value instanceof t))\n}\n\nfunction isExactlyNaN(v: unknown) {\n return typeof v === 'number' && isNaN(v)\n}\n\nfunction tryEquateCustom(subject: unknown, other: unknown): boolean | undefined {\n if (!isAtomic(subject) && hasOwnProperty(subject, 'isEqualTo') && typeof subject.isEqualTo === 'function') {\n return subject.isEqualTo(other) as boolean\n }\n if (!isAtomic(other) && hasOwnProperty(other, 'isEqualTo') && typeof other.isEqualTo === 'function') {\n return other.isEqualTo(subject) as boolean\n }\n return undefined\n}\n\ntype Atomic = null | undefined | string | number | boolean\n\nfunction isAtomic(value: unknown): value is Atomic {\n return (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n}\n\nfunction equateMaps(subject: Map, other: Map) {\n if (subject.size !== other.size) {\n return false\n }\n for (const [k, v] of subject) {\n if (!other.has(k)) {\n return false\n }\n const otherV = other.get(k)\n if (!equate(v, otherV)) {\n return false\n }\n }\n return true\n}\n\nfunction equateSets(subject: Set, other: Set) {\n if (subject.size !== other.size) {\n return false\n }\n for (const k of subject) {\n if (!other.has(k)) {\n return false\n }\n }\n return true\n}\n\nfunction eqType(subject: unknown, other: unknown): boolean {\n return typeof subject === typeof other\n}\n\nfunction equateIndexables(subject: ArrayIsh, other: ArrayIsh) {\n if (subject.length !== other.length) {\n return false\n }\n for (let i = 0; i < subject.length; i++) {\n if (!equate(subject[i], other[i])) {\n return false\n }\n }\n return true\n}\n\nfunction objectKeys(obj: unknown) {\n const result = new Set()\n for (const k in obj as Record) {\n if (hasOwnProperty(obj, k)) {\n result.add(k)\n }\n }\n return result\n}\n\nfunction equateObjects(subject: unknown, other: unknown) {\n const keys = objectKeys(subject)\n if (!equateSets(keys, objectKeys(other))) {\n return false\n }\n\n for (const k of keys) {\n if (k === Symbol.iterator) {\n continue\n }\n if (!equate((subject as Record)[k as string], (other as Record)[k as string])) {\n return false\n }\n }\n\n const hasSubjectIter = hasOwnProperty(subject, Symbol.iterator)\n const hasOtherIter = hasOwnProperty(other, Symbol.iterator)\n if (hasSubjectIter !== hasOtherIter) {\n return false\n }\n if (hasSubjectIter && hasOtherIter) {\n if (!equateIterables(subject as Iterable, other as Iterable)) {\n return false\n }\n }\n\n return true\n}\n\nfunction equateIterables(subject: Iterable, other: Iterable) {\n const otherIter = other[Symbol.iterator]()\n for (const subjectItem of subject) {\n const otherItemDone = otherIter.next()\n if (otherItemDone.done || !equate(subjectItem, otherItemDone.value)) {\n return false\n }\n }\n return otherIter.next().done\n}\n", "export const SerializedHGateType = 'H'\n\nexport type SerializedHGate = {\n type: typeof SerializedHGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedXGateType = 'X'\n\nexport type SerializedXGate = {\n type: typeof SerializedXGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedYGateType = 'Y'\n\nexport type SerializedYGate = {\n type: typeof SerializedYGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedZGateType = 'Z'\n\nexport type SerializedZGate = {\n type: typeof SerializedZGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedPhaseGateType = 'P'\n\nexport type SerializedPhaseGate = {\n type: typeof SerializedPhaseGateType\n angle?: string\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedTGateType = 'T'\n\nexport type SerializedTGate = {\n type: typeof SerializedTGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedRnotGateType = 'X^\u00BD'\n\nexport type SerializedRnotGate = {\n type: typeof SerializedRnotGateType\n targets: number[]\n controls?: number[]\n if?: string\n}\n", "export const SerializedRxGateType = 'Rx'\n\nexport type SerializedRxGate = {\n type: typeof SerializedRxGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedRyGateType = 'Ry'\n\nexport type SerializedRyGate = {\n type: typeof SerializedRyGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedRzGateType = 'Rz'\n\nexport type SerializedRzGate = {\n type: typeof SerializedRzGateType\n targets: number[]\n angle?: string\n controls?: number[]\n if?: string\n}\n", "export const SerializedSwapGateType = 'Swap'\n\nexport type SerializedSwapGate = {\n type: typeof SerializedSwapGateType\n targets: [number, number]\n controls?: number[]\n}\n", "export const SerializedControlGateType = '\u2022'\n\nexport type SerializedControlGate = {\n type: typeof SerializedControlGateType\n targets: number[]\n}\n", "export const SerializedBlochDisplayType = 'Bloch'\n\nexport type SerializedBlochDisplay = {\n type: typeof SerializedBlochDisplayType\n targets: number[]\n}\n", "export const SerializedWrite0GateType = '|0>'\nexport const SerializedWrite1GateType = '|1>'\n\nexport type SerializedWriteGate = {\n type: typeof SerializedWrite0GateType | typeof SerializedWrite1GateType\n targets: number[]\n}\n", "export const SerializedMeasurementGateType = 'Measure'\n\nexport type SerializedMeasurementGate = {\n type: typeof SerializedMeasurementGateType\n targets: number[]\n flag?: string\n}\n", "import {Interpreter, createMachine, interpret} from 'xstate'\nimport {Util, describe} from '@qni/common'\nimport {CircuitDropzoneElement} from '../circuit-dropzone-element'\nimport {Constructor} from './constructor'\nimport {InteractEvent} from '@interactjs/types'\nimport {PaletteDropzoneElement} from '../palette-dropzone-element'\nimport {attr} from '@github/catalyst'\nimport interact from 'interactjs'\n\nconst isCircuitDropzoneElement = (arg: unknown): arg is CircuitDropzoneElement =>\n arg !== undefined && arg !== null && (arg as Element).tagName === 'CIRCUIT-DROPZONE'\n\nconst isPaletteDropzoneElement = (arg: unknown): arg is PaletteDropzoneElement =>\n arg !== undefined && arg !== null && (arg as Element).tagName === 'PALETTE-DROPZONE'\n\nexport declare class Draggable {\n get operationX(): number\n set operationX(value: number)\n get operationY(): number\n set operationY(value: number)\n set draggable(value: boolean)\n get grabbed(): boolean\n set grabbed(value: boolean)\n get dragging(): boolean\n set dragging(value: boolean)\n get snapped(): boolean\n set snapped(value: boolean)\n get bit(): number\n set bit(value: number)\n get dropzone(): PaletteDropzoneElement | CircuitDropzoneElement | null\n get snapRange(): number\n set snapTargets(value: Array<{x: number; y: number}>)\n}\n\ntype DraggableContext = Record\ntype DraggableEvent =\n | {type: 'SET_INTERACT'}\n | {type: 'UNSET_INTERACT'}\n | {type: 'DELETE'}\n | {type: 'GRAB'; x: number; y: number}\n | {type: 'UNGRAB'}\n | {type: 'START_DRAGGING'}\n | {type: 'END_DRAGGING'}\n | {type: 'SNAP'}\n | {type: 'UNSNAP'}\n\nexport function DraggableMixin>(Base: TBase): Constructor & TBase {\n class DraggableMixinClass extends Base {\n @attr operationX = 0\n @attr operationY = 0\n @attr grabbed = false\n @attr dragging = false\n @attr snapped = false\n @attr bit = -1\n @attr debugDraggable = false\n\n private snappedDropzone!: CircuitDropzoneElement | null | undefined\n private draggableMachine = createMachine(\n {\n id: 'draggable',\n initial: 'idle',\n states: {\n idle: {\n on: {\n SET_INTERACT: {\n target: 'grabbable',\n actions: ['setInteract']\n }\n }\n },\n grabbable: {\n on: {\n GRAB: {\n target: 'grabbed',\n actions: ['grab']\n },\n UNSET_INTERACT: {\n target: 'idle'\n }\n }\n },\n grabbed: {\n on: {\n START_DRAGGING: {\n target: 'dragging',\n actions: ['startDragging']\n },\n UNGRAB: [\n {\n target: 'grabbable',\n actions: ['unGrab'],\n cond: 'isOnCircuitDropzone'\n },\n {\n target: 'deleted',\n actions: ['unGrab'],\n cond: 'isOnPaletteDropzone'\n }\n ]\n }\n },\n dragging: {\n type: 'compound',\n initial: 'unknown',\n on: {\n END_DRAGGING: {\n target: 'dropped',\n actions: ['endDragging']\n }\n },\n states: {\n unknown: {\n always: [\n {target: 'snapped', cond: 'isOnCircuitDropzone'},\n {target: 'unsnapped', cond: 'isOnPaletteDropzone'}\n ]\n },\n snapped: {\n entry: ['snap'],\n on: {\n UNSNAP: {\n target: 'unsnapped'\n }\n }\n },\n unsnapped: {\n entry: ['unsnap'],\n on: {\n SNAP: {\n target: 'snapped'\n }\n }\n }\n }\n },\n dropped: {\n entry: ['drop'],\n always: [\n {target: 'grabbable', cond: 'droppedOnCircuitDropzone'},\n {target: 'deleted', cond: 'trashed'}\n ]\n },\n deleted: {\n type: 'final',\n entry: 'delete'\n }\n }\n },\n {\n actions: {\n setInteract: () => {\n const interactable = interact(this)\n interactable.styleCursor(false)\n interactable.on('down', this.grab.bind(this))\n interactable.on('up', this.unGrab.bind(this))\n interactable.draggable({\n onstart: this.startDragging.bind(this),\n onmove: this.dragMove.bind(this),\n onend: this.endDragging.bind(this)\n })\n\n const dropzone = this.dropzone\n if (isCircuitDropzoneElement(dropzone)) {\n this.snappedDropzone = dropzone\n } else {\n this.snappedDropzone = null\n }\n },\n grab: (_context, event) => {\n if (event.type !== 'GRAB') return\n\n this.grabbed = true\n this.dispatchEvent(new Event('operation-grab', {bubbles: true}))\n\n if (isPaletteDropzoneElement(this.dropzone)) {\n this.snapped = false\n this.moveByOffset(event.x, event.y)\n }\n },\n unGrab: () => {\n this.grabbed = false\n this.dispatchEvent(new Event('operation-ungrab', {bubbles: true}))\n },\n startDragging: () => {\n this.dragging = true\n },\n endDragging: () => {\n this.grabbed = false\n this.dragging = false\n this.dispatchEvent(new Event('operation-end-dragging', {bubbles: true}))\n },\n snap: () => {\n this.snapped = true\n this.snappedDropzone = this.dropzone as CircuitDropzoneElement\n this.dispatchEvent(new Event('operation-snap', {bubbles: true}))\n },\n unsnap: () => {\n this.snapped = false\n if (this.snappedDropzone) {\n this.snappedDropzone.dispatchEvent(new Event('operation-unsnap', {bubbles: true}))\n }\n },\n drop: () => {\n if (!this.snapped) return\n\n this.moveTo(0, 0)\n this.dispatchEvent(new Event('operation-drop', {bubbles: true}))\n },\n delete: () => {\n interact(this).unset()\n this.dispatchEvent(new Event('operation-delete', {bubbles: true}))\n }\n },\n guards: {\n isOnCircuitDropzone: () => {\n return isCircuitDropzoneElement(this.dropzone)\n },\n isOnPaletteDropzone: () => {\n return isPaletteDropzoneElement(this.dropzone)\n },\n droppedOnCircuitDropzone: () => {\n return this.snapped && isCircuitDropzoneElement(this.dropzone)\n },\n trashed: () => {\n return !this.snapped\n }\n }\n }\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private draggableService!: Interpreter\n\n set draggable(value: boolean) {\n this.maybeInitStateMachine()\n\n if (value) {\n this.draggableService.send({type: 'SET_INTERACT'})\n } else {\n this.draggableService.send({type: 'UNSET_INTERACT'})\n }\n }\n\n get dropzone(): PaletteDropzoneElement | CircuitDropzoneElement | null {\n const el = this.parentElement\n Util.notNull(el)\n\n if (!isPaletteDropzoneElement(el) && !isCircuitDropzoneElement(el)) {\n return null\n }\n return el as PaletteDropzoneElement | CircuitDropzoneElement\n }\n\n private maybeInitStateMachine(): void {\n if (this.draggableService !== undefined) return\n\n this.draggableService = interpret(this.draggableMachine)\n .onTransition(state => {\n if (this.debugDraggable) {\n // eslint-disable-next-line no-console\n console.log(`draggable: ${describe(state.value)}`)\n }\n })\n .start()\n }\n\n set snapTargets(values: Array<{x: number; y: number}>) {\n interact(this).draggable({\n modifiers: [\n interact.modifiers.snap({\n targets: values,\n range: this.snapRange,\n relativePoints: [{x: 0.5, y: 0.5}]\n })\n ],\n listeners: {\n move: this.moveEventListener.bind(this)\n }\n })\n }\n\n get snapRange(): number {\n return this.offsetWidth\n }\n\n private moveEventListener(event: InteractEvent) {\n const snapModifier = event.modifiers![0]\n\n if (snapModifier.inRange) {\n const snapTargetInfo = snapModifier.target.source\n this.dispatchEvent(new CustomEvent('operation-in-snap-range', {detail: {snapTargetInfo}, bubbles: true}))\n\n this.moveTo(0, 0)\n\n if (this.snappedDropzone && this.snappedDropzone !== this.dropzone) {\n this.draggableService.send({type: 'UNSNAP'})\n }\n\n this.draggableService.send({type: 'SNAP'})\n } else {\n if (this.snapped) {\n this.draggableService.send({type: 'UNSNAP'})\n }\n }\n }\n\n private grab(event: MouseEvent): void {\n this.draggableService.send({type: 'GRAB', x: event.offsetX, y: event.offsetY})\n }\n\n private unGrab(): void {\n this.draggableService.send({type: 'UNGRAB'})\n }\n\n private startDragging(): void {\n this.draggableService.send({type: 'START_DRAGGING'})\n }\n\n private endDragging(): void {\n this.draggableService.send({type: 'END_DRAGGING'})\n }\n\n private dragMove(event: InteractEvent): void {\n this.move(event.dx, event.dy)\n }\n\n private move(dx: number, dy: number): void {\n const x = this.operationX + dx\n const y = this.operationY + dy\n this.moveTo(x, y)\n }\n\n private moveTo(x: number, y: number): void {\n this.operationX = x\n this.operationY = y\n this.style.transform = `translate(${x}px, ${y}px)`\n }\n\n private moveByOffset(offsetX: number, offsetY: number): void {\n const dx = offsetX - this.clientWidth / 2\n const dy = offsetY - this.clientHeight / 2\n this.move(dx, dy)\n }\n }\n\n return DraggableMixinClass as Constructor & TBase\n}\n", "import {Constructor} from './constructor'\nimport {attr} from '@github/catalyst'\n\nexport declare class Flaggable {\n get flag(): string\n set flag(value: string)\n}\n\nexport const isFlaggable = (arg: unknown): arg is Flaggable =>\n typeof arg === 'object' && arg !== null && typeof (arg as Flaggable).flag === 'string'\n\nexport function FlaggableMixin>(Base: TBase): Constructor & TBase {\n class FlaggableMixinClass extends Base {\n @attr flag = ''\n }\n\n return FlaggableMixinClass as Constructor & TBase\n}\n", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n var offsetHeight = element.offsetHeight;\n var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // Fallback to 1 in case both values are `0`\n\n if (offsetWidth > 0) {\n scaleX = round(rect.width) / offsetWidth || 1;\n }\n\n if (offsetHeight > 0) {\n scaleY = round(rect.height) / offsetHeight || 1;\n }\n }\n\n return {\n width: rect.width / scaleX,\n height: rect.height / scaleY,\n top: rect.top / scaleY,\n right: rect.right / scaleX,\n bottom: rect.bottom / scaleY,\n left: rect.left / scaleX,\n x: rect.left / scaleX,\n y: rect.top / scaleY\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};", "var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}", "var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases \u2013 research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};", "export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}", "export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}", "export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update \u2013 it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update \u2013 it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "export const ROUND_ARROW =\n '';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n\nexport const TIPPY_DEFAULT_APPEND_TO = () => document.body;\n", "import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(\n obj: Record,\n key: string\n): boolean {\n return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn(\n value: T | [T | null, T | null],\n index: number,\n defaultValue: T | [T, T]\n): T {\n if (Array.isArray(value)) {\n const v = value[index];\n return v == null\n ? Array.isArray(defaultValue)\n ? defaultValue[index]\n : defaultValue\n : v;\n }\n\n return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n const str = {}.toString.call(value);\n return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce(\n fn: (arg: T) => void,\n ms: number\n): (arg: T) => void {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n let timeout: any;\n\n return (arg): void => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(arg);\n }, ms);\n };\n}\n\nexport function removeProperties(obj: T, keys: string[]): Partial {\n const clone = {...obj};\n keys.forEach((key) => {\n delete (clone as any)[key];\n });\n return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray(value: T | T[]): T[] {\n return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique(arr: T[], value: T): void {\n if (arr.indexOf(value) === -1) {\n arr.push(value);\n }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique(arr: T[]): T[] {\n return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike): any[] {\n return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n obj: Record\n): Partial> {\n return Object.keys(obj).reduce((acc, key) => {\n if (obj[key] !== undefined) {\n (acc as any)[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n", "import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n if (isElement(value)) {\n return [value];\n }\n\n if (isNodeList(value)) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n els: (HTMLDivElement | null)[],\n value: number\n): void {\n els.forEach((el) => {\n if (el) {\n el.style.transitionDuration = `${value}ms`;\n }\n });\n}\n\nexport function setVisibilityState(\n els: (HTMLDivElement | null)[],\n state: 'visible' | 'hidden'\n): void {\n els.forEach((el) => {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n\nexport function getOwnerDocument(\n elementOrElements: Element | Element[]\n): Document {\n const [element] = normalizeToArray(elementOrElements);\n\n // Elements created via a